Ad Widget

Collapse

Настройка Zabbix для мониторинга SIP транков в Ас

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #16
    Originally posted by SolarW
    О, да, присоединяюсь к просьбе - очень интересно поучится у специалистов умеющих без конвейеров одной командой sed/awk нужный результат получить.
    Совсем без конвейеров не выйдет - в awk попасть данные должны как-то.
    Вот, что у меня вышло с grep:
    Code:
    cat ./output.txt | grep -q "^.*$1\s*\d*.*Registered.*$"  && echo 1 || echo 0
    cat ./output.txt = asterisk -rx "sip show registry"
    Правда, я пока не сообразил, как обработать ситуацию, когда в $1 равен пустой строке.

    ...или задача как-то иначе звучит?
    Last edited by sadman; 21-03-2017, 14:55.

    Comment

    • yukra
      Senior Member
      • Apr 2013
      • 1359

      #17
      Originally posted by SolarW
      О, да, присоединяюсь к просьбе - очень интересно поучится у специалистов умеющих без конвейеров одной командой sed/awk нужный результат получить.
      Kos, yukra - просим :-)
      Ну я вроде как сразу сказал что я бы перл взял, но раз просите, то вот для примера можно заменить для trunks на это http://pastebin.com/Hw07bFJN
      Полный вывод http://pastebin.com/PxE2s3kn


      Переделать этот пример под ips и registration_monitoring можно без особого труда, меняем только аргументы для printf

      Зы ссылками на пастебин, потому что форуму в awk-коде чудиться много гиперссылок и пост непроходит.

      Comment

      • Kos
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • Aug 2015
        • 3404

        #18
        Originally posted by SolarW
        О, да, присоединяюсь к просьбе - очень интересно поучится у специалистов умеющих без конвейеров одной командой sed/awk нужный результат получить.
        Kos, yukra - просим :-)
        Я могу это переписать только на awk - код получится, возможно, чуть менее наглядный, но будет без избыточных конвейеров и вызовов других утилит (т.е., в любом случае, оптимальнее). Сделаю чуть позже.

        Зы ссылками на пастебин, потому что форуму в awk-коде чудиться много гиперссылок и пост непроходит
        У меня обратная ситуация: доступ на pastebin на работе закрыт, не могу посмотреть на Ваши труды. А теги "CODE" не помогают?

        Comment

        • yukra
          Senior Member
          • Apr 2013
          • 1359

          #19
          Originally posted by Kos
          А теги "CODE" не помогают?
          Нет.

          Приложил файлами. awk.txt - сама команда.
          full_out.txt - демонстрация корректной работы.
          Attached Files

          Comment

          • Kos
            Senior Member
            Zabbix Certified SpecialistZabbix Certified Professional
            • Aug 2015
            • 3404

            #20
            Ну, в общем, я согласен с коллегой yukra (он меня опередил ).
            Исходный скрипт, слегка переписанный мной, получается таким:
            Code:
            #!/bin/bash
            if [ $# -eq 0 ]
            then
                echo "Ошибка! Отсутствуют параметры (trunks или ips или название_транка)"
                exit 1
            fi
            
            case "$1" in
            trunks)
                /usr/bin/sudo asterisk -rx "sip show registry" | awk '
            BEGIN   {printf "{\"data\":["}
            NF>6    {printf "%s\n {\"{#TRUNKNAME}\":\"%s\"}",SEP,$3; SEP=","}
            END     {printf "\n]}\n"}'
                ;;
            ips)
                /usr/bin/sudo asterisk -rx "sip show registry" | awk -F ':' '
            BEGIN   {printf "{\"data\":["}
            /:[0-9]+/ && !seen[$1]++ {printf "%s\n {\"{#TRUNKIP}\":\"%s\"}",SEP,$1; SEP=","}
            END     {printf "\n]}\n"}'                    
                ;;                                        
            *)                                            
                /usr/bin/sudo asterisk -rx "sip show registry" | awk -v TRUNK="$1" '
            $3==TRUNK {print $5; FOUND=1; exit}           
            END       {if (FOUND!=1) printf "ZBX_NOTSUPPORTED: Trunkname \"%s\" not found\n",TRUNK}'
                ;;                                        
            esac
            Делает то же самое, что исходный скрипт. Отличия:
            • всегда использует только один параметр (либо "ips", либо "trunks", либо имя транка);
            • при запуске без параметров выводит сообщение и завершается с ненулевым кодом;
            • если не находит заданного имени транка, то выдаёт ошибку, текст которой начинается со строки "ZBX_NOTSUPPORTED";
            • формируемый для дискаверинга JSON форматируется в более "человеческом" виде (в несколько строк и с минимальными отступами), а не в одну строку (как это было раньше);
            • на каждый вызов скрипта с параметром вызывается "sudo asterisk", вывод которой через конвейер обрабатывается одним вызовом awk. Никаких лишних вызовов sed, grep, tr и т.п.


            Ну, и ещё замечание по исходной статье. Если делается сбор метрики icmppingsec, то собирать одновременно ещё и icmpping смысла нет. При непрохождении пинга icmppingsec вернёт строго ноль (которого никогда не возвращает в нормальной ситуации). Ну и icmppingloss - аналогично: при необходимости можно просто считать количество нулей, возвращаемых метрикой icmppingsec, при помощи триггерной функции count().
            Last edited by Kos; 22-03-2017, 12:29. Reason: опечатка

            Comment

            • babahvl
              Junior Member
              • Mar 2017
              • 12

              #21
              хорошие замечания, по делу.
              автор учтет это в своей работе :-)
              спасибо!

              Comment

              • babahvl
                Junior Member
                • Mar 2017
                • 12

                #22
                Originally posted by SolarW
                А что делать с транками БЕЗ регистрации?
                Например GSM-шлюз (или PRI-gate) зарегистрировался на астериске и состояние этого пира было бы неплохо отслеживать.
                Или еще какой-нибудь похожий вариант когда транк виден по sip show peers и с включенным qualify=yes можно видеть доступен ли он.
                перепишете скрипт для мониторинга peer'ов. Смысл тот же

                Comment

                • SolarW
                  Member
                  • Feb 2011
                  • 41

                  #23
                  Originally posted by babahvl
                  хорошие замечания, по делу.
                  автор учтет это в своей работе :-)
                  спасибо!
                  Присоединяюсь к благодарностям, учиться на правильных примерах несравненно легче чем по манам :-)

                  Comment

                  Working...