前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zabbix监控lnmp(附模板)

Zabbix监控lnmp(附模板)

作者头像
没有故事的陈师傅
发布2019-07-27 20:05:39
7910
发布2019-07-27 20:05:39
举报
文章被收录于专栏:运维开发故事

君子不重则不威,学则不固,主忠信,无友不如己者,过则勿惮改。 论语

由于zabbix服务是由lnmp搭建的,所以需要监控nginx,mysql,zabbix以及服务器的性能

监控nginx

首先开启nginx的status状态

需要用到ngx_http_stub_status_module模块,提供对基本状态信息的访问默认情况下不构建此模块,应使用—with-http_stub_status_module 配置参数启用它 。 修改nginx配置文件,在server下添加 vim /etc/nginx/conf.d/zabbix.conf

代码语言:javascript
复制
location /status{ 
        stub_status;
    }

重载nginx配置 systemctl reload nginx 配置完成后访问127.0.0.1/status可以查看nginx运行状态

参数解释:

Active connections:当前活动客户端连接数,包括Waiting连接数。 accepts:已接受的客户端连接总数。 handled:已处理连接的总数。 requests:客户端请求的总数。 Reading:nginx正在读取请求标头的当前连接数。 Writing:nginx将响应写回客户端的当前连接数。 Waiting:当前等待请求的空闲客户端连接数。

编写脚本监控nginx
代码语言:javascript
复制
#/bin/bashping() {
    /sbin/pidof nginx | wc -l}nginx_active(){
    /usr/bin/curl -s "http://127.0.0.1/status/" |awk '/Active/ {print $NF}'}reading(){
    /usr/bin/curl -s "http://127.0.0.1/status/" |awk '/Reading/ {print $2}'}writing(){
    /usr/bin/curl -s "http://127.0.0.1/status/" |awk '/Writing/ {print $4}'
       }waiting(){
    /usr/bin/curl -s "http://127.0.0.1/status/" |awk '/Waiting/ {print $6}'
       }accepts(){
    /usr/bin/curl -s "http://127.0.0.1/status/" |awk 'NR==3 {print $1}'
       }handled(){
    /usr/bin/curl -s "http://127.0.0.1/status/" |awk 'NR==3 {print $2}'
       }requests(){
    /usr/bin/curl -s "http://127.0.0.1/status/" |awk 'NR==3 {print $3}'
       }$1
给脚本授予执行权限

chmod +x /usr/lib/zabbix/alertscripts/monitor_nginx.sh

修改zabbix-agent配置文件

vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf UserParameter=nginx.[*],/usr/lib/zabbix/alertscripts/monitor_nginx.sh $1

重启zabbix-agent

systemctl restart zabbix-agent

使用zabbix-get测试一下

zabbix_get -s 192.168.179.132 -k nginx.[ping]

创建nginx监控模板
配置模板
创建一个nginx的应用集
添加监控项

将nginx的status的内容添加监控项,这里以nginx.ping为例

创建触发器
创建图形
将模板链接到监控的主机

可以看到nginx的状态信息已经出现在了nginx上

监控mysql

mysql的状态信息可以通过以下命令获取

代码语言:javascript
复制
mysqladmin -uroot -proot extended-status
mysqladmin -uroot -proot status

但是使用明文密码会有如下警告信息,zabbix也会取到这个报错,导致监控项错误,解决方法可以将用户名密码写入到mysql配置文件的mysqladmin中,然后在运行命令时指定配置文件就可以了,命令如下:

代码语言:javascript
复制
mysqladmin --defaults-extra-file=/etc/my.cnf status

但是修改完配置文件需要重启mysql,这在生产环境中显然不太现实,这里我有两种方法,两种方法都是在系统上配置脚本的不同,web页面配置相同,个人推荐使用第一种方法,简单方便

1.直接将错误信息重定向为空 2.将取到的值输出到特定文件里

系统配置

第一种方法: 编写监控脚本 vim /usr/lib/zabbix/alertscripts/monitor_mysql.sh

