Ad Widget

Collapse

Zabbix + exim решил поделиться.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • mailo
    Junior Member
    • Apr 2011
    • 9

    #1

    Zabbix + exim решил поделиться.

    Не ругайте сильно, сделал так у себя мониторинг exim в zabbix
    Коменты и поправки приветствуются.

    1) Скрипт который парсит лог exim из крона (у меня 1 раз в час ), запоминает позицию
    и грепает нужные мне данные выкладывая результат в файлики в /tmp

    #!/bin/bash

    position=`cat /tmp/position.txt` #читаем последнюю позицию
    pos_file=/tmp/position.txt
    main_log=/var/log/exim/main.log
    tmp_log=/tmp/exim_log_pars.txt
    tmp_log2=/tmp/exim_log_pars1.txt

    tail -10000 $main_log > $tmp_log # берем последнии 10000 строк из лога, думаю что в лог за 1h больше строк не напишется,
    # если у вас пишется больше, увеличте кол-во строк или в место tail -10000
    # подставьте cat
    if [ "$position" = "" ] # проверяем не пуста ли позиция
    then
    #echo Null position!!!
    tail -1 $main_log |cut -d' ' -f1,2 > $pos_file # записываем последнюю позицию
    #echo `cat /tmp/position.txt` "Now!"
    exit 1
    else
    cat $tmp_log |sed 1,/"$position"/d | sed /"$position"/d > $tmp_log2 # удаляем все
    # строчки до, затем удаляем все строчки содержащие,
    #тем самым оставляя только не читанные даныне с послежней позиции.
    tail -1 $tmp_log |cut -d' ' -f1,2 > $pos_file # записываем последнюю позицию
    cat $tmp_log2 |grep -c -- "[-=]>" > /tmp/delivery.txt
    cat $tmp_log2 |grep -c -- "<=" > /tmp/arrival.txt
    cat $tmp_log2 |grep -c -- " \*\* " > /tmp/error.txt
    cat $tmp_log2 |grep -c local_delivery > /tmp/local_delivery.txt
    cat $tmp_log2 |grep -c Completed > /tmp/completed.txt
    cat $tmp_log2 |grep -ic rejected > /tmp/rejected.txt

    fi

    exit 0
    2) дописываем в zabbix /etc/zabbix/zabbix_agentd.conf

    UserParameter=exim.delivery,cat /tmp/delivery.txt
    UserParameter=exim.arrival,cat /tmp/arrival.txt
    UserParameter=exim.error,cat /tmp/error.txt
    UserParameter=exim.local_delivery,cat /tmp/local_delivery.txt
    UserParameter=exim.completed,cat /tmp/completed.txt
    UserParameter=exim.rejected,cat /tmp/rejected.txt

    3) сам темплайт заббикса
    приложил файлом

    жду комменты
    Attached Files
    Last edited by mailo; 01-04-2011, 11:14.
  • dima_dm
    Senior Member
    • Dec 2009
    • 2697

    #2
    Я бы добавил проверку корректности работы cron скрипта (по времени обновления статуса)
    Собрал бы все данные и статус в один файл (так проще ошибки с правами на файл контролировать)
    Ну и обработка других возможных ошибок в работе скрипта.

    Comment

    • mailo
      Junior Member
      • Apr 2011
      • 9

      #3
      Originally posted by dima_dm
      Я бы добавил проверку корректности работы cron скрипта (по времени обновления статуса)
      Собрал бы все данные и статус в один файл (так проще ошибки с правами на файл контролировать)
      Ну и обработка других возможных ошибок в работе скрипта.
      хм... 1) ну у меня cron после выполнения задачи шлет письмо мне.
      2) а какие ошибки с правами могут быть? дал права на чтение, и забыл.

      да возможно собиру в один файл хотя и так работает ) . Спасибо!

      Comment

      • dima_dm
        Senior Member
        • Dec 2009
        • 2697

        #4
        Originally posted by mailo
        хм... 1) ну у меня cron после выполнения задачи шлет письмо мне.
        Гораздо лучше, чтобы проблемы с системой мониторинга и скриптами мониторинга отображались тоже в системе мониторинга.
        А проблем может быть много:
        Кто-то зашёл и отключи cron скрипт, либо вообще забыли его включить.
        Не хватает каких-то прав, библиотек, бинарных программ для успешного выполнения скрипта и т.д.
        e-mail администратора поменялся/ушел в отпуск/почтовый ящик сломался и писем никто не видит.
        и т.д.

        Comment

        • mailo
          Junior Member
          • Apr 2011
          • 9

          #5
          Переработал скрипт и немного исменил конфиг zabbix, темплейт остался прежний.

          собственно скрипт
          #!/bin/bash

          main_log=/var/log/exim/main.log #лог exim
          tmp_log=/tmp/exim_log_pars.txt #временный файл для логов
          stat=/tmp/stat.txt #файл статистики

          if [ ! -e "$stat" ] ; then touch $stat ; fi #проверяем наличие файла, если нет создаем

          position=`tail -1 $stat |cut -d" " -f4,5` #читаем позицию из файла статистики
          if ! grep -qc "" $stat || ! grep -qc "$position" "$main_log" #проверяем 1. если статистика пуста или последней позиции нет в логе
          # то читаем весь лог с начала.
          then
          cat $main_log > $tmp_log
          else
          cat $main_log |sed 1,/"$position"/d | sed /"$position"/d > $tmp_log # удаляем все строчки до, затем удаляем все строчки содержащие
          # иначе читаем лог с последней поции
          fi
          #считаем нужные данные
          vars="`awk 'BEGIN {de=0; ar=0; er=0; lde=0; co=0; re=0} /[-=]>/ { de++ } /<=/ {ar++} / \*\* / {er++}
          /local_delivery/ {lde++} /Completed/ {co++} /rejected/ {re++} END {print de " " ar " " er " " lde " " co " " re}' $tmp_log`"
          echo $position '/' `tail -1 $tmp_log |cut -d' ' -f1,2` $vars >> $stat # записываем статистику
          rm -f $tmp_log # удаляем временный файл

          exit 0

          и конф для заббикса

          UserParameter=exim.delivery,tail -1 /tmp/stat.txt|cut -d" " -f6
          UserParameter=exim.arrival,tail -1 /tmp/stat.txt|cut -d" " -f7
          UserParameter=exim.error,tail -1 /tmp/stat.txt|cut -d" " -f8
          UserParameter=exim.local_delivery,tail -1 /tmp/stat.txt|cut -d" " -f9
          UserParameter=exim.completed,tail -1 /tmp/stat.txt|cut -d" " -f10
          UserParameter=exim.rejected,tail -1 /tmp/stat.txt|cut -d" " -f11

          жду комментов
          Last edited by mailo; 04-04-2011, 12:06.

          Comment

          • navi86
            Junior Member
            • Mar 2011
            • 22

            #6
            Извиняюсь, проблемы с настройкою любого способа оповещения(((
            Смотрю на ваш конфиг и мысль о книге в голову только приходит(((
            Не сможете мне подсказать, как настроить exim c zabbix?

            Comment

            • mailo
              Junior Member
              • Apr 2011
              • 9

              #7
              сегодня выложу исправление скрипта и темплайта и забикс конфига. немного переделал все.

              Originally posted by navi86
              Извиняюсь, проблемы с настройкою любого способа оповещения(((
              Смотрю на ваш конфиг и мысль о книге в голову только приходит(((
              Не сможете мне подсказать, как настроить exim c zabbix?
              что у вас не получается именно? что значит настроить exim c заббикс? мониторинг exim или оповещение письмом через exiм?

              Comment

              • navi86
                Junior Member
                • Mar 2011
                • 22

                #8
                Хорошо создам.
                Last edited by navi86; 06-04-2011, 09:02.

                Comment

                • mailo
                  Junior Member
                  • Apr 2011
                  • 9

                  #9
                  Originally posted by navi86
                  письмо через exim, так zabbix не может отправлять письмо на сервера, где требуется авторизация
                  создал способ оповещение тип-скрипт(написал имя скрипта,подправил конфиг


                  /usr/sbin/exim -f $smtpemailfrom -t $zabbixemailto -u $zabbixsubject -m $zabbixbody -s $smtpserver:25 -xu $smtplogin -xp $smtppass
                  создайте отдельный пост, в этом посте это не к чему

                  Comment

                  • Egor4ik
                    Member
                    • May 2012
                    • 68

                    #10
                    Exim4 Monitoring for Zabbix

                    За фундамент взята идея и частичная реализация топикстартера.

                    Думаю пригодится тем у кого есть желание мониторить свой почтовик на Exim4.

                    Пример получаемых данных:
                    Code:
                    2012-05-23 22:49:15 H=(94-153-21-16-gprs.kyivstar.net) 64138 28294 736 1234 36855 28270 13188 41 170 51 52 39
                    Кому интересно уточнять разбивку по полям ищите в скрипте функцию:
                    zabbix_answer(). А остальные параметры можно глянуть запуском файла без параметров.

                    Первые 3 поля используются для идентификации строки в лог файле на которой остановились в прошлый раз. Предыдущая реализация с 2-мя полями успешно провалилась в первые секунды работы, поскольку в 1 секунду у меня пролетало олоко 300+ лог-строк.

                    Отлаженый искрипт успешно собирает статистику с боевых 4 систем. Справляется с нагрузкой 200000 писем в сутки в разделе delivery (система рассылки клиентам).

                    Графики рисовал под себя. Тригеры придумайте себе.

                    Если есть у кого исправления/дополнения к собираемой информации или оформлению графиков, или конструктивные комментарии, буду рад.

                    zabbix_export.xml

                    zexim4.tar.gz

                    Comment

                    Working...