欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

zabbix 监控 nginx 跟 php-fpm

程序员文章站 2022-06-02 21:13:42
...
zabbix 监控 nginx 和 php-fpm

监控常规的任务自然少不了 nginx 和 php-fpm 的监控,最近也是重新开始整理 zabbix,重新学习之,里面的脚本,配置文件以及模板都来源《zabbix 企业级分布式监控系统》一书,根据自身环境适当修改

一、监控 nginx server

1.1 配置 nginx 和 php-fpm

php-fpm 中 [www] 段中配置文件新增

12
[www]pm.status_path = /fpm_status.php

?

nginx 配置新增 server 段

123456789101112131415161718
server {    listen  127.0.0.1:80;    allow 127.0.0.1;    deny all;			# 这里两行控制权限    # 开启 nginx 状态页    location /nginxstatus {        stub_status on;        access_log off;    }	# 开启 php-fpm 状态页    location ~ ^/(fpm_status) {            fastcgi_pass 127.0.0.1:9000;            fastcgi_index index.php;            include fastcgi.conf;    }}

?

访问测试,确保可以查看状态信息

12
curl http://127.0.0.1/nginxstatuscurl http://127.0.0.1/fpm_status.php

1.2 配置检测脚本和 userparameter

我配置了 agent 主动发送数据到 server 的 active 模式

首先看目录结构

123456789
# tree /etc/zabbix//etc/zabbix/├── scripts│?? ├── check_nginx_status.sh│?? └── check_phpfpm.sh├── zabbix_agentd.conf└── zabbix_agentd.d    ├── userparameter_nginx.conf    └── userparameter_phpfpm.conf

?

下面分别对应每个文件

  • userparameter_nginx.conf
1234567
UserParameter=nginx.accepts,/etc/zabbix/scripts/check_nginx_status.sh acceptsUserParameter=nginx.handled,/etc/zabbix/scripts/check_nginx_status.sh handledUserParameter=nginx.requests,/etc/zabbix/scripts/check_nginx_status.sh requestsUserParameter=nginx.connections.active,/etc/zabbix/scripts/check_nginx_status.sh activeUserParameter=nginx.connections.reading,/etc/zabbix/scripts/check_nginx_status.sh readingUserParameter=nginx.connections.writing,/etc/zabbix/scripts/check_nginx_status.sh writingUserParameter=nginx.connections.waiting,/etc/zabbix/scripts/check_nginx_status.sh waiting
  • userparameter_phpfpm.conf
123456789101112
UserParameter=phpfpm.status.pool,/etc/zabbix/scripts/check_phpfpm.sh poolUserParameter=phpfpm.status.process.manager,/etc/zabbix/scripts/check_phpfpm.sh process_managerUserParameter=phpfpm.status.start.since,/etc/zabbix/scripts/check_phpfpm.sh start_sinceUserParameter=phpfpm.status.accepted.conn,/etc/zabbix/scripts/check_phpfpm.sh accepted_connUserParameter=phpfpm.status.listen.queue,/etc/zabbix/scripts/check_phpfpm.sh listen_queueUserParameter=phpfpm.status.max.listen.queue,/etc/zabbix/scripts/check_phpfpm.sh max_listen_queueUserParameter=phpfpm.status.listen.queue.len,/etc/zabbix/scripts/check_phpfpm.sh listen_queue_lenUserParameter=phpfpm.status.idle.processes,/etc/zabbix/scripts/check_phpfpm.sh idle_processesUserParameter=phpfpm.status.active.processes,/etc/zabbix/scripts/check_phpfpm.sh active_processesUserParameter=phpfpm.status.total.processes,/etc/zabbix/scripts/check_phpfpm.sh total_processesUserParameter=phpfpm.status.max.active.processes,/etc/zabbix/scripts/check_phpfpm.sh max_active_processesUserParameter=phpfpm.status.max.children.reached,/etc/zabbix/scripts/check_phpfpm.sh max_children_reached
  • check_nginx_status.sh
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
#!/bin/bashsource /etc/bashrc >/dev/null 2>&1source /etc/profile  >/dev/null 2>&1nginxstatus=http://127.0.0.1/nginxstatus# Functions to return nginx statsfunction checkavailable {    code=$(curl -o /dev/null -s -w %{http_code} ${nginxstatus})    if [ "${code}" == "200" ]    then        return 1    else        echo  0    fi}function active {    checkavailable|| curl -s "${nginxstatus}" | grep 'Active' | awk '{print $3}'}function reading {    checkavailable|| curl -s "${nginxstatus}" | grep 'Reading' | awk '{print $2}'}function writing {    checkavailable|| curl -s "${nginxstatus}" | grep 'Writing' | awk '{print $4}'}function waiting {    checkavailable|| curl -s "${nginxstatus}" | grep 'Waiting' | awk '{print $6}'}function accepts {    checkavailable|| curl -s "${nginxstatus}" | awk NR==3 | awk '{print $1}'}function handled {    checkavailable|| curl -s "${nginxstatus}" | awk NR==3 | awk '{print $2}'}function requests {    checkavailable|| curl -s "${nginxstatus}" | awk NR==3 | awk '{print $3}'}case "$1" in    active)        active        ;;    reading)        reading        ;;    writing)        writing        ;;    waiting)        waiting        ;;    accepts)        accepts        ;;    handled)        handled        ;;    requests)        requests        ;;    *)        echo "Usage: $0 {active |reading |writing |waiting |accepts |handled |requests }"esac
  • check_phpfpm.sh
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
#!/bin/bashsource /etc/bashrc >/dev/null 2>&1source /etc/profile  >/dev/null 2>&1LOG_FILE=/var/log/zabbix/phpfpmstatus.logcurl http://127.0.0.1/fpm_status.php >${LOG_FILE} 2>&1pool(){     awk '/pool/ {print $NF}' ${LOG_FILE}}process_manager() {     awk '/process manager/ {print $NF}' ${LOG_FILE}}start_since(){    awk '/^start since:/ {print $NF}' ${LOG_FILE}}accepted_conn(){    awk '/^accepted conn:/ {print $NF}' ${LOG_FILE}}listen_queue(){    awk '/^listen queue:/ {print $NF}' ${LOG_FILE}}max_listen_queue(){    awk '/^max listen queue:/ {print $NF}' ${LOG_FILE}}listen_queue_len(){    awk '/^listen queue len:/ {print $NF}' ${LOG_FILE}}idle_processes(){    awk '/^idle processes:/ {print $NF}' ${LOG_FILE}}active_processes(){    awk '/^active processes:/ {print $NF}' ${LOG_FILE}}total_processes(){    awk '/^total processes:/ {print $NF}' ${LOG_FILE}}max_active_processes(){    awk '/^max active processes:/ {print $NF}' ${LOG_FILE}}max_children_reached(){    awk '/^max children reached:/ {print $NF}' ${LOG_FILE}}case "$1" inpool)    pool    ;;process_manager)    process_manager    ;;start_since)    start_since    ;;accepted_conn)    accepted_conn    ;;listen_queue)    listen_queue    ;;max_listen_queue)    max_listen_queue    ;;listen_queue_len)    listen_queue_len    ;;idle_processes)    idle_processes    ;;active_processes)    active_processes    ;;total_processes)    total_processes    ;;max_active_processes)    max_active_processes    ;;max_children_reached)    max_children_reached    ;;*)    echo "Usage: $0 {pool|process_manager|start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"esac

以上全部配置完成之后重启 agent 即可

1.3 添加模板,调用

松爷的书里提供了大量的模板,如果不想自己重写生成模板,直接拿着这个模板进行根据自身的环境修改即可

  • nginx 的模板
  • php-fpm 的模板

最后呈现出来的效果如下图(zatree中)
zabbix 监控 nginx 跟 php-fpm

zabbix 监控 nginx 跟 php-fpm

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • zabbix 监控 nginx 跟 php-fpm
  • 专题推荐