![7861ea3b42564f4999acc9e856262cc2.png](https://i-blog.csdnimg.cn/blog_migrate/2271ca3fbce08f0aac1956ec11693526.png)
Zabbix 是一个企业级的、开源的、分布式的监控套件,能够监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。在目前生产环境中使用也是相当多,已成为了 Linux 运维从业人员的必学工具。
接下来,就一起来看看如何使用 Zabbix 自带的模版监控 MySQL 数据库吧!
该实践案例来自实验楼《楼+之Linux运维与DevOps实战》,所有实践操作均是在实验楼提供的在线环境完成。
1.在已安装 Zabbix 的环境中,启动相应的服务。
sudo service mysql start
sudo service zabbix-server start
sudo service zabbix-agent start
sudo service apache2 start
然后访问 http://localhost/zabbix
就会跳转到首页,如下所示:
![5a9baaa17eee4cac24ff8fdb004c2266.png](https://i-blog.csdnimg.cn/blog_migrate/12f37b81ea28ad2ddd55039f1161fa21.jpeg)
顺序点击屏幕上的 Configuration -> Templates,我们在搜索框中输入 MySQL 先查看一下系统是否存在 MySQL 模板。结果如下所示,可以看到存在一个名为 Template DB MySQL 的模板。
![a662c7afc16112cb6c25c7eac4815a7a.png](https://i-blog.csdnimg.cn/blog_migrate/75142f4aa0c87a4c11ab19e82662c793.jpeg)
点击 Name 为 Template DB MySQL 的模板查看详情,进入详情页面再点击 Items 查看:
![f73efdba7cc95c31efe7b78805c8ba88.png](https://i-blog.csdnimg.cn/blog_migrate/01906291052d7bb4c779414a952de502.jpeg)
2. 添加监控脚本
由于 zabbix-agent 没有直接提供对 MySQL 监控的 key,所以我们需要自定义 key 来应用这个模板。
根据前面看到的默认模板,也就是每个 Name 对应的 key,可以把 key 归为以下 3 类:
mysql.status[var]: 这个时候的 key 就取决于其中的参数 mysql.ping mysql.version 我们尝试来编写一个 key 的脚本。
在 MySQL 中可以执行命令 show status 来查看性能参数,然后取出对应的值:
进入 mysql
mysql -uroot
查看性能参数
show status
![2a749f9684b8ea3c582a898eeb3e2b10.png](https://i-blog.csdnimg.cn/blog_migrate/fb997ecdf90a90491b7ef9f2d1fc40a0.jpeg)
将这个脚本命名为 monitor_mysql.sh。执行如下命令新建脚本文件:
cd /etc/zabbix
sudo mkdir scripts && cd scripts
sudo touch monitor_mysql.sh
在环境中安装 jq,否则脚本内的变量类型转换语句会无法执行,会导致后面的 items 无法获取到正确的数据类型而报错:
sudo apt-get install jq
然后向 monitor_mysql.sh 文件中写入如下代码内容:
#!/bin/bash
# 用户名
MYSQL_USER='zabbix'
# 密码
MYSQL_PASSWORD='zabbix'
# 主机地址/IP
MYSQL_HOST='localhost'
# 端口
MYSQL_PORT='3306'
# 数据连接
MYSQL_CONN="/usr/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
给脚本赋予可执行权限:
sudo chmod 755 monitor_mysql.sh
验证脚本是否可行:
./monitor_mysql.sh Uptime
使用 sudo vim /etc/zabbix/zabbix_agentd.conf
命令修改 zabbix 的配置文件,将其中的两项配置修改为如下所示:
# 配置文件路径
Include=/etc/zabbix/zabbix_agentd.conf.d/
# 允许特殊字符
UnsafeUserParameters=1
然后在自定义的配置文件路径下面新建 mysql_status.conf
文件:
cd /etc/zabbix
sudo mkdir zabbix_agentd.conf.d && cd zabbix_agentd.conf.d
sudo touch mysql_status.conf
向 mysql_status.conf
文件中写入如下内容,用于定义 key 的名称:
UserParameter=mysql.status[*],/etc/zabbix/scripts/monitor_mysql.sh $1
UserParameter=mysql.ping,/usr/bin/mysqladmin -uzabbix -pzabbix ping|grep alive|wc -l
UserParameter=mysql.version,mysql -V | cut -f6 -d" " | sed 's/,//'
同时在环境中安装 zabbix-get
进程以便 zabbix agent
监控代理采集数据,在终端执行如下命令进行安装:
sudo apt-get install zabbix-get
重启 zabbix-agent:
sudo service zabbix-agent restart
进行测试:
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.version
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.ping
zabbix_get -s 127.0.0.1 -p 10050 -k "mysql.status[Bytes_sent]"
![02426ffe1d5b47a70ab23771fff303ae.png](https://i-blog.csdnimg.cn/blog_migrate/03d793f5d35038f4aa367871d52a69c3.png)
3. 使 MySQL 自带的监控模板生效
首先新建一个 MySQL host,顺序点击屏幕上的 Configuration -> Hosts -> Create host
进入新建页面:
![74a476c7acc135144d6d33437ca3796b.png](https://i-blog.csdnimg.cn/blog_migrate/0fbced1ef563cda0ca4437da21ef56e5.jpeg)
页面默认自动选择了上方导航栏中的 Host
,在 Host name
中填写 MySQL
,Groups
中把 Other groups
中的 Templates/Databases
移动到左边的 In groups
中。注意:在 Agent interfaces
中 IP address
默认为 127.0.0.1
,Port
也默认为 10050
,因为我们检测的是本地进行的测试。
![b091a054b0c791cc73d9fc77cc6c53e7.png](https://i-blog.csdnimg.cn/blog_migrate/2e7d9161f00653805c726ca385c77f5f.jpeg)
最后点击页面左下方的 Add
保存修改,然后页面就跳转到 Hosts
界面如下:
![08cd6ba8c78e9a66a299d5f67d25d26b.png](https://i-blog.csdnimg.cn/blog_migrate/eb5d81e617a139b7bc97924c8408c2b2.jpeg)
再一次点击 Name
为 MySQL
的条目,在屏幕选择 MySQL
条目下的 Templates
,在 Link new templates
中选择默认的 MySQL 模板 Template DB MySQL
并点击下方的 Add
按钮,效果如下所示:
![27d319114f0c2286387b74f3fad6375f.png](https://i-blog.csdnimg.cn/blog_migrate/fad16404e885d700eba1a6fd280643fd.jpeg)
顺序点击屏幕上的 Configuration -> Templates
,选择 Template DB MySQL
,在 Template
选项栏的下方,Other | group
中选择 Templates/Databases
,看到下方列表栏中出现 MySQL
,选择 MySQL
点击向左的箭头,将其移动到 Hosts/templates
中,然后点击左下方的 Update
按钮进行更新:
![76ddf28d7f38f9f277d618f24c64ba9c.png](https://i-blog.csdnimg.cn/blog_migrate/9e817ac1dd8357670e8887563f27684e.jpeg)
这个时候我们再查看 Configuration -> Hosts
下的 MySQL
可以看到对应的监控项已经生效:
![c7515828ff4b105940a11ca11f49c8b2.png](https://i-blog.csdnimg.cn/blog_migrate/414dcb19c3e6b9a66db8f7ee08c4e11c.jpeg)
查看监控的 Items
:
![74be57012b317de101a25fb9ab07d921.png](https://i-blog.csdnimg.cn/blog_migrate/9e0cdcd70e30b457096e3cff39c6e467.jpeg)
同时也可以看到对应的可视化图像,依次点击 Monitoring -> Graphs
,在 Host
中选择 MySQL
,在 Graph
中可以选择 MySQL bandwidth
或是 MySQL operations
,它们对应的图像分别为:
![4ceda730967a6122264fde8d89690523.png](https://i-blog.csdnimg.cn/blog_migrate/7abcfead4129424eef3a6f46e0a7084f.jpeg)
![45429814c6ee06994389d8a0f6ad25b9.png](https://i-blog.csdnimg.cn/blog_migrate/634c4ee326595826b6e6f8a08b0a9c5c.jpeg)
4.添加自定义的监控项
前面,我们让默认的 MySQL 监控模板生效了,接下来中我们来自定义监控总的连接次数 Connections
。
使用 Clone 的方式来完成这一项监控的设置。
任意单击 MySQL 模板中的一个 item,比如我这里选择 MySQL version
,然后下拉页面到最底部,点击 Clone
按钮:
![2a06088a5e7ced8f9840e0296100ac65.png](https://i-blog.csdnimg.cn/blog_migrate/a213903e77448188cda8bf7923646901.jpeg)
![3ffbdcda012e7343f9b74bd0e202a200.png](https://i-blog.csdnimg.cn/blog_migrate/0a9943731b2165b2df5eafc6bb693d04.jpeg)
然后在新页面中将一些参数值修改为如下所示:
![42b0185faa5e59a39ceb28554ea19e11.png](https://i-blog.csdnimg.cn/blog_migrate/0cb060db153c251b12b94ebaa52f17cc.jpeg)
最后点击下方的 Add
按钮进行添加。
经过上面的步骤,我们就配置好了 MySQL 的系统监控,大家可以对 MySQL 数据库进行一些操作,然后查看对应的数据和图表是否有相应的变化,也可以在这个基础上继续按照实际的需求修改监控配置。
另外社区还提供了强有力的 Percona 监控插件作为补充工具,它比 zabbix 自带的监控模板要强大的多,采集的数据更加全面。在《楼+之Linux运维与DevOps实战》第 5 周的内容中有详细的讲解说明,感兴趣的同学可以关注。
楼+「Linux运维与Devops实战 」有 120 余实验+50 余挑战+190 余实验视频+挑战解析视频的课程内容,涵盖了「 Linux基础、Shell编程、应用服务运维、数据库运维、日志与监控、Python自动化运维、Docker自动化运维、Jenkins持续集成、云计算运维、网络与安全 」等技能。硬扛 11 周,认认真真完成所有内容的学习,轻松胜任月薪「 8—15K 」初级运维工程师。更多课程信息与优惠,请添加助教小姐姐微信(sylmm002)咨询。
![2884930ac64518c9e99051e3e4190152.png](https://i-blog.csdnimg.cn/blog_migrate/4e7a9a0f03caee836cba575dce6b1823.png)