Страница 1 из 1

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

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

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

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

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

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

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

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

Добавлено: 31 янв 2019, 05:14
LBAASKA
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 может быть несколько раз в день в разное время.

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

Добавлено: 31 янв 2019, 10:07
Vlad-2
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 =========="
}

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

Добавлено: 31 янв 2019, 23:08
Sertik
Не изобретайте костыльные велосипеды. Всё это давно сделано. Универсальный скрипт называется log parser и легко находится на Микротик Вики.

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

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

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

Добавлено: 01 фев 2019, 04:28
LBAASKA
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, до тех пор пока не совпадут айпи адреса.

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

Добавлено: 01 фев 2019, 06:27
Vlad-2
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 и подключаюсь.