• zabbix服务深入


    第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

    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数据源

    网页操作-导入模版

    3.数据展示

    4.自定义图形仪表盘

    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.配置图形

    第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.下载软件

    img

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

    [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 STATUSG' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '
    ' 
    

    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
    

    10.主机链接模版

    img

    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页面操作

    img

    image.png

    img

    img

    img

    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页面操作

    img

    img

    img

    img

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

    img

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

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

    1.克隆模版

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

    img

    img

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

    img

    img

    img

    img

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

    img

    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.查看最新数据

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

    img

    第5章 低级自动发现

    监控端口自动发现

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

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

    img

    img

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

    img

    2.解析成json后的格式

    3.过滤规则

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

    img

    image.png

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

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

    img

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

    img

    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.查看网络自动发现规则

    img

    2.过滤规则

    img

    img

    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

    img

    img

    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 "[ :	]+" '/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 '}
    '
    

    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页面创建自动发现规则模版

    img

    创建模版

    img

    创建自动发现规则

    img

    设置过滤规则

      img

    创建过滤 规则

    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页面添加监控项原型

    img

    监控项原型

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

    img

    主机关联模版

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

    img

    web首页的优化

    1安装,找到一个首页

    2.zabbix -web界面配置

    3.查询首页状态

    4.配置场景

    4.配置关联主机

    5.查看状态

    1576584633046

    6.配置触发器

    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.优化进程数

    img

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

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

    修改进程数

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

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

    img

    5.缓存调优

    img

    调整配置文件

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

    第7章 zabbix高可用

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

  • 相关阅读:
    Python 列表浅拷贝与深拷贝
    Linux 基本命令-----常用操作分类
    硬盘的分区方式
    github中fork的使用
    大O记号
    python的__file__和__name__变量
    python生成器
    python装饰器
    re模块元字符
    python_数据类型_list
  • 原文地址:https://www.cnblogs.com/1naonao/p/12063317.html
Copyright © 2020-2023  润新知