代码语言:javascript
复制
#/bin/bashMYSQL_USER='root'# 密码MYSQL_PWD='root'# 主机地址/IPMYSQL_HOST='192.168.179.132'# 端口MYSQL_PORT='3306'# 数据连接MYSQL_CONN="/usr/local/mysql/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"if [ $# -ne "1" ];then 
    echo "arg error!" 
    exit 1fi case $1 in 
    Uptime) 
        result=`${MYSQL_CONN} status 2>/dev/null|cut -f2 -d":"|cut -f1 -d"T"` 
        echo $result
        ;; 
    Com_update) 
        result=`${MYSQL_CONN} extended-status 2>/dev/null|grep -w "Com_update"|cut -d"|" -f3`       
    echo $result
        ;; 
    Slow_queries) 
        result=`${MYSQL_CONN} status 2>/dev/null|cut -f5 -d":"|cut -f1 -d"O"` 
        echo $result 
        ;; 
    Com_select) 
        result=`${MYSQL_CONN} extended-status 2>/dev/null|grep -w "Com_select"|cut -d"|" -f3`       
    echo $result
        ;; 
    Com_rollback) 
        result=`${MYSQL_CONN} extended-status 2>/dev/null|grep -w "Com_rollback"|cut -d"|" -f3` 
        echo $result 
        ;; 
    Questions) 
        result=`${MYSQL_CONN} status 2>/dev/null|cut -f4 -d":"|cut -f1 -d"S"` 
        echo $result 
        ;; 
    Com_insert) 
        result=`${MYSQL_CONN} extended-status 2>/dev/null|grep -w "Com_insert"|cut -d"|" -f3`        echo $result 
        ;; 
    Com_delete) 
        result=`${MYSQL_CONN} extended-status 2>/dev/null|grep -w "Com_delete"|cut -d"|" -f3`        echo $result 
        ;; 
    Com_commit) 
        result=`${MYSQL_CONN} extended-status 2>/dev/null|grep -w "Com_commit"|cut -d"|" -f3`        echo $result 
        ;; 
    Bytes_sent) 
        result=`${MYSQL_CONN} extended-status 2>/dev/null|grep -w "Bytes_sent" |cut -d"|" -f3` 
        echo $result 
        ;; 
    Bytes_received) 
        result=`${MYSQL_CONN} extended-status 2>/dev/null|grep -w "Bytes_received" |cut -d"|" -f3` 
        echo $result 
        ;; 
    Com_begin) 
        result=`${MYSQL_CONN} extended-status 2>/dev/mull|grep -w "Com_begin"|cut -d"|" -f3`  
        echo $result 
        ;; 
    Open_tables)
        result=`${MYSQL_CONN} extended-status 2>/dev/mull|grep -w "Open_tables"|cut -d"|" -f3`        echo $result 
         ;;
    *) 
        echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin|Open_tables)" 
        ;;esac
给脚本授予可执行权限

chmod +x /usr/lib/zabbix/alertscripts/monitor_mysql.sh

修改zabbix-agent配置文件

vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

代码语言:javascript
复制
UserParameter=mysql.status[*],/usr/lib/zabbix/alertscripts/monitor_mysql.sh $1
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin -uroot -proot ping 2>/dev/null |grep -c alive
UserParameter=mysql.slave,mysql -uroot -proot -e 'show slave status\G' 2>/dev/null|grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes
重启zabbix-agent

systemctl restart zabbix-agent

使用zabbix_get测试是否成功获取值
代码语言:javascript
复制
zabbix_get -s 192.168.179.132 -k mysql.ping
zabbix_get -s 192.168.179.132 -k mysql.[Uptime]

第二种方法: 编写监控脚本 vim /usr/lib/zabbix/alertscripts/monitor_mysql.sh

