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. String 堆内存和栈内存

    java把内存划分为两种:一种是栈(stack)内存,一种是堆(heap)内存 在函数中定义的一些基本类型的变量和对象的引用变量都在栈内存中分配,当在一段代码块定义一个变量时,java就在栈中为这个变 ...

  2. C++template基础

    函数模板 类模板 参数魔法 模板与友元

  3. Dobbox

    一.向本地仓库导入Dubbox依赖 1.1解压压缩包 1.2打开cmd窗口切到源码包路径 1.3输入命令行 1.4成功后展示如图 1.5输入命令行 1.6成功后如图 public class DoSo ...

  4. Apache Kylin在美团点评的应用

      本文原载自大数据杂谈微信公众号. 感谢美团点评工程师高大月撰文并授权转载. 高大月,美团点评工程师,Apache Kylin PMC成员,目前主要在美团点评数据平台负责OLAP查询引擎的建设. 背 ...

  5. POJ2421Constructing Roads

    Constructing Roads Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 23343   Accepted: 10 ...

  6. jmeter分布式压测原理简介1

    1.什么叫分布式压测? 分布式压测:模拟多台机器向目标机器产生压力,模拟几万用户并发访问 2.分布式压测原理:如下 3.更多补充.....待添加

  7. Zk单机多实例部署

    一.环境准备 当前环境:centos7.3一台软件版本:zookeeper-3.5.2部署目录:/usr/local/zookeeper启动端口:2181,2182,2183配置文件:/usr/loc ...

  8. fluent-动网格-动态层

    模型算例来源:http://blog.sina.com.cn/s/blog_599d8faa0100w4uj.html ​原视频下载地址:http://yunpan.cn/cujM2FxLuGdLK ...

  9. SyntaxError: Non-ASCII character 'æ' in file csdn.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    错误信息: SyntaxError: Non-ASCII character , but no encoding declared; see http://python.org/dev/peps/pe ...

  10. python mongo存在插入不存在更新,同时指定如果不存在才插入的字段

    python爬虫的任务数据操作的小技巧 好久没写公众号了,最近太忙了,这里就不多说了.直接根据需求上代码,我想这个应该是大家比较喜欢的, 需求 爬取某网站的项目列表页,获取其url,标题等信息,作为后 ...