系统集成ZabbixNginx

zabbix监控nginx状态,只能通过开启nginx status状态用脚本监控吗?

zabbix监控nginx状态,只能通过开启nginx status状态用脚本监控吗?自带的Nginx by zabbix agent模板不行的是吗?

参与4

1同行回答

o0呼噜Zzo0呼噜Zz系统工程师机密
前面我们介绍了如何使用zabbix监控Web站点、今天我们来讲讲如何使用zabbix针对Nginx进行监控。zabbix自带Apache监控,但没有Nginx监控,所以需要针对Nginx进行自定义。但是不同着急、Nginx自身有一个stub_status模块已经把我们需要的所有信息已经统计完成了、我们只需要直接...显示全部

前面我们介绍了如何使用zabbix监控Web站点、今天我们来讲讲如何使用zabbix针对Nginx进行监控。zabbix自带Apache监控,但没有Nginx监控,所以需要针对Nginx进行自定义。但是不同着急、Nginx自身有一个stub_status模块已经把我们需要的所有信息已经统计完成了、我们只需要直接去获取就可以了。

注:在配置之前我们要先确认一下Nginx是否已经安装了http_stub_status_module模块、如果没有安装的小伙伴请自行百度安装、这里就不再详细介绍了。

1、Nginx监控项

Nginx监控项有如下这些:

  • Active Connections 当前活动连接数,其中也包括了等待状态的连接
  • accepts 接收到的连接数
  • handled 已经处理完的连接数,该数字一般和accepts一致,如果不一致那么说明Nginx出错了
  • requests 总共处理的请求数,一个连接可以有多个请求,所以该值比accpets要大
  • Reading 正在读取请求头信息的连接数
  • Writing 正在发送响应报文的连接数
  • Waiting 处于闲置状态,等待客户端发送请求的连接数

2、创建监控脚本

在创建监控脚本之前、我们需要提前去配置Nginx的Stub_Nginx模块。Nginx的配置内容如下、如果需要针对某一个虚拟主机进行监控、可以在该server下面添加对用的location即可,添加完成之后重启Nginx:

server {
        listen 80;
        server_name localhost;
        location ^/
        {
                rewrite /  /status permanent;
        }

        location /nginx_status {
                stub_status on;
                allow 127.0.0.1;
                access_log off;
                deny all;
        }
}

Bash

COPY

然后我们可以在本机通过curl http://127.0.0.1/nginx_status
命令拿到stub_nginx的active_connections、server、accepts、handled、requests、reading、writing、waiting等状态;这里active_connections并发数量是我们最关心的参数:

img

img

配置完Nginx以后、我们需要通过自定义的脚本把Nginx的状态收集起来发送给zabbix。我们去zabbix的脚本目录下面创建一个nginx_status.sh文件、并插入如下内容(该脚本内容来自百度):

#!/bin/bash
#active    当前活动的客户端连接数,包括waiting连接数
#accepts    已接受的客户端连接数
#handled    已处理的连接总数
#requests  客户端请求的总数
#reading  正在读取请求头的当前连接数
#writing  将响应写回客户端的当前连接数
#waiting  等待请求空闲客户端的当前连接数

result="/usr/bin/curl -s http://127.0.0.1:82/nginx_status"
case 1 in
  active)1inactive)result | awk '/Active/ {print ParseError: KaTeX parse error: Expected 'EOF', got '}' at position 3: NF}̲'
  ;;
  accept…result | awk 'NR==3 {print ParseError: KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲'
  ;;
  handle…result | awk 'NR==3 {print ParseError: KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲'
  ;;
  reques…result | awk 'NR==3 {print ParseError: KaTeX parse error: Expected 'EOF', got '}' at position 2: 3}̲'
  ;;
  readin…result | awk '/Reading/ {print ParseError: KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲'
  ;;
  writin…result | awk '/Writing/ {print ParseError: KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲'
  ;;
  waitin…result | awk '/Waiting/ {print $6}'
  ;;
  *)
    echo "No this result."
esac

Bash

COPY

创建完成以后我们通过 bash nginx_status.sh active 命令验证一下、该脚本是否能获取到我们需要的参数、如下:

img

img

验证完成以后我们就可以去zabbix_agentd客户端里面配置启动脚本了。这里特别需要注意的是 UnsafeUserParameters=1 必须配置(这里配置的目的是启动自定义本功能),UserParameter配置内容如下:

UserParameter=nginx_status[*],/usr/local/zabbix/alertscripts/nginx_status.sh $1

Bash

COPY

img

img

然后我们重启zabbix_agentd客户端、通过zabbix_get命令验证所有配置是否正常,如果正常我们就可以拿到我们需要的参数了、如下图:

/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k 'nginx_status[requests]'

Bash

COPY

img

img

3、创建监控模板

脚本验证成功以后我们就可以去创建监控模板了、我们去配置-模板里面创建 Nginx Status 模板,然后配置-主机-所有模板里面找到刚才创建的 Nginx Status 模板点击右上角创建监控项。

img

img

img

img

这里我们创建对应的Nginx监控项,例如 Nginx Active 监控项,类型选择Zabbix客户端;键值选择 nginx.status[active];信息类型为数字[无正负];更新时间1m(可以自定义),填写完成之后点击添加(其他的几个监控项请自行添加、这里就不再详细介绍了、过程都是一样的、参数不一样而已)。

注:其他的监控项键值分别是:nginx.status[accepts];nginx.status[active Connections];nginx.status[accepts];nginx.status[requests ];nginx.status[writing ];nginx.status[waiting ];nginx.status[handled]。

img

img

img

img

然后我们可以为Nginx Status监控模板添加一个图形、点击图形添加名称为Nginx Status的图形、监控项就选择我们上面刚才创建的监控项:

img

img

注:这里可以同步添加触发器、为Nginx的监控提供触发器功能(请小伙伴们自行百度、比如我们当并发数量超过20以后就出发告警等)

4、应用监控模板

模板创建完成以后我们去找到对应的主机(这里必须是上面配置的Zabbix Server主机,如果选择其他主机、则Zabbix不会生效)应用该模板:

img

img

好了、到这里zabbix4.4监控案例之Nginx监控的所有配置都已经完成了、下面我们可以去仪表板添加监控图表啦。后面我们将继续介绍、如何通过zabbix监控MySQL数据库。

img

img

收起
系统集成 · 2022-05-20
浏览682

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2022-04-11
  • 关注会员:2 人
  • 问题浏览:1051
  • 最近回答:2022-05-20
  • X社区推广