代码语言:javascript
复制
#!/bin/bash
MYSQL_USER='root'
# 密码
MYSQL_PWD='root'
# 主机地址/IP
MYSQL_HOST='192.168.179.132'
# 端口
MYSQL_PORT='3306'
# 数据连接
MYSQL_CONN="/usr/local/mysql/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"
#MYSQL_CONN="/usr/local/mysql/bin/mysqladmin "
# 参数是否正确
if [ $# -ne "1" ];then 
    echo "arg error!" 
fi 
# 获取数据
case $1 in 
    Uptime) 
        result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"` 
        echo $result 
        ;; 
    Com_update) 
        result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3` 
        echo $result 
        ;; 
    Slow_queries) 
        result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"` 
        echo $result 
        ;; 
    Com_select) 
        result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3` 
        echo $result 
                ;; 
    Com_rollback) 
        result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3` 
                echo $result 
                ;; 
    Questions) 
        result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"` 
                echo $result 
                ;; 
    Com_insert) 
        result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3` 
                echo $result 
                ;; 
    Com_delete) 
        result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3` 
                echo $result 
                ;; 
    Com_commit) 
        result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3` 
                echo $result 
                ;; 
    Bytes_sent) 
        result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3` 
                echo $result 
                ;; 
    Bytes_received) 
        result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3` 
                echo $result 
                ;; 
    Com_begin) 
        result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3` 
                echo $result 
                ;; 

        *) 
        echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)" 
        ;; 
esac

给脚本授予执行权限 chmod +x /usr/lib/zabbix/alertscripts/monitor_mysql.sh

将脚本放入后台运行 nohup /usr/lib/zabbix/alertscripts/monitor_mysql.sh &

修改zabbix-agent配置文件 vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

代码语言:javascript
复制
UserParameter=mysql.version,/usr/local/mysql/bin/mysql -V
UserParameter=mysql.Uptime,cat /monitor_mysql/Uptime.txt
UserParameter=mysql.Com_update,cat /monitor_mysql/Com_update.txt
UserParameter=mysql.Slow_queries,cat /monitor_mysql/Slow_queries.txt
UserParameter=mysql.Com_select,cat /monitor_mysql/Com_select.txt
UserParameter=mysql.Com_rollback,cat /monitor_mysql/Com_rollback.txt
UserParameter=mysql.Questions,cat /monitor_mysql/Questions.txt
UserParameter=mysql.Com_insert,cat /monitor_mysql/Com_insert.txt
UserParameter=mysql.Com_delete,cat /monitor_mysql/Com_delete.txt
UserParameter=mysql.Com_commit,cat /monitor_mysql/Com_commit.txt
UserParameter=mysql.Bytes_sent,cat /monitor_mysql/Bytes_sent.txt
UserParameter=mysql.Bytes_received,cat /monitor_mysql/Bytes_received.txt
UserParameter=mysql.Com_begin,cat /monitor_mysql/Com_begin.txt
UserParameter=mysql.ping,cat /monitor_mysql/ping.txt
重启zabbix-agent

systemctl restart zabbix-agent

使用zabbix_get测试键值是否可用
代码语言:javascript
复制
zabbix_get -s 192.168.179.132 -k mysql.Com_begin
zabbix_get -s 192.168.179.132 -k mysql.Questions
添加模板

zabbix自带了一个mysql的模板,我们只需要在原有模板上修改一下就可以了

修改监控项,与配置文件的相同
修改完的监控项如下所示
将数据库模板链接到lnmp模板上

监控php-fpm

修改PHP配置文件,启用php-fpm的状态功能

vim /usr/local/php/etc/php-fpm.d/www.conf,添加以下字段,以启用php-fpm的状态功能 pm.status_path = /php_status

vim /usr/local/php/etc/php-fpm.conf,将下面字段取消注释,这样就可以使用pid文件进行重启php-fpm pid = run/php-fpm.pid

重启php-fpm
代码语言:javascript
复制
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
修改nginx配置文件
在nginx中开启对php-fpm的状态访问
代码语言:javascript
复制
location ~ ^/(php_status|ping)$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
        include fastcgi_params;
}
重载nginx

systemctl reload nginx

