使用 Zabbix 监控 Nginx MySQL,以及自定义监控项

Posted 愿许浪尽天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Zabbix 监控 Nginx MySQL,以及自定义监控项相关的知识,希望对你有一定的参考价值。

一、使用 Zabbix 监控 Nginx 服务

安装 Agent 软件:

yum install -y curl curl-devel net-snmp net-snmp-devel perl-DBI
useradd -M -s /sbin/nologin zabbix
tar xf zabbix-4.2.6.tar.gz -C /usr/src/zabbix-4.2.6/
cd /usr/src/zabbix-4.2.6/
./configure --prefix=/usr/local/zabbix --enable-agent && make && make install

修改 Agent 主配置文件:

vim /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/usr/local/zabbix/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.1.1
ListenPort=10050
ServerActive=192.168.1.1
Hostname=nginx_php								# 本地主机名. 这里主机名一定要和本地主机名一致. 因为很容易错
Timeout=15

启动 Agent 服务:

mkdir /usr/local/zabbix/logs					# 创建日志存放路径
chown -R zabbix:zabbix /usr/local/zabbix/		# 修改属主.属组
/usr/local/zabbix/sbin/zabbix_agentd			# 启动 Agent 服务
netstat -anpt | grep 10050						# 查看端口是否开启

1.确定监控内容

[root@nginx_php ~]# vim /usr/local/nginx/conf/nginx.conf
location /status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    allow 192.168.1.1;
    deny all;
}
[root@nginx_php ~]# nginx -s reload

在 Zabbix Server 上访问验证

[root@zabbix ~]# curl http://192.168.1.2/status

在这里插入图片描述

2.编写 Agent 端的监控脚本

[root@nginx_php ~]# mkdir /usr/local/zabbix/scripts
[root@nginx_php ~]# vim /usr/local/zabbix/scripts/nginx_status.sh
#!/bin/bash
# Description: Zabbix 监控 Nginx 状态
# Note: 此脚本需要配置在被监控端
HOST="127.0.0.1"
PORT="80"
# 检测 Nginx 进程是否存在
function ping {
    /sbin/pidof nginx | wc -l
}
# 检测 Nginx 性能
function active {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2> /dev/null | grep "Active" | awk '{print $NF}'
}
function reading {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2> /dev/null | grep "Reading" | awk '{print $2}'
}
function writing {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2> /dev/null | grep "Writing" | awk '{print $4}'
}
function waiting {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2> /dev/null | grep "Waiting" | awk '{print $6}'
}
function accepts {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2> /dev/null | awk NR==3 | awk '{print $1}'
}
function handled {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2> /dev/null | awk NR==3 | awk '{print $2}'
}
function requests {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2> /dev/null | awk NR==3 | awk '{print $3}'
}
# 执行 function
$1
[root@nginx_php ~]# chmod +x /usr/local/zabbix/scripts/nginx_status.sh

3.配置 Agent 主配置文件,定义监控脚本

