Отслеживайте статус пассажира на Nagios с помощью сценария bash

Я хотел контролировать наше приложение rails через PASSENGER-STATUS с помощью Nagios, но я не могу найти плагин, который подходит для текущей версии нашего пассажира.

Я хотел посмотреть «Запросы в очереди», так как у меня всегда 0 запросов в очереди верхнего уровня, даже если у меня сотни запросов в очереди во всем нашем приложении.

.---------- General information -----------
Max pool size : 6
Processes     : 1
Requests in top-level queue : 0

.---------- Application groups -----------
/webapps/example.local#default:
  App root: /webapps/example.local
  Requests in queue: 0
  * PID: 16915   Sessions: 0       Processed: 1       Uptime: 2s
    CPU: 0%      Memory  : 9M      Last used: 2s ago

Я использую версию ff:

Passenger (4.0.2)
Nagios 3.5.1

Я создал сценарий bash, который будет обрабатывать запросы в очереди.

#!/bin/bash

queue=`passenger-status | grep -A 1 "myapp1" | grep "Requests in queue:" | awk '{print $4}'`

if [ $queue == 0 ]
    then
        echo "OK - $queue Passenger Queue on myapp1"
        exit 0
  elif [ $queue -le 10 ]
    then
        echo "Warning - $queue Passenger Queue on myapp1"
        exit 1
  elif [ $queue > 10 ]
    then
        echo "Critical - $queue Passenger Queue on myapp1"
        exit 2
  else
        echo "Unknown Error - Please check config."
        exit 3
fi

Когда я запускаю скрипт вручную. Я получаю правильный результат.

[root@localhost user]# /usr/lib64/nagios/plugins/check_passenger_queue.sh
OK - 0 Passenger Queue on myapp1

Но когда я запускаю скрипт с помощью плагина NRPE. Это дает мне другой результат.

[root@localhost user]# /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_passenger_queue
Unknown Error -  Please check config.

Я попытался запустить плагин NRPE на моем сервере Nagios и получил тот же результат.

[root@nagios user]# /usr/local/nagios/libexec/check_nrpe -H xxx.xxx.xxx.xxx -c check_passenger_queue
Unknown Error -  Please check config.

person Eman    schedule 19.03.2015    source источник
comment
Это сделает простой сценарий bash.   -  person Jim Black    schedule 20.03.2015
comment
Спасибо за подсказку, Джим. Прямо сейчас я пытаюсь создать сценарий bash, и мне удается выполнить grep запросов в очереди и выполнить оператор if, чтобы определить, ОК, ПРЕДУПРЕЖДЕНИЕ, КРИТИЧЕСКИЙ или Неизвестный. Но когда я попытался использовать его с помощью NRPE, у меня ничего не вышло. Я отредактировал свой пост выше, включив в него свой сценарий и проблему.   -  person Eman    schedule 24.03.2015
comment
Можете ли вы предоставить для этого копию строки nrpe.cfg и записей nagios comands.cfg?   -  person Jim Black    schedule 26.03.2015
comment
Привет, Джим, я думаю, что это проблема пользователя, поскольку служба NRPE использует пользователя NRPE, а статус пассажира в rvm по умолчанию запускается с правами root. Я попытался отредактировать файл / etc / sudoers, но проблема все еще не устранена. И я только что придумал это решение. Я создаю новый .sh и запускаю свой статус пассажира через cron под root, сохраняю результат в файл и настраиваю свой check_passenger_queue.sh так, чтобы он просто просматривал файл. Еще раз большое спасибо, Джим.   -  person Eman    schedule 26.03.2015


Ответы (2)


Мое решение

  1. Я создал сценарий bash, который будет указывать статус пассажира и сохранять его в текстовый файл.

#!/bin/bash

export PATH="/usr/local/rvm/gems/ruby-1.9.3-p392/bin:/usr/local/rvm/gems/ruby-1.9.3-p392@global/bin:/usr/local/rvm/gems/ruby-1.9.3-p392@myapp1/bin:/usr/local/rvm/rubies/ruby-1.9.3-p392/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

rvmsudo /usr/local/rvm/gems/ruby-1.9.3-p392/bin/passenger-status > /usr/lib64/nagios/plugins/passenger/passenger-status.txt

  1. Я создал плагин nagios, который будет искать запросы в очереди определенного приложения.

#!/bin/bash

queue=`cat /usr/lib64/nagios/plugins/passenger/passenger-status.txt | grep -A 1 "myapp1" | grep "Requests in queue:" | awk '{print $4}'`

if [ $queue -eq 0 ]; then
        echo "OK - $queue Passenger Queue on myapp1"
        exit 0
  elif [ $queue -le 10 ]; then
        echo "Warning - $queue Passenger Queue on myapp1"
        exit 1
  elif [ $queue -ge 11 ]; then
        echo "Critical - $queue Passenger Queue on myapp1"
        exit 2
  else
        echo "Unknown Error - $queue Please check config."
        exit 3
fi

  1. Отредактируйте конфигурацию nrpe, чтобы добавить мой плагин.

vi /etc/nagios/nrpe.cfg
command[check_passenger_queue]=/usr/lib64/nagios/plugins/check_passenger_queue.sh

  1. Проверьте мой плагин nagios, если он работает.

/usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_passenger_queue
person Eman    schedule 27.03.2015

passenger-status необходимо запускать с rvmsudo, как указал Эман. NRPE вызывается пользователем nagios, и поскольку вы вызываете passenger-status без rvmsudo, вы, скорее всего, получите неизвестную ошибку.

С другой стороны, когда вы вызываете свой плагин с пользователем nagios через NRPE с использованием rvmsudo passenger-status, пароль запрашивается, когда ваш скрипт достигает rvmsudo. Это не поможет, так как вы не можете ввести пароль при вызове плагина через NRPE.

Итак, одно решение, описанное в nrpe.cfg, -

  1. раскомментируйте command_prefix=/usr/bin/sudo в /etc/nagios/nrpe.cfg
  2. добавьте пользователя nagios в / etc / sudoers с помощью nagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/,/path/to/passenger-status. ВАЖНО: Убедитесь, что вы редактируете / etc / sudoers с помощью sudo visudo -f /etc/sudoers!
  3. перезапустите nagios-nrpe-server с sudo service nagios-nrpe-server restart

Шаг 2. предполагает, что ваш плагин находится в / usr / lib / nagios / plugins.

Путь к passenger-status можно обозначить с помощью rvmsudo which passenger-status. Также убедитесь, что rvmsudo находится в вашем PATH.

person sugaryourcoffee    schedule 22.08.2015