mysql多实例监控实录
 
系统环境:
cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
内核版本:
uname -r
3.10.0-514.el7.x86_64
docker版本:
docker -v
Docker version 1.12.6, build 3a094bd/1.12.6
docker 相关镜像版本:
docker.io/zabbix/zabbix-web-nginx-mysql latest
docker.io/zabbix/zabbix-server-mysql latest
docker.io/mysql 5.7
被监控mysql应用版本:
mysql-5.7.17-linux-glibc2.5-x86_64
Percona Monitoring Plugins版本:
 
写在最前:如果zabbix server和zabbix agent已经通过其他方式安装,可以直接跳过1、2步,直接从第3步开始看。
 
1、zabbix服务端我们运行在docker容器内
所以服务器端先安装docker服务
yum install -y epel-release
yum install -y docker #centos6.x版本的命令是yum install -y docker-io
 
然后运行docker服务
systemctl start docker
docker加入开机自启动
systemctl enable docker
查看docker是否成功启动
systemctl status docker
注:使用docker需要使用加速器,否则那龟速,自己体会吧。加速器daocloud和阿里云都可以,我使用的前者。
 
2.安装相关容器
2.1. mysql 容器
docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="ywwd.net" \
      -e MYSQL_ROOT_PASSWORD="ywwd.net" \
      -v /data/container/mysql/zabbix:/var/lib/mysql \
      -v /etc/localtime:/etc/localtime:ro \
      --restart=always \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_general_ci --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
 
2.2. zabbix-server 容器
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="ywwd.net" \
      -e MYSQL_ROOT_PASSWORD="ywwd.net" \
      --link mysql-server:mysql \
      -p 10051:10051 --restart=always \
      -v /etc/localtime:/etc/localtime:ro \
      -d zabbix/zabbix-server-mysql:latest
 
2.3. zabbix-web 容器(nginx)
docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="ywwd.net" \
      -e MYSQL_ROOT_PASSWORD="ywwd.net" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -v /etc/localtime:/etc/localtime:ro \
      -p 80:80 \
      --restart=always \
      -d zabbix/zabbix-web-nginx-mysql:latest
 
注意:这里有个小问题,zabbix-web-nginx-mysql的启动脚本/run_zabbix_component.sh中,指定了时区,不是中国的Asia/Shanghai,所以我们要进入zabbix-web-nginx-mysql进行修改
2.4. 修改zabbix-web的时区
docker exec -it zabbix-web-nginx-mysql /bin/bash
TZ=${TZ:-"Asia/Shanghai"} 这里改为Asia/Shanghai,否则zabbix-web端的时间会慢5个小时
sed -in 's#Europe/Riga#Asia/Shanghai#g' /run_zabbix_component.sh
修改时区后,需要重启容器
docker restart zabbix-web-nginx-mysql
2.5. 在firewall防火墙放开zabbix-server和zabbix-agent的服务端口号
firewall-cmd --permanent --add-port=10050-10051/tcp
#--permanent永久生效,10050zabbix-agent服务端口,10051zabbix-server服务端口
firewall-cmd --reload
#更改后需要重新加载firewall防火墙
firewall-cmd --list-all
#最后查看配置是否生效
 
这样zabbix-server端就已经安装完毕
接下来客户端我们采用rpm包进行安装
rpm -ivh zabbix-agent-3.2.6-1.el7.x86_64.rpm
同样需要放开zabbix-agent端口
firewall-cmd --permanent --add-port=10050/tcp
firewall-cmd --reload
 
