Zabbix template for Nginx (python)
It's accumulate nginx stats and parse the access.log (just pice of log at once) and push result in Zabbix through trap-messages
- Request\sec
- Response codes (200,301,302,403,404,500,503)\min
- Active\Keepalive connections
- Header and body reading
- Accepted, handled connections
-
Put
zbx_nginx_stats.py
into your scripts path (like:/etc/zabbix/script/nginx/
) on your Zabbix agent hosts. -
Change next section in zbx_nginx_stats.py, to your configuration:
zabbix_host = '127.0.0.1' # Zabbix server IP
zabbix_port = 10051 # Zabbix server port
hostname = 'Zabbix Agent' # Name of monitored host, like it shows in zabbix web ui
time_delta = 1 # grep interval in minutes
# URL to nginx stat (http_stub_status_module)
stat_url = 'https://nginx.server/nginx_stat'
# Nginx log file path
nginx_log_file_path = '/var/log/nginx/access.log'
# Optional Basic Auth
username = 'user'
password = 'pass'
# Temp file, with log file cursor position
seek_file = '/tmp/nginx_log_stat'
- In script path (
/etc/zabbix/script/nginx/
) do:
chmod +x zbx_nginx_stats.py
- Configure cron to run script every one minute:
$ sudo crontab -e
*/1 * * * * /etc/zabbix/script/nginx/zbx_nginx_stats.py
-
Import
zbx_nginx_template.xml
into zabbix in Tepmplate section web gui. -
Add the following configurations to you Nginx configuration file.
location /nginx_stat {
stub_status on; # Turn on nginx stats
access_log off; # We do not need logs for stats
allow 127.0.0.1; # Security: Only allow access from IP
allow ::1; # Security IPv6: allow only from localhost
deny all; # Deny requests from the other of the world
}
That is all :)