[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 adminphp
[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插件css
网页操做-添加zabbix数据源html
网页操做-导入模版mysql
1.安装插件web
在线安装方式正则表达式
grafana-cli plugins install grafana-piechart-panel
离线安装方式sql
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.配置图形shell
参考强哥的博客数据库
https://www.qstack.com.cn/archives/213.html
percona须要php环境json
mkdir /data/soft -p [root@m01 /data/soft]# yum install php php-mysql -y
注意,安装完成后会有提示模版的路径位置
[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
进入安装目录会发现有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
修改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'
[root@m01 /var/lib/zabbix/percona/scripts]# sed -n '30,31p' ss_get_mysql_stats.php $mysql_user = 'root'; $mysql_pass = '123456';
[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
[root@m01 ~]# systemctl restart zabbix-agent
[root@m01 ~]# zabbix_get -s 10.0.1.61 -k MySQL.Sort-scan #注意ip地址本机127.0.0.1 16
官方自带的模版有点问题,须要先装在2.x版本而后导出来,这里使用网友已经修改好的模版上传
http://pan.baidu.com/s/1pL1wDYj
查看监控发现没有数据显示不支持类型
查看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)"
web页面操做
image.png
修改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页面操做
刷新查看发现已经添加上了
默认为被动模式:100个监控项要100个来回,要的时候才返回
主动模式:100个监控项1个回合,将所须要的100个打包,而后一次发过去,发过去以后,客户端所有执行完再一次返回给服务端。
彻底克隆原来被动模式的模版为主动模式
[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
发现获取数据的时间是同样的
监控端口自动发现
系统自带的自动发现会显示红字,好比自带的磁盘分区发现规则
1.查看zabbbix全部的key过滤后展现
2.解析成json后的格式
3.过滤规则
实质上是从mount命令获取的分区名和类型
image.png
可是咱们zabbix显示的并无这么多
是由于作了正则表达式过滤
而正则表达式是在管理里面配置的
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
1.查看网络自动发现规则
2.过滤规则
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
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
参考强哥博客
[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页面建立自动发现规则模版
建立模版
建立自动发现规则
设置过滤规则
建立过滤 规则
场景要求:
场景1:
有2台mysql数据库
每一台都是多实例
每一个mysql实例都要监控指标uptime
db01: 3306 3307 3308
db02: 3309 3310 3311
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';"
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
[root@m01 ~]# zabbix_get -s 10.0.0.9 -k mysql.status[Uptime,3309]
13.web页面添加监控项原型
监控项原型
12.web页面设置主机关联模版
主机关联模版
13.查看是否已经自动添加成功
location / { return 404 root html; index index.html index.htm; }
zabbix监控主机和监控项较少的时候,不须要优化 数据库 200台主机 * 200个监控项 = 40000监控项/30秒 = 1333次写入/每秒 写多 读少
1.mariadb 5.5 innodb 升级到mysql5.7 tokudb 2.去掉无用监控项,增长监控项的取值间隔,减小历史数据的保存周期 3.被动模式改成主动模式 4.针对zabbix-server进程数量调优 5.针对zabbix-server缓存调优,谁的剩余内存少,就加大他的缓存 6.固态硬盘 大内存 7.zabbix proxy (上千台.作代理汇总)
TokuDB性能比InnoDB要好
实施步骤:
1.找一台机器安装好mysql5.7 2.将mariadb的数据导出,而后替换sql文件里的存储引擎为TokuDB 3.将替换以后的数据导入到mysql5.7 4.停掉mariadb 5.检查测试
能够人为制造进程繁忙,把自动发现调整IP范围为1-254
这个时候观察会发现自动发现进程变得繁忙了
修改进程数
[root@zabbix-11 ~]# grep "^StartDiscoverers" /etc/zabbix/zabbix_server.conf StartDiscoverers=10 [root@zabbix-11 ~]# systemctl restart zabbix-server.service
调整以后发现进程不这么繁忙了
调整配置文件
[root@zabbix-11 ~]# grep "^Cache" /etc/zabbix/zabbix_server.conf CacheSize=128M
思路: 2台zabbix-server使用keepavied作高可用 数据库作主从复制 keepalived两端都作backup角色,设置不抢占VIP keepalived设置若是发生改变就将自身的从库数据库修改成主库设置 而后另外一台修复上线后,手动介入从新作主从同步,变成从库