cat /etc/redhat-release
CentOS/RHEL 7: # rpm -Uvh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
yum install zabbix-agent
chkconfig zabbix-agent on
vim /etc/zabbix/zabbix_agentd.conf
#Server=zabbix.domain.ua
#ServerActive=zabbix.domain.ua
#Hostname=MyServer
#Include=/usr/local/etc/zabbix2/zabbix_agentd.d/
mkdir /etc/zabbix/zabbix_agentd.d/
service zabbix-agent start
MYSQL
mysql> GRANT USAGE ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'mypass';
FLUSH PRIVILEGES;
vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N'
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
vim /etc/zabbix/.my.cnf
[mysql]
user=zabbix
password=*****
[mysqladmin]
user=zabbix
password=*****
service zabbix-agent restart
NG
Сервер nginx умеет отдавать часть необходимой нам информации о своем состоянии. Для этого его надо соответствующим образом подготовить. Открываем конфиг сервера и добавляем туда следующую конструкцию:
server {
listen localhost;
server_name status.localhost;
keepalive_timeout 0;
allow 127.0.0.1;
deny all;
location /server-status {
stub_status on;
}
access_log off;
}
Сохраняем и перезапускаем nginx, перед этим проверив его конфиг на ошибки:
# nginx -t # systemctl restart nginx
Проверяем, можем ли мы получить необходимую информацию:
# wget http://localhost/server-status

В текущей папке должен появиться файл server-status примерно следующего содержания:
# cat server-status Active connections: 3 server accepts handled requests 156171 156171 318790 Reading: 0 Writing: 1 Waiting: 2
Если у вас так же, то все в порядке, можно двигаться дальше. Если что-то не получается, то проверяйте конфиги, смотрите логи. Это штатный функционал, он должен без проблем настраиваться и работать.
Настройка в zabbix мониторинга nginx
Мы будем парсить полученный файл server-status с помощью скрипта. Для его работы необходимо установить пару пакетов:
# yum -y install curl zabbix-sender
Создадим папку, где будут лежать наши скрипты для мониторинга:
# mkdir /etc/zabbix/scripts
И положим туда скрипт nginx.sh следующего содержания:
#!/bin/sh
PREFIX='nginx'
URL='http://127.0.0.1/server-status'
CURL='/usr/bin/curl'
TMP='/tmp/nginx-ping.tmp'
SENDER='/usr/bin/zabbix_sender'
CONFIG='/etc/zabbix/zabbix_agentd.conf'
if [ ! -x ${CURL} ]
then echo Seems, path to curl is incorrect or not installed. && exit 0
else if [ ! -x ${SENDER} ]
then echo Seems, path to zabbix_sender is incorrect or not installed. && exit 0
else if [ ! -f ${CONFIG} ]
then echo Seems, path to zabbix_agentd.conf is incorrect && exit 0
fi fi fi
read -a s <<< `(time ${CURL} --no-keepalive -s -m 9 ${URL}) 2>$TMP`
if [[ "${s[7]}" =~ ([0-9]+) ]]
then
echo "\
- ${PREFIX}.accepts ${s[7]}
- ${PREFIX}.connections.active ${s[2]}
- ${PREFIX}.connections.reading ${s[11]}
- ${PREFIX}.connections.waiting ${s[15]}
- ${PREFIX}.connections.writing ${s[13]}
- ${PREFIX}.handled ${s[8]}
- ${PREFIX}.requests ${s[9]}" | ${SENDER} -c ${CONFIG} -i - >/dev/null 2>&1
awk '/real/{split($2,a,"[ms]");print a[1]*60+a[2];}' $TMP
else
echo '-0.001'
fi
rm $TMP
exit 1
Делаем его исполняемым:
# chmod 0645 nginx.sh
Теперь открываем конфиг заббикс агента и добавляем туда пользовательский параметр:
# mcedit /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx.ping,/etc/zabbix/scripts/nginx.sh
Перезапускаем агента:
# systemctl restart zabbix-agent
Дальше нам нужно добавить новый шаблон для мониторинга. Скачиваем его nginx.xml и открываем web интерфейс заббикса. Идем в раздел Configuration -> Templates и жмем Import:

Wählen Sie die Datei aus und klicken Sie erneut auf Importieren:

