Присвоение к переменной строку из лога

Раздел для тех, кто начинает знакомиться с MikroTik
Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
Ответить
LBAASKA
Сообщения: 15
Зарегистрирован: 19 окт 2016, 14:09

Как получить из системного лога событий нужную мне строку и присвоить эту строку к переменной.
Хочу получить из лога последнюю событию по включении интерфейса pppoe. В логах пишется событие вот таком виде "pppoe-out1: connected".
Мне нужно присвоить это сообщение в глобальной переменной.
Почему то при присвоении я получаю строку вот таком виде "*10;*1d;*2b;*38" соответствует ли это значение к сообщению "pppoe-out1 :connected". Если да то вопрос решен. Остается только получить именно последнее событие.


Аватара пользователя
Vlad-2
Модератор
Сообщения: 2531
Зарегистрирован: 08 апр 2016, 19:19
Откуда: Петропавловск-Камчатский (п-ов Камчатка)
Контактная информация:

Со скриптами пока я на Вы, но хочу поделиться самой идеей.

1) Идём в РРР раздел
2) Там, в разделе Profiles создаем отдельный профиль для нашего рррое
3) В текущем рррое-клиенте надо в свойства указать новый (созданный) профиль
4) Идём снова в Profile, кликаем на новом созданном профайле, на последней закладке есть
закладка - Scripts, в разделе On Up - пропишите, чтобы в переменную и заносилось то что Вам надо.

То есть идея моя в чём: не отлавливать из лога, а заставить сам рррое в переменную вносить то, что Вам надо.
Сразу ещё раз повторюсь - это лишь идея, так сказать взгляд с другого ракурса.

P.S.
У меня на роутере 3 рррое подключения, но я одно рррое подключение выделил в отдельный профиль,
и в тех закладках про которые я выше написал, я вставил скрипт отслеживания получения адреса,
мой провайдер повадился изредка, за место внешнего динамического адреса, давать серый.
Поэтому скриптом и перестраховываюсь, что если не тот айпи, рвать коннект и снова.
А разделил я отдельным профилем, чтобы скрипт работал только для этого подключения,
и не затрагивал другие рррое для других провайдеров/договоров.



На работе(ах): 2xCCR1016-12G, RB3011UiAS и hAP lite (RB941)
Дома: CCR1016-12G, RBcAP2n (standalone), RB wAP LTE kit
Для тестов(под рукой): RB3011UiAS, hAP mini (RB931) и что-то ещё по мелочи
MTCNA
MTCRE
LBAASKA
Сообщения: 15
Зарегистрирован: 19 окт 2016, 14:09

Vlad-2 писал(а): 30 янв 2019, 10:29 Со скриптами пока я на Вы, но хочу поделиться самой идеей.

1) Идём в РРР раздел
2) Там, в разделе Profiles создаем отдельный профиль для нашего рррое
3) В текущем рррое-клиенте надо в свойства указать новый (созданный) профиль
4) Идём снова в Profile, кликаем на новом созданном профайле, на последней закладке есть
закладка - Scripts, в разделе On Up - пропишите, чтобы в переменную и заносилось то что Вам надо.

То есть идея моя в чём: не отлавливать из лога, а заставить сам рррое в переменную вносить то, что Вам надо.
Сразу ещё раз повторюсь - это лишь идея, так сказать взгляд с другого ракурса.

