zabbix应用之nginx统一监控

“nginx统一监控”意思是在一台Linux服务器上集中监控所有nginx站点的status状态。我们把这个服务器叫做“nginx监控服务器”,可以是装有zabbix agent的zabbix server,或是其他装agent的被监控客户端。

思路:把所有nginx站点的URL写入到“nginx监控服务器”上的一个配置文件中。增加或删除nginx监控站点只需要修改这个配置文件,利用zabbix的low-level discovery动态监控这些站点。“nginx监控服务器”的zabbix-agent调用nginx监控脚本,获取nginx_status后,利用zabbix-sender把监控数据发送到zabbix服务器端。

配置步骤如下:

一、在被监控nginx站点上配置stub_status模块

开启stub_status模块监控,在server块中加入location就行了。

假设“nginx监控服务器”的IP地址为192.168.0.1,配置如下:

    location /nginx_status{
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        # 要允许“nginx监控服务器”访问nginx status
        allow 192.168.0.1;
        deny all;
    }

重启nginx,然后请求http://domain/nginx_status 就行了,下面是结果:

Active connections: 1 
server accepts handled requests
 16672 16672 16769 
Reading: 0 Writing: 1 Waiting: 0

二、在nginx监控服务器上配置监控脚本

首先,在nginx监控服务器上安装好zabbix-agent和zabbix-sender,推荐yum安装。

注意:设置zabbix_agentd.conf里Timeout=30。减少因脚本执行超时,agent获取不到数据的情况。

然后,建立脚本文件的目录/etc/zabbix/monitor_scripts。

shell# mkdir -p /etc/zabbix/monitor_scripts

把监控脚本nginx_monitor.sh放到/etc/zabbix/monitor_scripts目录下。

nginx_monitor.sh脚本内容如下,需要修改AGENT_CONF变量的值:

#!/bin/bash
#
# Filename:    nginx_monitor.sh
# Revision:    1.0
# Date:        2014/09/24
# Author:      Qicheng
# Email:
# Website:     http://qicheng0211.blog.51cto.com
# Description: nginx统一监控脚本
# Notes:       
#

# 修改AGENT_CONF的值为本地zabbix agent的配置文件路径
AGENT_CONF="/etc/zabbix/zabbix_agentd.conf "
# nginx站点的配置文件路径
NGINX_SITE_CONF="/etc/zabbix/monitor_scripts/nginx_site.conf"
# zabbix_sender的路径
ZBX_SENDER="/usr/bin/zabbix_sender"

FUNCTION=$1
HOST_NAME=$2
NGINX_SITE=$3
CURL="/usr/bin/curl"
TIMEOUT=30