Fast alles ist bereit. Jetzt müssen wir den hinzugefügten Vorlagen an den Webserver anhängen, den wir überwachen. Gehen Sie zu Konfiguration -> Hosts, wählen Sie den entsprechenden Server aus, öffnen Sie die Registerkarte Vorlagen und verbinden Sie die Vorlage:

Klicken Sie auf Aktualisieren und warten Sie, bis neue Daten eingehen. Sie können diese in Überwachung -> Neueste Daten überprüfen:
In der Vorlage sind bereits einige Trigger und Diagramme enthalten. Sie können diese in den Eigenschaften der Vorlage oder eines einzelnen Hosts selbst ansehen und bearbeiten. Ich erstelle lieber Bildschirme mit der gewünschten Anzahl von Diagrammen. So sieht mein Überwachungsdashboard für nginx aus:
Die Konfiguration der nginx-Überwachung ist damit abgeschlossen, Sie können sie nutzen.
Vorbereitung von php-fpm für die Überwachung
Wir werden die folgenden php-fpm-Parameter überwachen:
| active processes count | Anzahl der aktiven Prozesse |
| connections per sec | Anzahl der Verbindungen pro Sekunde |
| idle processes count | Anzahl der idle-Prozesse |
| latency | Antwortzeit in Millisekunden |
| length of listen queue | Größe der Warteschlange für wartende Verbindungen |
| max children reached | Häufigkeit, bei der das Prozesslimit erreicht wurde |
| max length of listen queue | Maximale Größe der Verbindungs-Warteschlange |
Ein paar Worte dazu, wofür dies nützlich ist und wie man die erhaltenen Daten nutzt. Diese Überwachung ist relevant, wenn Sie die dynamische Erstellung von Prozessen in php-fpm verwenden. Wenn beispielsweise der Wert für max children reached regelmäßig größer als eins ist, wird empfohlen, das Limit für die maximale Anzahl von Prozessen zu erhöhen, sofern die Serverressourcen dies zulassen. Dasselbe gilt für den Parameter length of listen queue. Wenn dieser Wert größer als null ist, entsteht eine Warteschlange von Anfragen, die der Server nicht schnell genug bearbeiten kann. In diesem Fall muss die Anzahl der Prozesse erhöht werden, die die wartenden Verbindungen bearbeiten können.
Auf den Parameter latency sollte geachtet werden: Wenn er regelmäßig größer als 10–20 ms ist, muss ermittelt werden, warum der Server so langsam antwortet. Die übrigen Informationen dienen lediglich der Statistik.
Nun zur Konfiguration. Wir installieren fcgi:
# yum -y install fcgi
Jetzt bereiten wir php-fpm für die Statistiksammlung vor. Dazu verwenden wir erneut nginx. Wir bearbeiten dessen Konfiguration und fügen im selben server-Block, wie im vorherigen Schritt, folgende Konfiguration hinzu:
location /status {
access_log off;
allow 127.0.0.1;
deny all;
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Wir starten nginx neu:
# systemctl restart nginx
Wir nehmen die notwendigen Änderungen in der php-fpm-Konfiguration vor und fügen eine Zeile hinzu:
# mcedit /etc/php-fpm.d/www.conf pm.status_path = /status
Wir starten php-fpm neu:
# systemctl restart php-fpm
Wir prüfen, ob wir unter der angegebenen Adresse die php-fpm-Statistik erhalten:
# wget http://127.0.0.1/status

Wir prüfen den Inhalt der Datei status:
# cat status pool: www process manager: dynamic start time: 10/Nov/2015:00:44:55 +0300 start since: 257703 accepted conn: 47066 listen queue: 0 max listen queue: 0 listen queue len: 0 idle processes: 7 active processes: 1 total processes: 8 max active processes: 40 max children reached: 1 slow requests: 0
Wenn bei Ihnen etwa dasselbe erscheint, ist alles in Ordnung: php-fpm gibt Informationen über seinen Status zurück.
Einrichtung der php-fpm-Überwachung in Zabbix
Nun bereiten wir ein Skript für Zabbix vor, das den erhaltenen Status verarbeitet:
# mcedit /etc/zabbix/scripts/php-fpm.sh
#!/bin/sh
PREFIX='php.fpm'
URL='http://127.0.0.1/status'
CURL='/usr/bin/curl'
TMP='/tmp/php-fpm-ping.tmp'
SENDER='/usr/bin/zabbix_sender'
CONFIG='/etc/zabbix/zabbix_agentd.conf'
if [ ! -x ${CURL} ]
then echo Seems, path to curl is incorrect or not installed. && exit 0
else if [ ! -x ${SENDER} ]
then echo Seems, path to zabbix_sender is incorrect or not installed. && exit 0
else if [ ! -f ${CONFIG} ]
then echo Seems, path to zabbix_agentd.conf is incorrect && exit 0
fi fi fi
(time ${CURL} --no-keepalive -sm3 ${URL}) 2>$TMP | awk --assign pr="- ${PREFIX}." '
/^accepted c/ {print pr"accepted_conn "$3}
/^active proc/ {print pr"active_processes "$3}
/^idle proc/ {print pr"idle_processes "$3}
/^listen queue:/ {print pr"listen_queue_len "$3}
/^max children reach/ {print pr"max_children_reached "$4}
/^max listen queue:/ {print pr"max_listen_queue_len "$4}' | ${SENDER} -c ${CONFIG} -i - 2>/dev/null | awk --assign t="${TMP}" '/^sent/{if($6==0){print"-0.001";print>t}}'
awk '/real/{split($2,a,"[ms]");print a[1]*60+a[2];}' $TMP
rm $TMP
exit 1
Wir machen es ausführbar:
# chmod 0645 php-fpm.sh
Wir fügen dem Zabbix-Agenten-Konfigurationsfile einen weiteren benutzerdefinierten Parameter hinzu:
# mcedit /etc/zabbix/zabbix_agentd.conf
UserParameter=php.fpm.ping,/etc/zabbix/scripts/php-fpm.sh
Wir starten den Agenten neu:
# systemctl restart zabbix-agent
Weil wir hier ähnlich wie im Fall von nginx vorgehen, gehen wir in die Weboberfläche und importieren die Vorlage php-fpm.xml. Fügen Sie diese Vorlage dem erforderlichen Server hinzu und warten Sie, bis die Daten aktualisiert sind. Überprüfen Sie deren Eingang wie gewohnt unter Monitoring -> Latest Data:

Wenn alles in Ordnung ist, überprüfen Sie die Diagramme und erstellen Sie den gewünschten Screen. Bei mir sieht er so aus:
In der Vorlage sind bereits 3 Trigger konfiguriert, die bei folgenden Ereignissen ausgelöst werden:
- Ausfall des php-fpm-Dienstes
- Anzahl der Worker-Prozesse unter 3
- Antwortzeit unter 10 ms in den letzten 10 Messungen
Der zweite Trigger kann entfernt oder geändert werden, wenn bei Ihnen weniger Worker-Prozesse als das Minimum konfiguriert sind.
Fazit
Fassen wir zusammen, was wir getan haben:
- Wir haben den nginx-Server so konfiguriert, dass er Informationen über seinen eigenen Status und den Status des php-fpm-Dienstes bereitstellt.
- Wir haben Skripte zur Verarbeitung der Informationen vom Webserver und zur Übermittlung an Zabbix erstellt.
- Wir haben im Zabbix-Agenten über benutzerdefinierte Parameter die Übertragung der verarbeiteten Daten an den Server konfiguriert.
- Wir haben auf dem Überwachungsserver die erforderlichen Vorlagen erstellt und sie an die überwachten Server angehängt.
- Wir haben die überwachten Parameter in einem Screen zusammengefasst, um die Beobachtung zu erleichtern.
Das heißt, wir haben den gesamten Komplex von Maßnahmen zur Einrichtung einer umfassenden Überwachung des Webservers auf Basis von nginx + php-fpm in Zabbix durchgeführt.
Eine Anwendungsmöglichkeit einer solchen Überwachung ist die Auswahl eines schnelleren Hostings für Ihre Website. Vor einiger Zeit musste ich beispielsweise meinen Hosting-Anbieter wechseln. Aber wie kann man herausfinden, ob der neue Anbieter schneller ist als der aktuelle? Die Spezifikationen sind bei allen Anbietern ungefähr gleich. Ich habe einfach eine Testphase genommen, alles Notwendige auf dem Server eingerichtet, einschließlich der Überwachung des Webservers, die Website dorthin verschoben und einen Tag lang beobachtet. Anhand der Antwortzeiten von nginx und php-fpm wurde mir klar, dass der neue Hosting-Anbieter schneller ist:




