Plugins自动发现

图片 1

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版本:

1.1.7-2.noarch.rpm

 

写在最前:要是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和Ali云都能够,作者使用的前端。

 

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

 

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

yum install -y
https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.7/binary/redhat/6/x86_64/percona-zabbix-templates-1.1.7-2.noarch.rpm

 

也可布署Percona
yum仓库后安装,提议配置percona的yum源,因为作为二个DBA你分明会用到percona
toolkit套件。 注:笔者从不用这种措施,percona
toolkit作者是透过源码包安装的。

yum install -y

yum install -y percona-zabbix-templates

 

4、yum安装的shell为单实例版,所以大家要进行相关改革,这里已经有小同伙举行了改换,大家平昔克隆,实行自己检查自纠,须要先安装git

git clone
https://github.com/lianghx7123/Mysql_Multiport_monitor_used_zabbix.git
mysql_monitor

 

1卡塔 尔(英语:State of Qatar)相比较后,大家发未来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卡塔 尔(英语:State of Qatar)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 STATUSG’ | 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 “ttt”{#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 “ttt”{#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

 

下一场大家得以手动停止主从复制,稍等片刻,就能够发了报告急察方新闻

 

和讯不容许放附属类小零部件,所以作者只得把附属类小零部件放在百度云了

 

参照文章:

https://ywwd.net/read-1271

http://www.ywnds.com/?p=6199

 

别的能够增加Wechat和邮件告急,这里推荐上面的博文

微信告急:https://www.oschina.net/news/75588/zabbix-3.0.3

 

Leave a Comment.