Ad Widget

Collapse

Snmptrap.sh Need help!

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • swq
    Member
    • Sep 2009
    • 84

    #1

    Snmptrap.sh Need help!

    Sorry, может не в тему, но спрошу.
    Вопрос не столько по Zabbix, сколько по snmptrap.
    Принимается Enterprise трап с пробника QT-600. Трап принимается нормально, snmptrapd пишет в свой лог нормально, одну строчку на один трап. После обработки трапа парсером в дополнительный лог пишутся две одинаковые строчки. Соответственно в Zabbix попадает два одинаковых трапа. То есть в snmptrap.log - одна строчка, в snmptraps.log - уже две строчки на один принимаемый трап. Помогите найти засаду.

    OS ubuntu 11.04.
    snmptrapd.conf:

    pidfile /tmp/snmptrap.pid
    ignoreauthfailure no
    disableAuthorization yes
    donotfork no
    donotlogtraps no
    logoption f /var/log/snmptrap.log
    outputOption efnQs
    authCommunity log,execute,net public
    traphandle default /bin/bash /home/zabbix/bin/snmptrap.sh

    snmptrap.sh:

    LOG="/var/log/snmptraps.log"
    ZABBIX_SERVER="127.0.0.1";
    ZABBIX_PORT="10051";
    ZABBIX_SENDER="/usr/bin/zabbix_sender";
    KEY="snmptraps";
    HOST="snmptraps";
    read hostname
    read ip
    read uptime
    read enterprise
    read iso01
    read iso02
    read iso03
    read iso04
    read iso05
    read iso06
    read iso07
    read iso08
    read iso09
    read iso10
    read iso11
    read iso12
    read iso13
    read iso14
    read iso15
    read iso16
    read iso17
    read iso18
    read iso19
    read iso20
    read iso21
    read iso22
    read iso23
    read iso24
    read iso25
    read iso26
    read iso27
    read iso28
    ip=`echo $ip | cut -f2 -d[ | cut -f1 -d]`
    if [ $ip = "10.10.10.3" ]; then
    hostname2="QT-600-3"
    else
    if [ $ip = "10.10.10.4" ]; then
    hostname2="QT-600-4"
    else
    if [ $ip = "10.10.10.5" ]; then
    hostname2="QT-600-5"
    else
    if [ $ip = "10.10.10.6" ]; then
    hostname2="QT-600-6"
    else
    if [ $ip = "10.10.10.7" ]; then
    hostname2="QT-600-7"
    else hostname2=$ip
    fi
    fi
    fi
    fi
    fi
    enterprise=`echo $enterprise | cut -f2 -d= | cut -f12 -d.`
    if [ $enterprise="9030" ]; then
    enterprise2="AlarmVideoTrap"
    else enterprise2=$enterprise
    fi
    d1=`echo $iso02 | cut -f2 -d= | cut -c 3-6`
    d2=`echo $iso02 | cut -f2 -d= | cut -c 7-8`
    d3=`echo $iso02 | cut -f2 -d= | cut -c 9-10`
    t1=`echo $iso02 | cut -f2 -d= | cut -c 11-12`
    t2=`echo $iso02 | cut -f2 -d= | cut -c 13-14`
    t3=`echo $iso02 | cut -f2 -d= | cut -c 15-16`
    date="$d3/$d2/$d1"
    time="$t1:$t2:$t3"
    chanel=`echo $iso03 | cut -f2 -d=`
    severity=`echo $iso06 | cut -f2 -d=`
    error=`echo $iso11 | cut -f2 -d=`
    value=`echo $iso12 | cut -f2 -d=`
    sourceStream=`echo $iso16 | cut -f2 -d=`
    str="$enterprise2 $hostname2($ip) $time $date $chanel Severity=$severity ErrorType=$error Value=$value From$sourceStream"
    echo "$str" >> $LOG
    $ZABBIX_SENDER -z $ZABBIX_SERVER -p $ZABBIX_PORT -s $hostname2 -k $KEY -o "$str"

    полей много, но так и должно быть, все задействованы, но не все нужны
  • dima_dm
    Senior Member
    • Dec 2009
    • 2697

    #2
    Originally posted by swq
    После обработки трапа парсером в дополнительный лог пишутся две одинаковые строчки. Соответственно в zabbix попадает два одинаковых трапа.
    время записи в лог у них одинаковые? Вставьте в лог pid процесса и точное время генерации сообщения.
    Last edited by dima_dm; 22-06-2011, 13:13.

    Comment

    • swq
      Member
      • Sep 2009
      • 84

      #3
      Originally posted by dima_dm
      время записи в лог у них одинаковые? Вставьте в лог pid процесса и точное время генерации сообщения.
      время когда как, но в основном разное. разница от нуля секунд до полуминуты. PID snmpd или snmptrapd? В принципе смотрел и тот и тот, он всегда один и тот же.
      Может я не правильно время и PID смотрю? Перед выводом:
      str="$enterprise2 $hostname2($ip) $time $date $chanel Severity=$severity ErrorType=$error Value=$value From$sourceStream"
      echo "$str" >> $LOG

      делаю:
      dates=`date | cut -f4 -d" "`
      pid=`pidof snmptrapd`
      и далее
      str="$dates $pid $enterprise2 $hostname2($ip).......
      Last edited by swq; 22-06-2011, 16:46.

      Comment

      • dima_dm
        Senior Member
        • Dec 2009
        • 2697

        #4
        Originally posted by swq
        в
        делаю:
        dates=`date | cut -f4 -d" "`
        pid=`pidof snmptrapd`
        и далее
        str="$dates $pid $enterprise2 $hostname2($ip).......
        Конечно не так, PID текущего процесса можно вывести так
        test.sh
        Code:
        #!/bin/bash
        echo $$
        $ ./test.sh
        24558

        И время лучше писать с наносекундами
        $ date +%k:%M:%S.%N
        19:47:16.192331543

        Выдержка из документации
        Code:
        Сам интерпретатор shell автоматически присваивает значения следующим переменным (параметрам):  ? 	 значение, возвращенное последней командой; 
         $ 	 номер процесса; 
         ! 	 номер фонового процесса; 
         # 	 число позиционных параметров, передаваемых в shell; 
         * 	 перечень параметров, как одна строка; 
         @ 	 перечень параметров, как совокупность слов; 
         - 	 флаги, передаваемые в shell.
        
        
         При обращении к этим переменным (т.е при использовании их в командном файле - shell-программе) следует впереди ставить "$".
        Last edited by dima_dm; 22-06-2011, 17:48.

        Comment

        • swq
          Member
          • Sep 2009
          • 84

          #5
          ок, с PID-ом понятно :/ а куда в скрипте его вставлять, что бы все правильно отследить? прямо в вывод переменной str$ или в echo?
          если так:
          echo "date +%k:%M:%S.%N $$ $srt" >> $LOG
          то значения PID и время у одинаковых строк разные.
          если вставлять в $str тоже самое получается, в смысле разные значения.

          Comment

          • dima_dm
            Senior Member
            • Dec 2009
            • 2697

            #6
            Значит скрипт у вас два раза запускается, можете для уверенности просто заменить скрипт /home/zabbix/bin/snmptrap.sh на что-то очень простое, и если будет тоже самое, то искать нужно ни в скрипте, а в snmptrapd. Читать документацию и т.д.
            В противном случае, постепенно усложнять скрипт, пока не появиться данный эффект.
            Last edited by dima_dm; 22-06-2011, 22:56.

            Comment

            • swq
              Member
              • Sep 2009
              • 84

              #7
              Если кому еще интересно
              все оказалось проще, скрипт не виновен, вылечилось параметрами запуска демона:

              snmptrapd -C -f -n -t -c /etc/snmp/snmptrapd.conf

              Comment

              Working...