P.S.
У меня на роутере 3 рррое подключения, но я одно рррое подключение выделил в отдельный профиль,
и в тех закладках про которые я выше написал, я вставил скрипт отслеживания получения адреса,
мой провайдер повадился изредка, за место внешнего динамического адреса, давать серый.
Поэтому скриптом и перестраховываюсь, что если не тот айпи, рвать коннект и снова.
А разделил я отдельным профилем, чтобы скрипт работал только для этого подключения,
и не затрагивал другие рррое для других провайдеров/договоров.
Я хочу получить внешний айпи на почту. У меня иногда провайдер выдает какие то странные айпи. Чтобы получить нормальную айпи делаю скриптом отключение и включение интерфейса до тех пор пока айпи с pppoe интерфейса не совпадет с айпи, который получил переменная с сайта dyndns. Если у этих переменных совпадет айпи после нескольких отключений и включений интерфейса pppoe, то тогда мне должна прийти письмо с айпи адресом.
Пишу скрипте вот такое условие: if ($WAN!=$CurIP) do={ interface pppoe-clietn disable 0; interface pppoe-client enable 0} else={:log info "айпи не поменялся"} типо такое условие.
Если в else запихнуть отправку на почту, то я получу каждые полчаса письмо с айпи адресом. А хотелось бы чтобы один раз в день хотя бы получить. Чтобы такого не было хочу взять с лога сообщение pppoe-out1 :connected и создать переменную с таким же текстом и сравнить.
Если сообщения совпадают, то только тогда отправляется письмо. Ну там еще в логе сообщение pppoe-out1:connected может быть несколько раз в день в разное время.


Аватара пользователя
Vlad-2
Модератор
Сообщения: 2531
Зарегистрирован: 08 апр 2016, 19:19
Откуда: Петропавловск-Камчатский (п-ов Камчатка)
Контактная информация:

LBAASKA писал(а): 31 янв 2019, 05:14 Я хочу получить внешний айпи на почту. У меня иногда провайдер выдает какие то странные айпи. Чтобы получить нормальную айпи делаю скриптом отключение и включение интерфейса до тех пор пока айпи с pppoe интерфейса не совпадет с айпи, который получил переменная с сайта dyndns.
Простите, но вроде должно быть наоборот, подключились к интернету, получили айпи, ждём 3-6-8 минут, служба динднс
засинхронизировалась и уже показывает текущий айпи который получил рррое интерфейс при коннекте.
Мне кажется такая последовательность логична (подняли сессию, получили айпи от провайдера, передали её ДинДНС),
также работает и Cloud в самом микротике, ему надо тоже до 5-8 минут для обновления.
LBAASKA писал(а): 31 янв 2019, 05:14 Если у этих переменных совпадет айпи после нескольких отключений и включений интерфейса pppoe, то тогда мне должна прийти письмо с айпи адресом.
Пишу скрипте вот такое условие: if ($WAN!=$CurIP) do={ interface pppoe-clietn disable 0; interface pppoe-client enable 0} else={:log info "айпи не поменялся"} типо такое условие.
Если в else запихнуть отправку на почту, то я получу каждые полчаса письмо с айпи адресом. А хотелось бы чтобы один раз в день хотя бы получить. Чтобы такого не было хочу взять с лога сообщение pppoe-out1 :connected и создать переменную с таким же текстом и сравнить.
Если сообщения совпадают, то только тогда отправляется письмо. Ну там еще в логе сообщение pppoe-out1:connected может быть несколько раз в день в разное время.
Ещё раз, у меня рррое поднялся, в скрипте присвоилась переменная, сравнилась что айпи не попал в серый диапазон,
и продолжает работать и сессия не рвётся. Обычно рррое само передёргивается или провайдер дёргает обычно раз в 2-4 дня.
Бывает и чаще, но по логам именно так.

Поэтому не вижу логики у Вас, поднимать сессию раз 10-15, рвать её, ждать, и так далее.....
Разделите логику, подняли сессию, получили ip, ждите синхронизации с ДинДНС,
потом уже отправляйте почту.
А ещё проще включить Cloud и не париться.

P.S.
На всякий случай дою свой простой скриптик (писался наскоряк).

Код: Выделить всё

