第1章 Grafana自定义图形

1.安装grafana

[root@m01 /data/soft]# wget https://dl.grafana.com/oss/release/grafana-6.3.2-1.x86_64.rpm 
[root@m01 /data/soft]# yum localinstall grafana-6.3.2-1.x86_64.rpm -y
[root@m01 /data/soft]# systemctl start grafana-server.service 
[root@m01 /data/soft]# systemctl enable grafana-server.service

访问grafana:http://10.0.0.61:3000
账号密码:admin admin

zabbix服务深入 Safe 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

2.安装并激活zabbix插件

[root@m01 ~]# grafana-cli plugins list-remote|grep zabbix
id: alexanderzobnin-zabbix-app version: 3.10.4
[root@m01 ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
[root@m01 ~]# systemctl restart grafana-server.service

网页操作-激活zabbix插件

zabbix服务深入 Safe 第2张

网页操作-添加zabbix数据源

zabbix服务深入 Safe 第3张

zabbix服务深入 Safe 第4张

zabbix服务深入 Safe 第5张

网页操作-导入模版

zabbix服务深入 Safe 第6张

3.数据展示

zabbix服务深入 Safe 第7张

4.自定义图形仪表盘

zabbix服务深入 Safe 第8张

zabbix服务深入 Safe 第9张

zabbix服务深入 Safe 第10张

zabbix服务深入 Safe 第11张

zabbix服务深入 Safe 第12张

zabbix服务深入 Safe 第13张

5.自定义图形饼图

1.安装插件

在线安装方式

grafana-cli plugins install grafana-piechart-panel

离线安装方式

wget -nv https://grafana.com/api/plugins/grafana-piechart-panel/versions/latest/download -O /tmp/grafana-piechart-panel.zip
unzip -q /tmp/grafana-piechart-panel.zip -d /tmp
mv /tmp/grafana-piechart-panel-* /var/lib/grafana/plugins/grafana-piechart-panel
service grafana-server restart

2.配置图形

zabbix服务深入 Safe 第14张

zabbix服务深入 Safe 第15张

zabbix服务深入 Safe 第16张

zabbix服务深入 Safe 第17张

第2章 percona模版监控mysql

参考强哥的博客

https://www.qstack.com.cn/archives/213.html

1.安装php环境

percona需要php环境

mkdir /data/soft -p

[root@m01 /data/soft]# yum install php php-mysql -y

2.下载软件

zabbix服务深入 Safe 第18张

zabbix服务深入 Safe 第19张

注意,安装完成后会有提示模版的路径位置

[root@m01 ~]# cd /data/soft/
[root@m01 /data/soft]# wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm
[root@m01 /data/soft]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm 
警告:percona-zabbix-templates-1.1.8-1.noarch.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:percona-zabbix-templates-1.1.8-1 ################################# [100%]

Scripts are installed to /var/lib/zabbix/percona/scripts
Templates are installed to /var/lib/zabbix/percona/templates

3.查看目录

进入安装目录会发现有2个目录,一个是脚本目录,一个是模版目录

[root@m01 ~]# cd /var/lib/zabbix/percona/
[root@m01 /var/lib/zabbix/percona]# tree
.
├── scripts
│   ├── get_mysql_stats_wrapper.sh
│   └── ss_get_mysql_stats.php
└── templates
    ├── userparameter_percona_mysql.conf
    └── zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml

其中脚本目录里有2个脚本,用来获取数据库信息

[root@m01 /var/lib/zabbix/percona]# cd scripts/
[root@m01 /var/lib/zabbix/percona/scripts]# ls
get_mysql_stats_wrapper.sh  ss_get_mysql_stats.php

4.修改get_mysql_stats_wrapper.sh

修改get_mysql_stats_wrapper数据库登陆信息
第19行添加mysql账号密码

[root@m01 v]# sed -n '19p' get_mysql_stats_wrapper.sh 
    RES=`HOME=~zabbix mysql -uroot -p123456 -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' 

5.修改ss_get_mysql_stats.php

[root@m01 /var/lib/zabbix/percona/scripts]# sed -n '30,31p' ss_get_mysql_stats.php 
$mysql_user = 'root';
$mysql_pass = '123456';

6.复制自定义监控项配置文件到zabbix目录

[root@m01 ~]# cd /var/lib/zabbix/percona/templates/
[root@m01 /var/lib/zabbix/percona/templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
[root@m01 /var/lib/zabbix/percona/templates]# cd /etc/zabbix/zabbix_agentd.d/
[root@m01 /etc/zabbix/zabbix_agentd.d]# ls
userparameter_mysql.conf  userparameter_percona_mysql.conf

7.重启agent

[root@m01 ~]# systemctl restart zabbix-agent 

8.测试key

[root@m01 ~]# zabbix_get -s 10.0.1.61 -k MySQL.Sort-scan  #注意ip地址本机127.0.0.1
16

9.导入模版

官方自带的模版有点问题,需要先装在2.x版本然后导出来,这里使用网友已经修改好的模版上传

http://pan.baidu.com/s/1pL1wDYj

zabbix服务深入 Safe 第20张

10.主机链接模版

zabbix服务深入 Safe 第21张

xx.报错解决

查看监控发现没有数据显示不支持类型
查看zabbix-server发现因为tmp的文件没有权限,因为刚才手动执行了脚本,所以文件属性是root,将文件删除后由zabbix自己创建解决问题
报错日志如下:

2846:20190811:202708.785 item "Zabbix server:MySQL.State-init" became not supported: Value "rm: 无法删除"/tmp/localhost-mysql_cacti_stats.txt": 不允许的操作
0" of type "string" is not suitable for value type "Numeric (float)"
  2843:20190811:202709.787 item "Zabbix server:MySQL.State-locked" became not supported: Value "rm: 无法删除"/tmp/localhost-mysql_cacti_stats.txt": 不允许的操作
0" of type "string" is not suitable for value type "Numeric (float)"
  2844:20190811:202710.788 item "Zabbix server:MySQL.State-login" became not supported: Value "rm: 无法删除"/tmp/localhost-mysql_cacti_stats.txt": 不允许的操作
0" of type "string" is not suitable for value type "Numeric (float)"

第3章 自动发现和自动注册

1.自动发现

web页面操作

zabbix服务深入 Safe 第22张

image.png

zabbix服务深入 Safe 第23张

zabbix服务深入 Safe 第24张

zabbix服务深入 Safe 第25张

2.自动注册

修改zabbix-agent配置文件

[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.conf        
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.1.61
ServerActive=10.0.1.61
Hostname=web02
Include=/etc/zabbix/zabbix_agentd.d/*.conf

#重启
systemctl restart zabbix-agent

web页面操作

zabbix服务深入 Safe 第26张

zabbix服务深入 Safe 第27张

zabbix服务深入 Safe 第28张

zabbix服务深入 Safe 第29张

刷新查看发现已经添加上了

zabbix服务深入 Safe 第30张

第4章 主动模式和被动模式

默认为被动模式:100个监控项要100个来回,要的时候才返回
主动模式:100个监控项1个回合,将所需要的100个打包,然后一次发过去,发过去之后,客户端全部执行完再一次返回给服务端。

1.克隆模版

完全克隆原来被动模式的模版为主动模式

zabbix服务深入 Safe 第31张

zabbix服务深入 Safe 第32张

2.修改克隆后的模版为主动模式

zabbix服务深入 Safe 第33张

zabbix服务深入 Safe 第34张

zabbix服务深入 Safe 第35张

zabbix服务深入 Safe 第36张

3.修改监控主机关联的模版为主动模式

zabbix服务深入 Safe 第37张

4.修改客户端配置文件并重启

[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.conf        
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.1.61
ServerActive=10.0.1.61
Hostname=web01
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@web01 ~]# systemctl restart zabbix-agent.service 

5.查看最新数据

发现获取数据的时间是一样的

zabbix服务深入 Safe 第38张

第5章 低级自动发现

监控端口自动发现

1.查看系统自带分区自动发现

系统自带的自动发现会显示红字,比如自带的磁盘分区发现规则

zabbix服务深入 Safe 第39张

zabbix服务深入 Safe 第40张

1.查看zabbbix所有的key过滤后展示

zabbix服务深入 Safe 第41张

2.解析成json后的格式

zabbix服务深入 Safe 第42张

3.过滤规则

实质上是从mount命令获取的分区名和类型

zabbix服务深入 Safe 第43张

image.png

但是我们zabbix显示的并没有这么多

是因为做了正则表达式过滤

zabbix服务深入 Safe 第44张

而正则表达式是在管理里面配置的

zabbix服务深入 Safe 第45张

4.使用zabbix_get获取key

因为根据过滤规则,只发现了一个xfs的key,使用zabbix_get可以查看到这个key

[root@m01 ~]# zabbix_get -s 10.0.1.61 -k vfs.fs.size[{#FSNAME},free]
ZBX_NOTSUPPORTED: Cannot obtain filesystem information: [2] No such file or directory
[root@m01 ~]# zabbix_agentd -p|grep vfs.fs.size
vfs.fs.size[/,free]                           [u|15713636352]
[root@m01 ~]# zabbix_get -s 10.0.1.61 -k vfs.fs.size[/,free]        
15713693696

2.查看系统自带的网卡自动发现

1.查看网络自动发现规则

zabbix服务深入 Safe 第46张

2.过滤规则

zabbix服务深入 Safe 第47张

zabbix服务深入 Safe 第48张

2.命令行过滤

[root@m01 ~]# zabbix_agentd -p|grep net.if.discovery
net.if.discovery                              [s|{"data":[{"{#IFNAME}":"tun0"},{"{#IFNAME}":"eth0"},{"{#IFNAME}":"eth1"},{"{#IFNAME}":"lo"}]}]

3.查看自动添加的监控项
我们会发现添加了四个监控项
2个eth0
2个eth1

zabbix服务深入 Safe 第49张

zabbix服务深入 Safe 第50张

4.查看key的值

[root@m01 ~]# zabbix_get -s 10.0.1.61 -k net.if.in[eth0]
2191453
[root@m01 ~]# zabbix_get -s 10.0.1.61 -k net.if.in[eth1]
7152

3.监控mysql多实例

参考强哥博客

[https://www.qstack.com.cn/archives/108.html](https://www.qstack.com.cn/archives/108.html)

1.复制并修改数据库配置文件

yum -y install mariadb-servier
systemctl start mariadb
[root@m01 ~]# cp /etc/my.cnf /etc/my3307.cnf
[root@m01 ~]# vim /etc/my3307.cnf 
[root@m01 ~]# cat /etc/my3307.cnf    
[mysqld]
datadir=/data/3307/
socket=/data/3307/mysql.sock
port=3307
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/data/3307/mysqld.log
pid-file=/data/3307/mysqld.pid
[root@m01 ~]# cp /etc/my3307.cnf /etc/my3308.cnf
[root@m01 ~]# sed -i 's#3307#3308#g' /etc/my3308.cnf

2.创建数据目录并初始化

[root@m01 ~]# mkdir /data/{3307,3308} -p
[root@m01 ~]# chown -R mysql:mysql /data/330*
[root@m01 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf --force
[root@m01 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf --force

3.启动多实例

[root@m01 ~]# mysqld_safe --defaults-file=/etc/my3307.cnf &
[root@m01 ~]# mysqld_safe --defaults-file=/etc/my3308.cnf &

4.检查端口

[root@m01 ~]# netstat -lntup|grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2042/mysqld         
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      84790/mysqld        
tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      85439/mysqld 

5.创建自动发现配置文件

[root@m01 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql_discovery.sh

#授权
[root@m01 ~]# chmod u+s /usr/bin/netstat 
rm -rf userparameter_mysql.conf  #或者最备份移走
#重启客户端
[root@m01 ~]# systemctl restart zabbix-agent.service 

6.创建自动发现多实例脚本

[root@m01 ~]# cat /server/scripts/mysql_discovery.sh                                                
#!/bin/bash 
#mysql low-level discovery 
res=$(netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$5}')
port=($res) 
printf '{' 
printf '"data":[' 
for key in ${!port[@]} 
do 
        if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then 
                printf '{' 
                printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}," 
        else [[ "${key}" -eq "((${#port[@]}-1))" ]] 
                printf '{' 
                printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}" 
        fi 
done 
printf ']' 
printf '}\n'

7.测试自动发现脚本

[root@m01 ~]# bash /server/scripts/mysql_discovery.sh    
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

报错:.zabbix_get测试取key

[root@m01 ~]# zabbix_get -s 10.0.1.61 -k mysql.discovery
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
{"data":[]}

这时我们发现取不出来并提示了个错误
原因是zabbix用户不能使用netstat的-p参数
解决方法为给netstat命令添加s权限

[root@m01 ~]# which netstat 
/usr/bin/netstat
[root@m01 ~]# chmod u+s /usr/bin/netstat 

然后再次测试就发现可以取到值了

[root@m01 ~]# zabbix_get -s 10.0.1.61 -k mysql.discovery
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

扩展一台多实例

#.db02安装多实例
yum install mariadb-server -y
systemctl start mariadb 
cat >/etc/my3310.cnf<<EOF    
[mysqld]
datadir=/data/3310/
socket=/data/3310/mysql.sock
port=3310
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/data/3310/mysqld.log
pid-file=/data/3310/mysqld.pid
EOF
cp /etc/my3310.cnf /etc/my3311.cnf
sed -i 's#3310#3311#g' /etc/my3311.cnf
mkdir /data/{3310,3311} -p
chown -R mysql:mysql /data/330*
mysql_install_db --user=mysql --defaults-file=/etc/my3310.cnf --force
mysql_install_db --user=mysql --defaults-file=/etc/my3311.cnf --force
mysqld_safe --defaults-file=/etc/my3310.cnf &
mysqld_safe --defaults-file=/etc/my3311.cnf &
netstat -lntup|grep mysql

#.web02复制web01的数据
chmod u+s /usr/bin/netstat
rm -rf userparameter_mysql.conf
scp 10.0.0.7:/etc/zabbix/zabbix_agentd.d/* /etc/zabbix/zabbix_agentd.d/
systemctl restart zabbix-agent


#.web02关联模板

8.web页面创建自动发现规则模版

zabbix服务深入 Safe 第51张

创建模版

zabbix服务深入 Safe 第52张

创建自动发现规则

zabbix服务深入 Safe 第53张

设置过滤规则

zabbix服务深入 Safe 第54张

创建过滤 规则

11.模仿zabbix自带的mysql监控配置修改监控项

场景要求:

场景1:
有2台mysql数据库
每一台都是多实例
每个mysql实例都要监控指标uptime
db01: 3306 3307 3308
db02: 3309 3310 3311

shell命令如何实现

mysql -uroot -p123456 -P 3307 -e "show status  where Variable_name='uptime';"
mysql -uroot -p123456 -P 3308 -e "show status  where Variable_name='uptime';"
mysql -uroot -p123456 -P 3309 -e "show status  where Variable_name='uptime';"

使用低级自动发现添加mysql端口

1.创建多实例(同上)

2.创建zabbix低级自动配置文件

vim /etc/zabbix/zabbix_agentd.d/mysql_uptime.conf
UserParameter=mysql.status[*],mysql -h127.0.0.1 -P$2 -N -e "show global status where Variable_name='$1';" | awk '{print $$2}'
#授权
[root@m01 ~]# chmod u+s /usr/bin/netstat 
mv /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf /tmp

[root@m01 ~]# systemctl restart zabbix-agent.service

3.测试访问监控项 :服务端

[root@m01 ~]# zabbix_get -s 10.0.0.9 -k mysql.status[Uptime,3309]

13.web页面添加监控项原型

zabbix服务深入 Safe 第55张

监控项原型

12.web页面设置主机关联模版

zabbix服务深入 Safe 第56张

主机关联模版

13.查看是否已经自动添加成功

zabbix服务深入 Safe 第57张

web首页的优化

1安装,找到一个首页

zabbix服务深入 Safe 第58张

2.zabbix -web界面配置

zabbix服务深入 Safe 第59张

3.查询首页状态

zabbix服务深入 Safe 第60张

4.配置场景

zabbix服务深入 Safe 第61张

zabbix服务深入 Safe 第62张

4.配置关联主机

zabbix服务深入 Safe 第63张

zabbix服务深入 Safe 第64张

5.查看状态

zabbix服务深入 Safe 第65张

6.配置触发器

zabbix服务深入 Safe 第66张

zabbix服务深入 Safe 第67张

7.修改配置文件

       location / {
            return 404
            root   html;
            index  index.html index.htm;
        }

第6章 性能优化

1.监控数据分析

zabbix监控主机和监控项较少的时候,不需要优化
数据库 200台主机 * 200个监控项 = 40000监控项/30秒 = 1333次写入/每秒
写多 读少 

2.优化思路

1.mariadb 5.5 innodb 升级到mysql5.7 tokudb
2.去掉无用监控项,增加监控项的取值间隔,减少历史数据的保存周期
3.被动模式改为主动模式
4.针对zabbix-server进程数量调优
5.针对zabbix-server缓存调优,谁的剩余内存少,就加大他的缓存
6.固态硬盘   大内存
7.zabbix proxy  (上千台.做代理汇总)

3.升级存储引擎

TokuDB性能比InnoDB要好

实施步骤:

1.找一台机器安装好mysql5.7
2.将mariadb的数据导出,然后替换sql文件里的存储引擎为TokuDB
3.将替换之后的数据导入到mysql5.7
4.停掉mariadb
5.检查测试

4.优化进程数

zabbix服务深入 Safe 第68张

可以人为制造进程繁忙,把自动发现调整IP范围为1-254

zabbix服务深入 Safe 第69张

这个时候观察会发现自动发现进程变得繁忙了

修改进程数

[root@zabbix-11 ~]# grep "^StartDiscoverers" /etc/zabbix/zabbix_server.conf 
StartDiscoverers=10
[root@zabbix-11 ~]# systemctl restart zabbix-server.service

调整之后发现进程不这么繁忙了

zabbix服务深入 Safe 第70张

5.缓存调优

zabbix服务深入 Safe 第71张

调整配置文件

[root@zabbix-11 ~]# grep "^Cache" /etc/zabbix/zabbix_server.conf 
CacheSize=128M

第7章 zabbix高可用

思路:
2台zabbix-server使用keepavied做高可用
数据库做主从复制
keepalived两端都做backup角色,设置不抢占VIP
keepalived设置如果发生改变就将自身的从库数据库修改为主库设置
然后另一台修复上线后,手动介入重新做主从同步,变成从库

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