zabbix管理七之监控nginx性能



说明:

    使用zabbix监控nginx,首先nginx需要配置ngx_status

    在编译安装nginx时需要使用--with-http_stub_status_module参数

    在nginx的配置文件nginx.conf里添加如下:

        location /nginx_status {
             stub_status on;
             access_log off;
             allow 127.0.0.1;
             allow 27.115.xxx.xxx;
             allow 211.95.xxx.xxx;
             deny all;
        }

zabbix管理七之监控nginx性能_第1张图片


注意1:

访问:

http://localhost/nginx_status

会看到这样的信息:

Active connections: 291
server accepts handled requests
  16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106

其含义很容易理解:

  • 第一行

    • 当前的活跃连接数:291

  • 第二行

    • 服务器已接受的连接数:16630948(accepted connection #)

    • 服务器已处理的连接数:16630948(handled connection #)

    • 服务器已处理的请求:31070465(可以算出,平均每个连接有 1.8 个请求)(handled connection #)

  • 第三行

    • Reading – Nginx 读取的请求头次数为 6;

    • Writting – Nginx 读取请求体、处理请求并发送响应给客户端的次数为 179;

    • Waiting – 当前活动的长连接数:106。

Nginx 官方的解释如下:

  • active connections – number of all open connections

  • server accepts handled requests – nginx accepted 16630948 connections, handled 16630948 connections (no one was closed just it was accepted), and handles 31070465 requests (1.8 requests per connection)

  • reading – nginx reads request header

  • writing – nginx reads request body, processes request, or writes response to a client

  • waiting – keep-alive connections, actually it is active - (reading + writing)


注意2:

    自定义key(键值)参考:http://www.ttlsa.com/zabbix/zabbix-user-parameters/





方法一:使用shell实现:

    zabbix客户端:

cd /root/scripts

vim ngx_status.sh
#!/bin/bash
# Description:zabbix监控nginx性能以及进程状态
# Note:此脚本需要配置在被监控端
 
HOST="192.168.1.92"
PORT="80"
 
# 检测nginx性能
function active {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
# 执行function
$1

chmod +x /root/scripts/ngx_status.sh
##将自定义的UserParameter加入配置文件,然后重启agentd
vim /opt/zabbix/etc/zabbix_agentd.conf
添加:
UserParameter=nginx[*],/root/scripts/ngx_status.sh $1

/etc/init.d/zabbix_agentd restart
##服务端:
##zabbix_get测试:
[root@localhost ~]# /opt/zabbix/bin/zabbix_get  -s 192.168.1.92 -k nginx[requests]
43232




方法二:使用python实现:

    zabbix客户端:

cd /root/scripts

vim ngx_status.py
#!/usr/bin/env python
#encoding:utf-8

import sys
import requests

r = requests.get('http://192.168.1.92/nginx_status')
statusList = r.text.split()

def connections():
    connections = statusList[2]
    print connections

def accepts():
    accepts = statusList[7]
    print accepts

def handled():
    handled = statusList[8]
    print handled

def requests():
    requests = statusList[9]
    print requests

def Reading():
    Reading = statusList[11]
    print Reading

def Writing():
    Writing = statusList[13]
    print Writing

def Waiting():
    Waiting = statusList[15]
    print Waiting

fun_name = eval(sys.argv[1])        #将字符串类型转换为函数类型
fun_name()

chmod +x /root/scripts/ngx_status.sh
##将自定义的UserParameter加入配置文件,然后重启agentd
vim /opt/zabbix/etc/zabbix_agentd.conf
添加:
UserParameter=nginx[*],/root/scripts/ngx_status.sh $1

/etc/init.d/zabbix_agentd restart
#服务端:
##zabbix_get测试:
[root@localhost ~]# /opt/zabbix/bin/zabbix_get  -s 192.168.1.92 -k nginx[requests]
43232





最后在zabbix的web界面操作:

    创建模板--->创建分组--->创建监控项--->创建触发器--->创建图形

zabbix管理七之监控nginx性能_第2张图片


注:

    附件有一个模板