Ad Widget

Collapse

Проблема с заббикс агентом

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Rann
    Member
    • Jul 2012
    • 51

    #1

    Проблема с заббикс агентом

    Добрый день.
    Опишу суть.
    Есть 2 сервера на Debian на одном стоит Zabbix 3.0, на другом Zabbix agent.

    На сервере с заббикс агентом есть простой скрипт суть которого получать текстовое значение из mysql и по шаблонам подставлять 0 или 1.
    Скрипт:
    #!/bin/bash
    PARS=`/usr/bin/mysql -e "SHOW SLAVE STATUS\G" | grep "Slave_IO_Running" | cut -d: -f2`
    if echo "${PARS}" | grep -iwq "yes"; then
    echo "0"
    elif echo "${PARS}" | grep -iq -E "^(no|none|connecting|)$"; then
    echo "1"
    else
    echo "${PARS}"
    fi
    exit 0
    на самом сервере агента скрипт срабатывает корректно возвращая нужные значения, но если проверить с сервера с zabbix сервером через zabbix_get он возвращает неверные значения, то есть если на агенте скрипт получает значение 0 то через zabbix_get на сервере получается значение 1 и наоборот.
    Настройки агента стандартные. В чем может быть проблема?
  • yukra
    Senior Member
    • Apr 2013
    • 1359

    #2
    Originally posted by Rann
    Добрый день.
    Опишу суть.
    Есть 2 сервера на Debian на одном стоит Zabbix 3.0, на другом Zabbix agent.

    На сервере с заббикс агентом есть простой скрипт суть которого получать текстовое значение из mysql и по шаблонам подставлять 0 или 1.
    Скрипт:


    на самом сервере агента скрипт срабатывает корректно возвращая нужные значения, но если проверить с сервера с zabbix сервером через zabbix_get он возвращает неверные значения, то есть если на агенте скрипт получает значение 0 то через zabbix_get на сервере получается значение 1 и наоборот.
    Настройки агента стандартные. В чем может быть проблема?
    Решаю вашу же задачу вот таким куском конфига агента:
    Code:
    UserParameter=mysql.Slave_IO_Running,	echo "show slave status" | HOME=/var/lib/zabbix mysql --auto-vertical-output | grep -i 'Slave_IO_Running: yes' -q && echo 1 || echo 0
    Искать где у вас что пошло не так мне честно говоря лень, но если хочется разобратся, то нужно модифицировать примерно так и смотреть получившийся лог
    Code:
    #!/bin/bash
    PARS=`/usr/bin/mysql -e "SHOW SLAVE STATUS\G" | grep "Slave_IO_Running" | cut -d: -f2`
    echo "${PARS}" >> /tmp/zabbix_mysql_log
    if echo "${PARS}" | grep -iwq "yes"; then
    echo "if yes" >> /tmp/zabbix_mysql_log
    echo "0"
    elif echo "${PARS}" | grep -iq -E "^(no|none|connecting|)$"; then
    echo "if no" >> /tmp/zabbix_mysql_log
    echo "1"
    else
    echo "if else" >> /tmp/zabbix_mysql_log
    echo "${PARS}"
    fi
    exit 0

    Comment

    • Rann
      Member
      • Jul 2012
      • 51

      #3
      Originally posted by yukra
      Решаю вашу же задачу вот таким куском конфига агента:
      Code:
      UserParameter=mysql.Slave_IO_Running,	echo "show slave status" | HOME=/var/lib/zabbix mysql --auto-vertical-output | grep -i 'Slave_IO_Running: yes' -q && echo 1 || echo 0
      Искать где у вас что пошло не так мне честно говоря лень, но если хочется разобратся, то нужно модифицировать примерно так и смотреть получившийся лог
      Спасибо большое за Вашу помощь.
      В моем случае рабочий вариант оказался в статье описан http://r.edbox.ru/zabbix-%D0%BC%D0%B...%D0%B2-zabbix/

      на всякий случай опишу
      скрипт:
      #!/bin/bash
      usermy=mysqluser
      passmy=mysqlpasswd

      if [ $# -eq 1 ]; then
      if [ $1 == Slave_IO_Running ]; then
      slave_status=$(mysql -u${usermy} -p${passmy} -e'show slave status\G' | awk '$1=="Slave_IO_Running:" {print $2}')

      if [ $slave_status == Yes ]; then
      slave_status=1
      else
      slave_status=0
      fi

      elif [ $1 == Slave_SQL_Running ]; then
      slave_status=$(mysql -u${usermy} -p${passmy} -e'show slave status\G' | awk '$1=="Slave_SQL_Running:" {print $2}')

      if [ $slave_status == Yes ]; then
      slave_status=1
      else
      slave_status=0
      fi

      elif [ $1 == Seconds_Behind_Master ]; then
      slave_status=$(mysql -u${usermy} -p${passmy} -e'show slave status\G' | awk '$1=="Seconds_Behind_Master:" {print $2}')
      fi

      echo $slave_status
      fi
      сохраняем в файл, меняем usermy и passmy на юзера и пароль в mysql (необходимо создать и дать права на проверку).
      Дальше вызываем скрипт с параметрами:
      ./script.sh Slave_SQL_Running
      ./script.sh Slave_IO_Running
      ./script.sh Seconds_Behind_Master
      Скрипт будет обрабатывать значения и возвращать 1 или 0 в зависимости от полученного значения, если "Yes" вернет 1, во всех остальных случаях вернет 0.
      Далее создаем в zabbix-agentd.conf UserParameter
      UserParameter=slavesqlrunning,/usr/local/bin/script.sh Slave_SQL_Running
      UserParameter=slaveiorunning,/usr/local/bin/script.sh Slave_IO_Running
      UserParameter=secondsbehindmaster,/usr/local/bin/script.sh Seconds_Behind_Master
      Перезапускаем zabbix-agent
      Создаем элементы данных на сервере.

      Скажу честно для меня осталось огромной загадкой что я писал неверно в своих скриптах, я попробовал около дюжины разных методов парсинга информации mysql, но заработал только этот.

      Comment

      • aib
        Senior Member
        • Jan 2014
        • 1615

        #4
        Originally posted by rann
        Скажу честно для меня осталось огромной загадкой что я писал неверно в своих скриптах, я попробовал около дюжины разных методов парсинга информации mysql, но заработал только этот.
        Ну например, в вашем скрипте не указаны прямо имя пользователя и пароль.
        И я могу предположить, что в разных ситуациях (под разными пользователями) эти параметры имеют разное значение и могут прерывать нормальную работу скрипта.
        Также важны и переменные окружения, которые могут быть не одинаковыми.

        Рад, что у вас заработал вариант, описанный в последнем сообщении.
        Sincerely yours,
        Aleksey

        Comment

        Working...