:local newIP [:pick [/ip address get [find interface ="pppoe-out4-RTK2-vlan822"] address] 0 4]
:if ($newIP = "10.2") do={
:local curIP1 [:pick [/ip address get [find interface ="pppoe-out4-RTK2-vlan822"] address] 0 20]
/log error "========= IPS gave me the address $curIP1 =================="
/log warning "========== PPPoE IP address is not correct. Fix it! =========="
/interface pppoe-client disable "pppoe-out4-RTK2-vlan822"
:delay 7
/interface pppoe-client enable "pppoe-out4-RTK2-vlan822"
:delay 2
:local curIP2 [:pick [/ip address get [find interface ="pppoe-out4-RTK2-vlan822"] address] 0 20]
/log error "========= (check) IPS gave me the address $curIP2 =================="
/log warning "========== PPPoE address Corrected =========="
}



На работе(ах): 2xCCR1016-12G, RB3011UiAS и hAP lite (RB941)
Дома: CCR1016-12G, RBcAP2n (standalone), RB wAP LTE kit
Для тестов(под рукой): RB3011UiAS, hAP mini (RB931) и что-то ещё по мелочи
MTCNA
MTCRE
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Не изобретайте костыльные велосипеды. Всё это давно сделано. Универсальный скрипт называется log parser и легко находится на Микротик Вики.

https://wiki.mikrotik.com/wiki/Log_Pars ... ger_Script

Можно укоротить и адаптировать под свою задачу. А то, что в ТЗ пишется в "две строки" ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
LBAASKA
Сообщения: 15
Зарегистрирован: 19 окт 2016, 14:09

Vlad-2 писал(а): 31 янв 2019, 10:07
LBAASKA писал(а): 31 янв 2019, 05:14 Я хочу получить внешний айпи на почту. У меня иногда провайдер выдает какие то странные айпи. Чтобы получить нормальную айпи делаю скриптом отключение и включение интерфейса до тех пор пока айпи с pppoe интерфейса не совпадет с айпи, который получил переменная с сайта dyndns.
Простите, но вроде должно быть наоборот, подключились к интернету, получили айпи, ждём 3-6-8 минут, служба динднс
засинхронизировалась и уже показывает текущий айпи который получил рррое интерфейс при коннекте.
Мне кажется такая последовательность логична (подняли сессию, получили айпи от провайдера, передали её ДинДНС),
также работает и Cloud в самом микротике, ему надо тоже до 5-8 минут для обновления.
LBAASKA писал(а): 31 янв 2019, 05:14 Если у этих переменных совпадет айпи после нескольких отключений и включений интерфейса pppoe, то тогда мне должна прийти письмо с айпи адресом.
Пишу скрипте вот такое условие: if ($WAN!=$CurIP) do={ interface pppoe-clietn disable 0; interface pppoe-client enable 0} else={:log info "айпи не поменялся"} типо такое условие.
Если в else запихнуть отправку на почту, то я получу каждые полчаса письмо с айпи адресом. А хотелось бы чтобы один раз в день хотя бы получить. Чтобы такого не было хочу взять с лога сообщение pppoe-out1 :connected и создать переменную с таким же текстом и сравнить.
Если сообщения совпадают, то только тогда отправляется письмо. Ну там еще в логе сообщение pppoe-out1:connected может быть несколько раз в день в разное время.
Ещё раз, у меня рррое поднялся, в скрипте присвоилась переменная, сравнилась что айпи не попал в серый диапазон,
и продолжает работать и сессия не рвётся. Обычно рррое само передёргивается или провайдер дёргает обычно раз в 2-4 дня.
Бывает и чаще, но по логам именно так.

Поэтому не вижу логики у Вас, поднимать сессию раз 10-15, рвать её, ждать, и так далее.....
Разделите логику, подняли сессию, получили ip, ждите синхронизации с ДинДНС,
потом уже отправляйте почту.
А ещё проще включить Cloud и не париться.

P.S.
На всякий случай дою свой простой скриптик (писался наскоряк).

Код: Выделить всё