[root@nginx_php ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
UnsafeUserParameters=1
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
[root@nginx_php ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/nginx_status.conf
UserParameter=nginx.status[*],/usr/local/zabbix/scripts/nginx_status.sh $1
[root@nginx_php ~]# killall zabbix_agentd										# 终止 Agent 服务
[root@nginx_php ~]# /usr/local/zabbix/sbin/zabbix_agentd						# 启动 Agent 服务

Zabbix Server 使用 zabbix_get 测试获取数据

[root@zabbix ~]# zabbix_get -s 192.168.1.2 -p 10050 -k nginx.status[ping]
[root@zabbix ~]# zabbix_get -s 192.168.1.2 -p 10050 -k nginx.status[active]
[root@zabbix ~]# zabbix_get -s 192.168.1.2 -p 10050 -k nginx.status[accepts]

在这里插入图片描述

4.登录 Zabbix Web 配置台

配置 -- 模板 -- 创建模板
在这里插入图片描述
创建应用集
在这里插入图片描述
创建监控项
在这里插入图片描述

  • 在监控脚本中,一共定义了 8 个监控项,所以这里的监控项页要创建 8 个,重复上面的步奏,创建脚本中相应的监控项。

在这里插入图片描述

创建图形
在这里插入图片描述
创建主机
在这里插入图片描述
创建主机模板
在这里插入图片描述
在这里插入图片描述

二、使用 Zabbix 监控 MySQL 服务

给 Zabbix Server 赋予权限:

MariaDB [(none)]> grant all on zabbix.* to zabbix@'192.168.1.%' identified by 'zabbix';
MariaDB [(none)]> grant all on *.* to zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
  • zabbix3.0 server 已自带 mysql 的模板了,只需配置好 agent 客户端,然后在 web 端给主机增加模板即可。
[root@mysql ~]# cp /usr/src/zabbix-4.2.6/conf/zabbix_agentd/userparameter_mysql.conf /usr/local/zabbix/etc/zabbix_agentd.conf.d/
[root@mysql ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/usr/local/zabbix/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.1.1
ListenPort=10050
ServerActive=192.168.1.1
Hostname=mysql										# 注意主机名要和本机一致
Timeout=15
UnsafeUserParameters=1
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
[root@mysql ~]# mkdir /usr/local/zabbix/logs
[root@mysql ~]# chown -R zabbix:zabbix /usr/local/zabbix/

1.建立数据库和 Zabbix 的连接信息

[root@mysql ~]# vim /usr/local/zabbix/etc/.my.cnf
# Zabbix Agent
[mysql]
host=localhost
user=zabbix
password=zabbix
[mysqladmin]
host=localhost
user=zabbix
password=zabbix
[root@mysql ~]# sed -i 's/HOME=\\/var\\/lib\\/zabbix/HOME=\\/usr\\/local\\/zabbix\\/etc\\//g' /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_mysql.conf
[root@mysql ~]# /usr/local/zabbix/sbin/zabbix_agentd							# 启动 Agent 服务

Zabbix Server 使用 zabbix_get 测试获取数据

[root@zabbix ~]# zabbix_get -s 192.168.1.3 -p 10050 -k "mysql.status[Uptime]"
18654

2.登录 Zabbix Web 配置台

在这里插入图片描述
在这里插入图片描述监控 MySQL 的带宽:
在这里插入图片描述
监控 MySQL 的操作状态:在 Zabbix 前端可以实时查看各种 SQL 语句每秒钟的操作次数。
在这里插入图片描述

三、使用 Zabbix 监控 Server 端的 TCP 连接次数

1.编写 Agent 端的监控脚本

[root@zabbix ~]# mkdir /usr/local/zabbix/scripts
[root@zabbix ~]# vim /usr/local/zabbix/scripts/tcp_status.sh
#!/bin/bash
if [ $# -ne 1 ];then
    echo "Follow the script name with an argument "
fi
 
case $1 in
 
LISTEN)
    result=`netstat -ant| awk '/^tcp/ {a[$6]++} END {for (b in a) print b,a[b]}'| awk '/LISTEN/{print $2}'`
    if [ "$result" == "" ];then
           echo 0
    else
       echo $result
    fi
    ;;
ESTAB)
    result=`netstat -ant| awk '/^tcp/ {a[$6]++} END {for (b in a) print b,a[b]}'| awk '/ESTABLISHED/{print $2}'`
    if [ "$result" == "" ];then
           echo 0
    else
       echo $result
    fi
    ;;
TIME_WAIT)
    result=`netstat -ant| awk '/^tcp/ {a[$6]++} END {for (b in a) print b,a[b]}'| awk '/TIME_WAIT/{print $2}'`
    if [ "$result" == "" ];then
           echo 0
    else
       echo $result
    fi
esac
[root@zabbix ~]# chmod +x /usr/local/zabbix/scripts/tcp_status.sh
[root@zabbix ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/usr/local/zabbix/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.1.1
ServerActive=192.168.1.1
Hostname=zabbix
UnsafeUserParameters=1
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
[root@zabbix ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/tcp_status.conf
UserParameter=tcp.status[*],/usr/local/zabbix/scripts/tcp_status.sh $1

Zabbix Server 使用 zabbix_get 测试获取数据

[root@zabbix ~]# zabbix_get -s 192.168.1.1 -p 10050 -k tcp.status[LISTEN]
6
[root@zabbix ~]# zabbix_get -s 192.168.1.1 -p 10050 -k tcp.status[ESTAB]
29
[root@zabbix ~]# zabbix_get -s 192.168.1.1 -p 10050 -k tcp.status[TIME_WAIT]
18

在这里插入图片描述

2.登录 Zabbix Web 配置台

创建监控项
在这里插入图片描述
创建图形
在这里插入图片描述
查看
在这里插入图片描述

以上是关于使用 Zabbix 监控 Nginx MySQL,以及自定义监控项的主要内容,如果未能解决你的问题,请参考以下文章

zabbix密钥监控-mysql-nginx-php

zabbix监控mysql,nginx

zabbix监控规划及实施

zabbix-agent安装及添加配置nginx,mysql及系统的监控

zabbix监控nginxmysqljava应用Zabbix + proxy分布式

CentOS 7安装zabbix-2.4.8监控