# nginx site low-level discovery
function nginxSiteDiscovery()
{
    nginx_site=($(grep ‘^[^#]‘ ${NGINX_SITE_CONF}))
    max_index=$[${#nginx_site[@]}-1]
    printf ‘{\n‘
    printf ‘\t"data":[‘
    for key in `seq -s‘ ‘ 0 $max_index`
    do
        printf ‘\n\t\t{‘
        printf "\"{#NGINX_SITE}\":\"${nginx_site[${key}]}\"}"
        if [ $key -ne $max_index ];then
            printf ","
        fi
    done
    printf ‘\n\t]\n‘
    printf ‘}\n‘
}

# 获取nginx status,把数据发送到zabbix server
function getNginxStatus()
{
    nginx_status_url="${NGINX_SITE}/nginx_status"
    # 获取nginx_status后,保存到下面的文件里
    nginx_status_file="/tmp/nginx_status_$(echo ${NGINX_SITE} | sed ‘s#^http.*://##; s#/#_#g‘).log"
    :>"$nginx_status_file"

    # curl获取nginx_status
    ${CURL} -s --connect-timeout ${TIMEOUT} "$nginx_status_url" 2>&1 | tee "$nginx_status_file"
    line_num=$(cat "$nginx_status_file" | wc -l)
    # 判断是否正确获取nginx_status
    [ $line_num -ne 4 ] && { echo "ERROR: $nginx_status_file is not correct."; exit 1;}

    active=$(cat "$nginx_status_file" | grep ‘Active‘ | awk ‘{print $NF}‘)
    reading=$(cat "$nginx_status_file" | grep ‘Reading‘ | awk ‘{print $2}‘)
    writing=$(cat "$nginx_status_file" | grep ‘Writing‘ | awk ‘{print $4}‘)
    waiting=$(cat "$nginx_status_file" | grep ‘Waiting‘ | awk ‘{print $6}‘)
    accepts=$(cat "$nginx_status_file" | awk NR==3 | awk ‘{print $1}‘)
    handled=$(cat "$nginx_status_file" | awk NR==3 | awk ‘{print $2}‘)
    requests=$(cat "$nginx_status_file" | awk NR==3 | awk ‘{print $3}‘)
    echo "Sending the data to zabbix server..."
    # 将特定格式的数据发送到zabbix server,每行的格式为:<hostname> <key> <value>
    cat << EOF | ${ZBX_SENDER} -c ${AGENT_CONF} -i -
"${HOST_NAME}" "nginx_status[$NGINX_SITE,active]" "${active}"
"${HOST_NAME}" "nginx_status[$NGINX_SITE,reading]" "${reading}"
"${HOST_NAME}" "nginx_status[$NGINX_SITE,writing]" "${writing}"
"${HOST_NAME}" "nginx_status[$NGINX_SITE,waiting]" "${waiting}"
"${HOST_NAME}" "nginx_status[$NGINX_SITE,accepts]" "${accepts}"
"${HOST_NAME}" "nginx_status[$NGINX_SITE,handled]" "${handled}"
"${HOST_NAME}" "nginx_status[$NGINX_SITE,requests]" "${requests}"
EOF
}

[ $# -eq 0 ] && { echo "ERROR: The script needs at least one parameter."; exit 1;}

case $FUNCTION in
    nginxSiteDiscovery|getNginxStatus)
        $FUNCTION
        ;;
    *)
        echo "ERROR: Bad parameters."
        exit 1
        ;;
esac

创建nginx站点配置文件nginx_site.conf:

shell# touch /etc/zabbix/monitor_scripts/nginx_site.conf
shell# chown -R zabbix:zabbix /etc/zabbix/monitor_scripts

把所有被监控nginx站点的URL写入到nginx_site.conf文件中,每一行一个URL,如下图:

在zabbix_agentd.conf最后面添加自定义参数:

UserParameter=nginxSiteDiscovery,bash /etc/zabbix/monitor_scripts/nginx_monitor.sh nginxSiteDiscovery
UserParameter=getNginxStatus[*],bash /etc/zabbix/monitor_scripts/nginx_monitor.sh getNginxStatus "$1" "$2"

最后重启zabbix agent。

在zabbix server端执行zabbix_get命令测试:

如上图所示,说明环境部署好了。

三、zabbix WEB端

1、导入模板

导入"Template App Nginx.xml"模板,附件有下载。

模板的Item prototypes如下:

“get nginx status of {#NGINX_SITE}”监控项是Zabbix agent类型,用于调用脚本获取nginx_status。其他item是Zabbix trapper类型,用于接收zabbix-sender发来的nginx_status。

模板配置了触发器,如果获取不到nginx_status则发出告警。

    2、创建nginx监控主机并链接模板

“nginx监控主机”的配置中要填写Agent interfaces,并链接模板Template App Nginx。

    3、数据展示

时间: 2024-10-10 20:01:33

zabbix应用之nginx统一监控的相关文章

zabbix监控之nginx状态监控(一)

[本文档所介绍的内容适用于公司测试/生产环境等常见的zabbix监控应用部署] 一:相关环境准备: 1.1相关软件以及系统 系统要求:Centos 6及以上(64位) 环境要求:zabbix监控系统(服务端,客户端) 相关中间件:nginx (版本1.6.0及以上) 二:配置zabbix监控nginx 2.1修改nginx配置文件,在server区块添加nginxs状态监控配置,如下所示 location ^~ /ngx_status {                 stub_status

自动化运维工具之Zabbix宏使用及用户自定义监控(三)

Zabbix宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定得文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换: Zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本: Zabbix有许多内置的宏,如{HOST.NAME}.{HOST.IP}.{TRIGGER.DESCRIPTION}.{TRIGGER.NAME}. {TRIGGER.EVENTS.ACK}等 Zabbix为了更强的灵活性,zabbix还支持在全局.模板或主机级别使用用户自定义宏

zabbix实现mysql数据库的监控(四)

前面介绍的内容都是用第三方开发好的插件进行mysql监控的,可能有些我们关心的监控内容并不在其中,这时一种常用的方法就是定义我们自己的脚本并将它整合到zabbix中,从而在原有监控的基础上进行有力的补充.下面通过使用脚本来监控主从复制状态并进行报警通知. 先来介绍zabbix中几个常用的术语: 主机(host): 要监控的网络设备,可由ip或DNS名称指定. 主机组(host group): 主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模版不能互相链接,主机组通常在组用户或用户组指派

Zabbix服务安装部署及监控配置

1.1 Zabbix服务介绍 官方网站:http://www.zabbix.com/ The Enterprise-class Monitoring Solution for Everyone 企业级监控解决方案 zabbix是一个基于Web界面提供分布式系统监控以及网络监视功能的企业级的开源解决方案 Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以及让系统管理员快速定位解决存在的各种问题. 1.1 Zabbix主要特点 安装与配置简单,学习成本地,支持多语言(包

zabbix实现mysql数据库的监控

先来介绍zabbix中几个常用的术语: 主机(host): 要监控的网络设备,可由ip或DNS名称指定. 主机组(host group): 主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模版不能互相链接,主机组通常在组用户或用户组指派监控权限时使用. 监控项(item): 一个特定监控指标的相关的数据,这些数据来自于被监控对象,item是zabbix进行数据收集的核心,没有item,就没有数据,每个item都由"key"进行标识. 触发器(trigger): 一个表达式,用于

JITStack统一监控平台与事态管理

事态管理(Event Management),原来称作事件管理,是ITIL运营管理体系中的一个主要流程之一.所谓Event(事态)是指对于配置项或IT服务有重要意义的状态变化.比如IT系统中的服务器.从启动状态变为关机状态.一个应用服务状态从Up到down的状态变化等等.Event一词还用于表示任何 IT 服务.配置项或监视工具创建通知.事态通常需要 IT 运营人员采取行动,并且通常导致事件记入日志.在ITIL V4中事态管理已经更新为监控与事态管理. 高效的IT服务运营有赖于对于基础设施.操作

zabbix源码安装,自定义监控205的用户数,有触发器但没有邮件报警

zabbix源码安装,自定义监控205的用户数,有触发器但没有邮件报警 监控端配置:(192.168.4.5) 1基础环境:(实验环境可以关闭防火墙,但生产环境不能关闭,否则不安全,要设置相应规则) [[email protected]桌面]# /etc/init.d/iptables stop [[email protected]桌面]# setenforce 0 2搭建lamp平台,(它运行在lamp平台上) [[email protected]桌面]# yum -y install htt

zabbix实现mysql数据库的监控(三)

上面一章“zabbix实现mysql数据库的监控(二)”使用MPM来监控mysql,但是遇到安装问题始终解决不了,这里改用percona-monitoring-plugins进行zabbxi上监控mysql数据库了. percona-monitoring-plugins的详细介绍请见:https://www.percona.com/software/mysql-tools/percona-monitoring-plugins 一.环境准备 php开发环境搭建 下载percona-monitori

zabbix入门到精通之Zabbix对linux主机的监控

我们大概了解了怎么对台主机进行监控,主要步骤设计到添加主机,并且为主机添加监控项,这里主要为item,然后在item的基础上对item进行绘图并且通过screen的方式把不同的监控图像汇总到一张screen上.通过对quick章节我们认识到item监控项在zabbix中是非常重要的,而item的监控是通过key来定义的,key又分为系统预定义好的key和自定义的key组成,这一节,我们通过对zabbix预定义的内存key来了解一下key到底是怎么组成和怎么使用的. Key 参数 类型 单位 举例