:local newIP [:pick [/ip address get [find interface ="pppoe-out4-RTK2-vlan822"] address] 0 4]
:if ($newIP = "10.2") do={
:local curIP1 [:pick [/ip address get [find interface ="pppoe-out4-RTK2-vlan822"] address] 0 20]
/log error "========= IPS gave me the address $curIP1 =================="
/log warning "========== PPPoE IP address is not correct. Fix it! =========="
/interface pppoe-client disable "pppoe-out4-RTK2-vlan822"
:delay 7
/interface pppoe-client enable "pppoe-out4-RTK2-vlan822"
:delay 2
:local curIP2 [:pick [/ip address get [find interface ="pppoe-out4-RTK2-vlan822"] address] 0 20]
/log error "========= (check) IPS gave me the address $curIP2 =================="
/log warning "========== PPPoE address Corrected =========="
}
Например бывает такое интерфейс pppoe получил с провайдера адрес 10.80.231.92 это пример.
А с динднс переменная получает нормальный адрес допустим 94.245.190.65. А в cloud тоже этот адрес висит. Пытаешься зайти в микротик через cloud не пускает, потому что адрес pppoe другой. Хотя все работает интернет есть айпи тв показывает все нормально. Для этого и я перезагружаю интерфейс pppoe, до тех пор пока не совпадут айпи адреса.


Аватара пользователя
Vlad-2
Модератор
Сообщения: 2531
Зарегистрирован: 08 апр 2016, 19:19
Откуда: Петропавловск-Камчатский (п-ов Камчатка)
Контактная информация:

LBAASKA писал(а): 01 фев 2019, 04:28 Например бывает такое интерфейс pppoe получил с провайдера адрес 10.80.231.92 это пример.
А с динднс переменная получает нормальный адрес допустим 94.245.190.65. А в cloud тоже этот адрес висит. Пытаешься зайти в микротик через cloud не пускает, потому что адрес pppoe другой. Хотя все работает интернет есть айпи тв показывает все нормально. Для этого и я перезагружаю интерфейс pppoe, до тех пор пока не совпадут айпи адреса.
Мда....
1) уточните у провайдера, у Вас по договору положен динамический внешний адрес
(и в целом какие адреса у Вас на рррое в обычном режиме?)
Может провайдер химичит, пытается подсовывать серую сетку? А сам её потом и НАТ делает.
Такое бывает.
Другой провайдер у нас делает так: ушёл в минус, сессия получает серый адрес, ничего не доступно,
только Биллинг, заходи, плати и смотри, как оплата прошла, рррое сам переконектился, адрес
стал внешним...

2) ДинДНС и Cloud - они должны брать(узнавать) новый/текущий адрес и его отдавать при запросах в DNS'е по миру
То есть (аллегория): Вы купили/сняли квартиру и сообщаете друзьям(адрес) где будет новоселье,
а не пытаетесь (как сейчас делаете) застать всех друзей в одном районе и там снять квартиру...
Причина и следствие, у Вас же - пока наоборот.

Как я и говорил, бывают задержки, что роутер подключился, рррое поднялся, но синхронизация
с Cloud или с тем же ДинДНС не произошла, и бывает и надо 5-10 минут ждать. Бывало и по 30 минут
один раз не работало.

У меня у друзей (уже восьмерым) поставил роутеры, у них динамический внешний адрес,
всегда разный, и я не даже не волнуюсь, при настройке записал серийный номер роутера,
включил Сloud, и когда хочу к нему подключиться и/или настроить в первый раз профиль
подключения в Винбоксе - просто ввожу серийник.sn.mynetname.net и подключаюсь.



На работе(ах): 2xCCR1016-12G, RB3011UiAS и hAP lite (RB941)
Дома: CCR1016-12G, RBcAP2n (standalone), RB wAP LTE kit
Для тестов(под рукой): RB3011UiAS, hAP mini (RB931) и что-то ещё по мелочи
MTCNA
MTCRE
Ответить