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版本的远程执行命令和之前版本有所区别,参考官网链接。

https://www.zabbix.com/documentation/6.0/zh/manual/config/notifications/action/operation/remote_command

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 "" /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验证自动重启恢复故障


  1. a-Z ↩︎

posted @   小糊涂90  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2021-08-31 创建用户user1、user2、user3。在/data/下创建目录test
点击右上角即可分享
微信分享提示