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
就会跳转到首页,如下所示:
顺序点击屏幕上的 Configuration -> Templates,我们在搜索框中输入 MySQL 先查看一下系统是否存在 MySQL 模板。结果如下所示,可以看到存在一个名为 Template DB MySQL 的模板。
点击 Name 为 Template DB MySQL 的模板查看详情,进入详情页面再点击 Items 查看:
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
将这个脚本命名为 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]"
3. 使 MySQL 自带的监控模板生效
首先新建一个 MySQL host,顺序点击屏幕上的 Configuration -> Hosts -> Create host
进入新建页面:
页面默认自动选择了上方导航栏中的 Host
,在 Host name
中填写 MySQL
,Groups
中把 Other groups
中的 Templates/Databases
移动到左边的 In groups
中。注意:在 Agent interfaces
中 IP address
默认为 127.0.0.1
,Port
也默认为 10050
,因为我们检测的是本地进行的测试。
最后点击页面左下方的 Add
保存修改,然后页面就跳转到 Hosts
界面如下:
再一次点击 Name
为 MySQL
的条目,在屏幕选择 MySQL
条目下的 Templates
,在 Link new templates
中选择默认的 MySQL 模板 Template DB MySQL
并点击下方的 Add
按钮,效果如下所示:
顺序点击屏幕上的 Configuration -> Templates
,选择 Template DB MySQL
,在 Template
选项栏的下方,Other | group
中选择 Templates/Databases
,看到下方列表栏中出现 MySQL
,选择 MySQL
点击向左的箭头,将其移动到 Hosts/templates
中,然后点击左下方的 Update
按钮进行更新:
这个时候我们再查看 Configuration -> Hosts
下的 MySQL
可以看到对应的监控项已经生效:
查看监控的 Items
:
同时也可以看到对应的可视化图像,依次点击 Monitoring -> Graphs
,在 Host
中选择 MySQL
,在 Graph
中可以选择 MySQL bandwidth
或是 MySQL operations
,它们对应的图像分别为:
4.添加自定义的监控项
前面,我们让默认的 MySQL 监控模板生效了,接下来中我们来自定义监控总的连接次数 Connections
。
使用 Clone 的方式来完成这一项监控的设置。
任意单击 MySQL 模板中的一个 item,比如我这里选择 MySQL version
,然后下拉页面到最底部,点击 Clone
按钮:
然后在新页面中将一些参数值修改为如下所示:
最后点击下方的 Add
按钮进行添加。
经过上面的步骤,我们就配置好了 MySQL 的系统监控,大家可以对 MySQL 数据库进行一些操作,然后查看对应的数据和图表是否有相应的变化,也可以在这个基础上继续按照实际的需求修改监控配置。