zabbix监控nginx,mysql
一、zabbix创建自定义模板监控nginx状态页面(需有聚合图形展示)
#安装中文。安装langpacks-zh_CN.noarch是没用的,要安装glibc-langpack-zh.x86_64
[root@zabbix-server ~]#yum install glibc-langpack-zh.x86_64
#图形界面中文乱码问题在windos上拷贝字体simkai.ttf,放到/usr/share/fonts/dejavu目录改名
[root@zabbix-server dejavu]#cd /usr/share/fonts/dejavu
[root@zabbix-server dejavu]#mv DejaVuSans.ttf DejaVuSans.ttf.bak
[root@zabbix-server dejavu]#mv simkai.ttf DejaVuSans.ttf
1.找一台服务器10.0.0.170,安装nginx和zabbix_agent
#安装,启动nginx及nginx状态页配置
[root@nginx ~]#yum install -y nginx
[root@nginx ~]#vim /etc/nginx/nginx.conf
location /nginx_status {
stub_status;
}
[root@nginx ~]#systemctl enable nginx --now
[root@nginx ~]#curl localhost
nginx.test
[root@nginx ~]#curl localhost/nginx_status
Active connections: 1
server accepts handled requests
2 2 2
Reading: 0 Writing: 1 Waiting: 0
[root@nginx ~]#
#安装zabbix监控代理程序,机器能上网即可。这里选择的是清华大学的源
[root@nginx ~]#rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/8/x86_64/zabbix-agent-6.0.3-1.el8.x86_64.rpm
#安装zabbix_agent
[root@nginx ~]#yum install -y zabbix-agent
#编辑zabbix-agent的配置文件。将其中Server的地址改成zabbix-server的地址
[root@nginx ~]#vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.150
#启动agent代理程序并加入到开机自启。
[root@nginx ~]#systemctl enable zabbix-agent --now
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent.service → /usr/lib/systemd/system/zabbix-agent.service.
2.编写监控nginx状态页脚本
##命令测试获取各种状态页状态
[root@nginx ~]# /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
1
[root@nginx ~]#/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
0
[root@nginx ~]#/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
1
[root@nginx ~]#/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
0
[root@nginx ~]#/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
9
[root@nginx ~]#/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
10
[root@nginx ~]#/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
12
#编写脚本
[root@nginx ~]#cat nginx_status.sh
#!/bin/bash
#================================================================
# Copyright (C) 2022 IEucd Inc. All rights reserved.
#
# 文件名称:nginx_status.sh
# 创 建 者:TanLiang
# 创建日期:2022年08月31日
# 描 述:This is a test file
#
#================================================================
nginx_status_fun(){ #函数内容
NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号
NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令
nginx_active(){ #获取nginx_active数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
nginx_reading(){ #获取nginx_reading状态的数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
nginx_writing(){ #获取nginx_writing状态的数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
nginx_waiting(){ #获取nginx_waiting状态的数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
nginx_accepts(){ #获取nginx_accepts状态的数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
nginx_handled(){ #获取nginx_handled状态的数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
nginx_requests(){ #获取nginx_requests状态的数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
case $NGINX_COMMAND in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
esac
}
main(){ #主函数内容
case $1 in #分支结构,用于判断用户的输入而进行响应的操作
nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数
nginx_status_fun $2 $3;
;;
*) #其他的输入打印帮助信息
echo $"Usage: $0 {nginx_status key}"
esac #分支结束符
}
main $1 $2 $3
#移动脚本并添加执行权限
[root@nginx ~]#mv nginx_status.sh /etc/zabbix/zabbix_agentd.d/
[root@nginx ~]#chmod +x /etc/zabbix/zabbix_agentd.d/
[root@nginx ~]#chmod +x /etc/zabbix/zabbix_agentd.d/nginx_status.sh
3.zabbix agent 添加自定义监控项
[root@nginx ~]#vim /etc/zabbix/zabbix_agentd.conf
UserParameter=nginxstatus[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh "$1" "$2" "$3"
[root@nginx ~]#systemctl restart nginx
4.测试获取自定义监控项
[root@zabbix-server ~]#zabbix_get -s 10.0.0.170 -k "nginxstatus["nginx_status","80","active"]"
1
5.监控模板制作
5.1创建主机
5.2创建模板
5.3创建监控项
5.4创建监控项
5.5创建图形
5.6关联自定义模板到主机
6.查看图形验证是否获取到数据
二、zabbix监控MySQL,并实现当MySQL连接数超过2000时重启MySQL Server
Zabbix6 自带mysql模版,无须再使用第三方,也不用自己写监控脚本,而且zabbix-agent2比zabbix-agent,功能更强大,应用也更简单。
Zabbix 5.0 版本推出了使用 go 语言重写的 Agent2,也是 5.0 版本新特性,Agent2 有如下特性:
- 完成的插件框架支持,可扩张服务及应用监控
- 支持灵活的采集周期调度
- 更高效的数据采集及传输
- 可完全替换先有的 agent
- …..
特性较多,建议使用。由于使用 go 语言编写,编译安装与之前版本有所区别。Agent2 默认使用的 10050 端口,与 Zabbix Agent 端口一样,不修改端口情况下,同一台机器不能同时启动 Zabbix Agent 与 Zabbix Agent2。
1.在10.0.0.180上安装mariadb数据库,并创建监控用户
[root@mysql ~]#yum install -y mariadb mariadb-server
[root@mysql ~]#systemctl enable --now mariadb
[root@mysql ~]#mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.28-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]>
MariaDB [(none)]> GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
Query OK, 0 rows affected (0.000 sec)
2.安装并配置zabbix-agent2
[root@mysql ~]#rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
[root@mysql ~]#sed -i 's#https://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
[root@mysql ~]#yum clean all
[root@mysql ~]#yum install -y zabbix-agent2.x86_64
[root@mysql ~]#grep "^[a-Z]" /etc/zabbix/zabbix_agent2.conf
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=10.0.0.150
Hostname=10.0.0.180
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
[root@mysql ~]#systemctl enable --now zabbix-agent2
3.创建主机并关联模板
4.修改模板的宏,填写数据库地址,监控的账户、密码
5.查看最新数据,验证是否可以获取数据
6.实现当MySQL连接数超过5时重启MySQL Server
zabbix6.0版本的远程执行命令和之前版本有所区别,参考官网链接。
6.1需要在agent上实现:
远程命令可以由Zabbix Server、Proxy 或agent执行。Zabbix agent上的远程命令可以由Zabbix Server或通过 Proxy 执行。Zabbix agent和Zabbix Proxy上的远程命令默认都是禁用的。 它们可以通过以下方式启用:
-
在agent的配置中添加一个AllowKey=system.run[*] 参数;
-
在代理的配置中将EnableRemoteCommands参数设为‘1’。
[root@mysql ~]#grep "[1]" /etc/zabbix/zabbix_agent2.conf
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=10.0.0.150
Hostname=10.0.0.180
Include=/etc/zabbix/zabbix_agent2.d/.conf
ControlSocket=/tmp/agent.sock
Plugins.SystemRun.LogRemoteCommands=1
Include=./zabbix_agent2.d/plugins.d/.conf
AllowKey=system.run[*]
6.2访问权限
确保‘zabbix’用户拥有执行配置的命令的权限。用户可能有兴趣使用sudo给特权命令访问权限。要配置访问权限,用root执行以下命令:
# visudo
可以在sudoers文件使用示例的几行:
[root@mysql ~]#cat /etc/sudoers
zabbix ALL=NOPASSWD: /usr/bin/systemctl restart mariadb
zabbix ALL=NOPASSWD: ALL
6.3创建脚本
6.4创建动作
6.5多复制5个以上窗口,连接mysql,模拟故障
6.6验证自动重启恢复故障
a-Z ↩︎
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-08-31 创建用户user1、user2、user3。在/data/下创建目录test