然后对zabbix-agent端进行配置
egrep -v '^$|^#' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
Server=10.0.0.106 # <====zabbix-server端的IP地址
ServerActive=10.0.0.106 #<====zabbix-server端的IP地址,主动方式
Hostname=10.0.0.107 #<====zabbix-agent端的IP地址或者主机名
Include=/etc/zabbix/zabbix_agentd.d/*.conf
 
然后在zabbix-server端的web界面进行主机添加
 
1)修改主机名称,要跟zabbix-agent的配置文件中的Hostname相对应
2)选择你想设置的群组,如果群组不存在,可以在下面一栏新的群组中进行添加
3)指定zabbix-agent端的IP地址或者域名(端口号一般变)
其他保持默认,点击添加即可
 
3、利用Percona Monitoring Plugins插件进行MySQL多实例的监控
1)percona监控zabbix的脚本是使用php写的,所以需要准备好php运行环境,这里直接用yum安装就可以满足要求了:
yum install -y php php-mysql
2)安装percona-zabbix-templates
 
也可配置Percona yum仓库后安装,建议配置percona的yum源,因为作为一个DBA你肯定会用到percona toolkit套件。 注:我没有用这种方式,percona toolkit我是通过源码包安装的。
yum install -y https://www.percona.com/redir/downloads/percona-release/redhat/latest/percona-release-0.1-3.noarch.rpm
yum install -y percona-zabbix-templates
 
4、yum安装的shell为单实例版,所以我们要进行相关修改,这里已经有小伙伴进行了修改,我们直接克隆,进行对比,需要先安装git
 
1)对比后,我们发现在get_mysql_stats_wrapper.sh脚本中,添加了相关参数
PORT=$2
HOST=127.0.0.1
 
2)CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items $ITEM --port $PORT"
CMD变量的php路径一定要指定正确,否则会报错,我们在后面添加了 --port $PORT
CACHEFILE改为判断
if [ $PORT == 3306 ];then
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"
else
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt":$PORT
fi
 
3)running-slave进行如下修改,此处报警跟模板中的另一个Slave Stopped是重叠的,不过这个比Slave Stopped要灵敏,大概提前3分钟左右报警,不过需要在/etc/my.cnf以及脚本中添加mysql的账号和密码等信息,各有利弊吧
 
if [ "$ITEM" = "running-slave" ]; then
# Check for running slave
RES=`HOME=~zabbix /usr/local/mysql/bin/mysql -P$PORT -h127.0.0.1 -uzabbix -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l `
if [ "$RES" -ne 2 ]; then
echo 1
else
echo 0
fi
exit
并在/etc/my.cnf中添加
[mysql]
password=123456 #存在安全隐患,但是如果把权限改小,可能会获取不到值,因为是通过zabbix用户去运行的脚本,里面只是密码,而且账号只能本机登录,所以问题也不大,但是要严格控制其他3个shell脚本的权限。
 
4)#cat $CACHEFILE | sed 's/ /\n/g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}'
这一列改为:
cat $CACHEFILE | sed 's/ /\n/g'| grep $ITEM | awk -F: '{print $2}' 或者
cat $CACHEFILE | sed 's/ /\n/g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
改为第一个,在zabbix-server的web端配置报警阈值为小于0,或者等于1的时候报警,
改为第二行,可以统一设置报警阈值为等于1,因为这个问题,困扰了我好久
 
5、修改自动发现脚本
cat mysql_low_discovery.sh
#!/bin/bash
#Fucation:mysql low-level discovery
#Script_name mysql_low_discovery.sh
discovery() {
port=($(sudo ss -tpln | awk -F "[ :]+" '/[m]ysql/ {print $4}'))
printf '{\n'
printf '\t"data":[\n'
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
printf '\t {\n'
printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
printf '\t {\n'
printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"
fi
done
printf '\t ]\n'
printf '}\n'
}
discovery
 
注意:由于此处使用了 sudo ,所以要把zabbix用户加上sudo权限,且只能执行 ss命令
echo 'zabbix ALL=(ALL) NOPASSWD:/usr/sbin/ss'>>/etc/sudoers
 
修改ss_get_mysql_stats.php脚本
$mysql_user = 'zabbix'; <=====此为php登录mysql的用户
$mysql_pass = 123456; <=====此为php登录mysql的密码
$mysql_port = NULL; <=====端口和socket要改为NULL
$mysql_socket = NULL;
 
修改userparameter_percona_mysql.conf 配置文件
把每行中的逗号',' 替换为[*],
sed -in 's#,#[*],#g' userparameter_percona_mysql.conf
在每行后面添加 $1
sed -in 's#$#$1#g' userparameter_percona_mysql.conf
最后在首行添加端口自动发现脚本
sed -in '1i UserParameter=MySQL.discovery,/bin/bash /var/lib/zabbix/percona/scripts/mysql_low_discovery.sh' userparameter_percona_mysql.conf
 
6、复制脚本文件并执行权限
mkdir -p /var/lib/zabbix/percona/scripts/
cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
cp get_mysql_stats_wrapper.sh /var/lib/zabbix/percona/scripts/
cp mysql_low_discovery.sh /var/lib/zabbix/percona/scripts/
cp ss_get_mysql_stats.php /var/lib/zabbix/percona/scripts/
chmod 700 /var/lib/zabbix/percona/scripts/*
chown -R zabbix. /var/lib/zabbix/
7、最后一定要在所有的库上面做授权操作,否则拿不到监控数据
GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'zabbix'@'localhost' identified by '123456';
flush privileges;
 
8、最后把模板Mysql_Multiport.xml导入到zabbix-server内,所有用到的脚本文件都已经添加到附件中,大家可以下载使用。
创建触发器原型
 
在zabbix-server端,添加触发器
依次点击 主机===>自动发现===>触发器类型===>点击右上角的创建触发器原型
分配报警级别,点击表达式栏的添加,选择选择原型
然后选择 例如:MySQL.slave-stopped[{#MYSQLPORT}]
选择最新的T值小于N
N为0
注:如果在第4.4中指定的是cat $CACHEFILE | sed 's/ /\n/g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
选择最新的T值等于N
N为1
 
然后我们可以手动停止主从复制,稍等片刻,就会发了报警信息
 
博客园不允许放附件,所以我只能把附件放在百度云了
http://pan.baidu.com/s/1slFGVoT
 
参考文章:
https://github.com/hc-dba/Mysql_Multiport_monitor_used_zabbix
 
另外可以添加微信和邮件告警,这里推荐下面的博文
 

Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现的更多相关文章

  1. Zabbix 3.x中使用Percona Monitoring Plugins监控MySQL

    1.下载安装percona-zabbix-templates-1.1.7-2.noarch.rpm 下载地址:https://www.percona.com/downloads/percona-mon ...

  2. Docker部署Zabbix监控MariaDB主从同步(Percona Monitoring Plugins for Zabbix)

    一.安装Docker并部署Zabbix 建议先配置清华大学的docker-ce yum源,速度有保障:清华大学repo源 1.Zabbix Server节点配置 部署环境: [root@server0 ...

  3. 修正Percona Monitoring Plugins for Zabbix的一处脚本Bug

    今天小试了一把Percona Monitoring Plugins for Zabbix模板,自己辛辛苦苦写的那一大堆Python脚本,貌似用这个模板全都覆盖到了.但是,我也发现最新的版本percon ...

  4. Zabbix 中使用 Percona Monitoring Plugins 监控 MySQL

    1.先安装agent客户端 tar zxvf zabbix-3.2.6.tar.gz cd zabbix-3.2.6 ./configure --prefix=/data/zabbix --enabl ...

  5. 用percona monitoring plugins 监控mysql

    下载:http://www.percona.com/redir/downloads/percona-monitoring-plugins/1.1.1/percona-zabbix-templates- ...

  6. zabbix低级自动发现之mysql多实例

    1.低级自动发现概述 zabbix的低级自动发现(LLD)适用于监控多实例,监控变化的数据(分区.网卡). 自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法.例如,Z ...

  7. 利用Percona monitoring for zabbix监控MySQL

    系统要求 被监控的主机及mysql监控账号,zabbix agent 2.0或以上(最好与zabbix-server版本相同),php, php-mysql(php版本没有限制,经测试5.3是可以的. ...

  8. 016-zabbix低级自动发现以及MySQL多实例

    1.概述 Zabbix的网络发现是指zabbix server通过配置好的规则,自动添加host,group,template Zabbix的主动注册刚好和网络发现是相反的,功能基本一致.zabbix ...

  9. zabbix模板的自动发现规则(ldd)实现被监控项自动发现

    zabbix模板的自动发现规则(ldd)实现被监控项自动发现 自动发现规则(ldd)用途说明 在zabbix自带的linux模板的自动发现规则中,有一个Mounted filesystem disco ...

随机推荐

  1. Spring框架 IOC注解

    Spring框架的IOC之注解方式的快速入门        1. 步骤一:导入注解开发所有需要的jar包        * 引入IOC容器必须的6个jar包        * 多引入一个:Spring ...

  2. js获取当前时间往后加6天

    获取当前时间往后加6天,并绑定星期几(星期几是最笨的的方法,一个一个判读),后期在优化 <!DOCTYPE html> <html lang="en"> & ...

  3. 针对jar里面的图片不显示问题

    做了一个html生产pdf案例. 然后把图片放到resource/static/model/img下面,生成jar包运行,发现图片不显示, 发现html里面的src必须是http域名开头的图片. 下面 ...

  4. React navtive

    http://www.linuxidc.com/Linux/2015-09/123239.htm

  5. keepalived 的 vrrp_script

    [root@centos01 keepalived]# cat check_httpd.sh 脚本需要有执行权限 通常情况下,利用keepalived做热备,其中一台设置为master,一台设置为ba ...

  6. Hadoop2.8 安装

    一.下载Hadoop与java jdk-8u221-linux-x64.tar.gz  Oracle官网下载 hadoop-2.8.5.tar.gz   Hadoop官网下载 二.配置服务期间ssh免 ...

  7. MySQL分区表 非分区索引 无法使用

    在<高性能Mysql>这本书的‘如何使用分区’这一小章中,列举的常见问题中,有以下一个问题: 分区列和索引列不匹配 如果定义的索引列和分区列不匹配,会导致查询无法进行分区过滤.假设在列a上 ...

  8. CF696B Puzzles 概率期望

    有一棵树,共有 $N$ 个节点,他会使用下列 $DFS$ 算法对该树进行遍历: starting_time是一个容量为n的数组current_time = 0dfs(v): current_time ...

  9. [C++]线程池 与 [Go] mapreduce

    线程池 ref: https://github.com/progschj/ThreadPool/blob/master/ThreadPool.h ref: https://www.jianshu.co ...

  10. Vim颜色配置

    最近迷上了Vim 主要原因是可以装逼 不过话说它自带的配色里面也就只有一个evening能勉强满足我的审美 于是我花了大概几天的时间翻了些百度贴吧,或者自己手动改属性后面的配色来实验这个属性到底对应哪 ...