测试配置是否成功

curl 127.0.0.1/php_status

访问带参数的页面

curl 127.0.0.1/php_status?full

php-fpm状态参数解释:

pool:php-fpm池名称,大多数为www process manager:进程管理方式,值:static, dynamic or ondemand. dynamic start time:启动日期,如果reload了php-fpm,时间会更新 start since:运行时长 accepted conn:当前池接受的请求数 listen queue:请求等待队列,如果这个值不为0,那么要增加FPM的进程数量 max listen queue:请求等待队列最高的数量 listen queue len:socket等待队列长度 idle processes:空闲进程数量 active processes:活跃进程数量 total processes:总进程数量 max active processes:最大的活跃进程数量(FPM启动开始算) max children reached:进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,请改大一点。 slow requests:启用了php-fpm slow-log,缓慢请求的数量

full详解:

pid – 进程PID,可以单独kill这个进程. state – 当前进程的状态 (Idle, Running, …) start time – 进程启动的日期 start since – 当前进程运行时长 requests – 当前进程处理了多少个请求 request duration – 请求时长(微妙) request method – 请求方法 (GET, POST, …) request URI – 请求URI content length – 请求内容长度 (仅用于 POST) user – 用户 (PHP_AUTH_USER) (or ‘-’ 如果没设置) script – PHP脚本 (or ‘-’ if not set) last request cpu – 最后一个请求CPU使用率。 last request memorythe - 上一个请求使用的内存

配置zabbix-agent文件,添加php-fpm监控
代码语言:javascript
复制
vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://127.0.0.1/php_status?xml"| grep "<$1>"|/usr/bin/cut -d '>' -f2 |cut -d '<' -f1 UserParameter=php-fpm.ping,/sbin/pidof php-fpm | wc -l UserParameter=php-fpm.version,/usr/local/php/sbin/php-fpm -v | awk 'NR==1{print $1,$2}'
重启zabbix-agent

systemctl restart zabbix-agent

使用zabbix_get测试
添加监控项到模板
以添加php-fpm启停状态监控为例
php-fpm所有监控如下所示
创建触发器
创建图形

监控zabbix-server

zabbix自带了监控自身的模板,因此只要在模板上链接zabbix-server的模板就可以了,zabbix-agent的模板已经链接到os的模板上了,因此无需添加zabbix-agent模板

文中的模板以及所用到的脚本已经上传到GitHub,访问链接获取

https://github.com/zhouhua-amei/zabbix/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发故事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 监控nginx
    • 首先开启nginx的status状态
      • 编写脚本监控nginx
        • 给脚本授予执行权限
        • 修改zabbix-agent配置文件
        • 重启zabbix-agent
        • 使用zabbix-get测试一下
      • 创建nginx监控模板
        • 配置模板
        • 创建一个nginx的应用集
        • 添加监控项
        • 创建触发器
        • 创建图形
        • 将模板链接到监控的主机
    • 监控mysql
      • 系统配置
        • 给脚本授予可执行权限
        • 修改zabbix-agent配置文件
        • 重启zabbix-agent
        • 使用zabbix_get测试是否成功获取值
        • 重启zabbix-agent
        • 使用zabbix_get测试键值是否可用
      • 添加模板
        • 修改监控项,与配置文件的相同
        • 修改完的监控项如下所示
        • 将数据库模板链接到lnmp模板上
    • 监控php-fpm
      • 修改PHP配置文件,启用php-fpm的状态功能
        • 重启php-fpm
      • 修改nginx配置文件
        • 在nginx中开启对php-fpm的状态访问
        • 重载nginx
        • 测试配置是否成功
        • 访问带参数的页面
      • 配置zabbix-agent文件,添加php-fpm监控
        • 重启zabbix-agent
        • 使用zabbix_get测试
      • 添加监控项到模板
        • 以添加php-fpm启停状态监控为例
        • php-fpm所有监控如下所示
        • 创建触发器
        • 创建图形
    • 监控zabbix-server
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档