美文网首页
Zabbix监控工具

Zabbix监控工具

作者: Gq赵 | 来源:发表于2020-04-01 13:14 被阅读0次
    1.什么是监控
    监视,控制
    
    2.为什么要做监控
    教室: 监控学员的学生状况
    超市: 防偷
    马路: 事故(事后追溯)
    监控:  本质上是  行为  
    

    系统为什么要做监控:
    监控是整个运维乃至整个产品生命周期中最重要的一环.
    事前及时预警发现故障,事后提供详实的数据用于追查定位问题。

    3.监控怎么做,比如我要监控内存的使用率,低于百分之20则报警
    1.提取内存的指标
    2.判断比对 ,与管理人员设定的阈值
    3.大于百分之20, 则忽略
    4.小于百分之20, 则触发警告
    
    4.监控有哪些工具来辅助实现
    cacti         用于监控网络设备   交换机 路由器 防火墙    流量为主
    Nagios        用于监控系统   
    Zabbix        用于监控系统    web界面  分布式  报警 自带模板
    open-falcon   小米公司
    Prometheus+grafana
    
    5.如何着手监控
    1.硬件监控      ( 交换机  路由器  防火墙  服务器 )   DELL  IRDAC   ipmi
    2.系统监控      ( CPu  内存  磁盘   IO  )
    3.服务监控      ( nginx  php   mysql   tomcat  ....... )
    4.日志监控      ( ELK 架构    )
    5.web监控     ( 请求延时 响应延时 加载时间  ..... pv uv ip )
    6.业务监控       新增用户  流量  购买量 
    7.分布式监控 多机房监控 proxy
    8.自动化监控 自动的添加主机进行监控
    

    6.单机时代如何监控

    命令监控
    监控层面:

            cpu:    top htop
            内存: free -m     大量消耗内存会占用swap,如果没有swap 则会触oom
            磁盘:   df -h 空间  iotop
            网络:   ifconfig route iftop nethogs nethogs -v 3
            glances 工具
    

    引用shell脚本 + crond 定时任务 (监控当前系统用户登录的数量 超过4 则报警)

    for ip in {7..9}
    do
        users=$(ssh root@172.16.1.$ip "who|wc -l")
        
        if [ $user -ge 3 ];then
            echo "报警通知  172.16.1.$ip"
        fi
    done
    

    --------------------------------引入zabbix监控----------------------------------------

    4.安装zabbix4.0

    1.配置yum仓库

    rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

    2.安装zabbix相关功能组件
    DNS地址变更,网络快可忽略
    vim /etc/sysconfig/network-scripts/ifcfg-eth0
    DNS1="8.8.4.4"
    systemctl restart network
    

    安装php72w 依赖httpd环境,安装php72

    yum -y install php*   --skip-broken 
    

    避免网络延迟导致失败时使用,多次尝试下载

    yum install zabbix-server-mysql zabbix-web-mysql httpd mariadb-server -y
    yum install zabbix-web-mysql -y
    yum install zabbix-web-mysql -y
    yum install zabbix-web-mysql -y
    yum install zabbix-web-mysql -y
    yum install zabbix-web-mysql -y
    

    ————————————————

    3.创建数据库
    # systemctl start mariadb
    # systemctl enable mariadb
    # mysql -uroot -e "create database zabbix character set utf8 collate utf8_bin;"
    # mysql -uroot -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';"
    
    4.导入数据至数据库中
    zcat /usr/share/doc/zabbix-server-mysql-4.0.19/create.sql.gz | mysql -uroot -p123123 zabbix
    
    5.配置zabbix-server指向数据库
    [root@zabbix-server ~]# grep '^D' /etc/zabbix/zabbix_server.conf 
    DBHost=localhost
    DBName=zabbix
    DBUser=zabbix
    DBPassword=zabbix
    
    6.启动 Zabbix server 进程
    # systemctl enable zabbix-server
    # systemctl start zabbix-server
    
    7.配置Zabbix 前端 web页面
    vim /etc/httpd/conf.d/zabbix.conf
        .....
        php_value date.timezone Asia/Shanghai
        ....
    systemctl restart httpd  #重启Httpd
    
    8.通过url访问zabbix-server

    可通过ip地址访问,例:10.0.0.7:10050

        1.根据提示填写信息即可
        2.默认的用户名和密码是
            username: Admin
            password: zabbix
    

    当zabbix初始界面出现错误
    解决步骤:

    vim /etc/php.ini
    
    post_max_size8M16M
    
    max_execution_time30300
    
    max_input_time60300
    
    date.timezone = Asia/Shanghai
    
    systemctl restart httpd.service 
    
    9.登录zabbix后

    1.修改密码
    页面右上角小人头,进行修改
    2.将zabbix修改为中文

    10.如何快速的监控一台主机

    1.需要安装zabb-agent
    2.agent版本有有要求?
    平级
    低于

    3.安装zabbix-agent (没有依赖)

    rpm -Uvh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.14-1.el7.x86_64.rpm
    

    4.配置zabbix-agent,允许172.16.1.71 能够采集172.16.1.7本地的数据

    [root@web01 ~]# grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
    PidFile=/var/run/zabbix/zabbix_agentd.pid
    LogFile=/var/log/zabbix/zabbix_agentd.log
    LogFileSize=0
    Server=172.16.1.71
    Include=/etc/zabbix/zabbix_agentd.d/*.conf
    

    5.启动zabbix-agent

        systemctl enable zabbix-agent
        systemctl start zabbix-agent    
        systemctl restart  zabbix-agent
    

    6.登录zabbix-server web界面

            1.配置-->主机-->添加主机
            2.模板-->关联-->Template Linux OS 
    

    11.zabbix中文乱码

        rpm -ql zabbix-web | grep  /usr/share/zabbix/assets/fonts
        在主机\C\windows下的font中上传
         cd  /usr/share/fonts/dejavu
         mv DejaVuSans.ttf DejaVuSans_bak.ttf
         mv msyh.ttf DejaVuSans.ttf
    

    12.zabbixserver如何监控自己本身?

     rpm -Uvh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.14-1.el7.x86_64.rpm
        systemctl start zabbix-agent
        systemctl enable zabbix-agen
    
    13.zabbix基础架构**
    zabbix-agent
    zabbix-server
    mariadb
    zabbix-web
    
    14.zabbix架构拆分

    j将LAMP架构拆分为LAP+MySQL (拆分数据库到单台主机 )

    172.16.1.71 zabbix-server  zabbix-web
    172.16.1.51 数据库
    

    1.安装数据库

        yum install mariadb-server -y
        systemctl enable mariadb
        systemctl start mariadb
    

    2.创建zabbix库,配置远程授权用户

        create database zabbix character set utf8 collate utf8_bin;
        grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
    

    3.在172.16.1.71上进行如下操作

        [root@zabbix-server ~]# mysqldump -B zabbix >zabbix.sql
        [root@zabbix-server ~]# cat zabbix.sql | mysql -h 172.16.1.51 -uzabbix -pzabbix zabbix
    

    4.修改zabbix-server配置的指向

    [root@zabbix-server ~]# cat /etc/zabbix/zabbix_server.conf
    #DBHost=localhost
    DBHost=172.16.1.51
    [root@zabbix-server ~]# systemctl restart zabbix-server
    

    5.修改zabbix-web配置的指向

    [root@zabbix-server ~]# vim /etc/zabbix/web/zabbix.conf.php
    $DB['SERVER']   = '172.16.1.51';
    
    [root@zabbix-server ~]# systemctl restart httpd
    

    自定义监控项

    15.如何快速监控一个自定义对象,比如监控当前用户登录数量

    Format: UserParameter=<key>,<shell command>
    1.使用shell命令提取当前用户登录的数量 who|wc -l
    2.使用zabbix-agent将shell命令提取的结果封装一个监控项 UserParameter
    3.zabbix-agent自己检查该监控项是否能正确提取到对应的值 zabbix_agentd -p
    4.zabbix-server通过zabbix-get检查zabbix-agent端自定义的监控项是否正常 zabbix_get -s 172.16.1.7 -k user_login
    5.登录zabbix-web页面, 找到对应的主机, 然后添加对应的监控项.
    6.点击检测中--->最新数据--->选择主机--->选择应用级-->检查监控项指标的变化

    cat /etc/zabbix/zabbix_agentd.d/all.conf 
    UserParameter=user_login,who|wc -l
        
    systemctl restart zabbix-agent
    
    zabbix-get   server端检测agent端的取值
    

    server端手动测试取值结果
    server端安装zabbix-get

    rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.14-1.el7.x86_64.rpm
    

    zabbix_get -s 172.16.1.7 -k user_login

    16.如何快速设定一个自定义阈值,比如超过4个人登录则触发报警

    1.基于已创建好的监控项设定阈值
    2.如果达标则触发
    3.如果不达标,继续探测,监视

    17.前端展示报警:

    1.点击右上角小人头-->正在发送消息-->勾选前端信息中



    监控项、触发器、报警通知

    1.详细讲解自定义监控

    1.认识Template OS Linux 模块的所有监控项都是干什么的
    2.自定义一个监控项  ( 创建监控项中的所有选项 )
    
    
    3.历史保留如何计算? ( 数据 )
    days*(items/refresh rate)*24*3600*bytes
    items:监控项数量。
    days:保留历史数据的天数。
    refresh rate:监控项的更新间隔。
    bytes:保留单个值所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节。   
    
    90*(200/60)*24*3600   ~ 24MB    * 200主机 =  5G
    
    
    4.趋势保留如何计算? ( 图形 )
    days*(items/3600)*24*3600*bytes
    items:监控项数量。
    days:保留历史数据的天数。
    bytes:保留单个趋势数据所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节。
    
    365*(200/3600)*24*3600  ~ 2MB     * 200主机  = 500MB
    
    5.事件如何计算?
    days*events*24*3600*bytes
    events:每秒产生的事件数量。假设最糟糕的情况下,每秒产生 1 个事件。
    days:保留历史数据的天数。
    bytes:保留单个趋势数据所需的字节数,取决于数据库引擎,通常为 ~170 字节。
    
    365*1*24*3600    ~ 30MB     *200主机  = 6G 
    
    https://www.zabbix.com/documentation/4.0/zh/manual/installation/requirements
    
    
    6.自定义监控TCP 11种状态?
        netstat -an | grep -c ESTABLISHED
        netstat -an | grep -c LISTEN
        netstat -an | grep -c SYN_SENT
        netstat -an | grep -c TIME_WAIT
    
        1.使用shell命令提取状态
        2.通过zabbix-agent将提取的状态封装为一个又一个的监控项目
        3.检查封装后的监控项是否取值正确
        4.创建一个模板
        5.基于模板创建监控项
        6.将主机关联该模板,完成监控
        7.检查监控后的数据
    
    UserParameter=tcp[*], netstat -lntp | grep -c "$1"
    
    7.如何让其他机器也能使用该模板?
        1.推送*.conf文件,这样其他主机也能提取到key对应的值
        2.将主机关联对应的模板
    

    2.自定义触发器
    https://www.cnblogs.com/kingle-study/p/10172413.html

    1.监控内存的百分比,   如果 低于20%  则触发报警
        1.通过shell命令提取内存的百分比
        2.设定触发器
    

    多条件触发器
    2.监控内存, 以及swap 当内存低于百分之20,并且swap使用率超过百分之1% 则触发报警
    内存取的是剩余 20
    swap取的是已使用 1

    变量
    监控项
    key  | 键值 
    

    and #并且 多个监控项,同时成立
    or #或者 多个监控项,一个成立

    last() #比对最新的值
    avg() #平均值 网络的流量 avg(5m) 进程 负载 IO
    diff() #比对上一次文件的内容
    nodata() #收不到数据进行报警nodata(5m) 探测主机存活
    test.nodata(5m) = 1 这个条件为真 获取不到数据报警
    (5m) #表示最近5分钟得到值
    (#5) #表示最近5次得到的值

    3.自定义图形
    1.基于监控项, 创建图形, 可以在模板上创建,这个所有的主机都应用成功
    2.基于图形创建, 聚合图形, 将多个小图片整合至一个大图片上 ( 检测中--->聚合图形 )
    3.基于聚合图形创建幻灯片, 可以让多张聚合图形进行轮播 (大屏显示器 --> )

    扩展: 如果希望出更好看,更炫的图,需要使用grafana   
        注意: grafana只是一个出图,所有的数据都是zabbix提供   (  皮肤 )
    
    
        1.安装grafana
            # yum localinstall grafana-6.4.4-1.x86_64.rpm 
        
        
        2.启动grafana  默认监听在3000端口
            # systemctl start grafana-server
    
        3.安装插件, 集成zabbix
            # grafana-cli plugins install alexanderzobnin-zabbix-app
            # systemctl restart grafana-server
    
        4.启用已安装好的zabbix插件,这样就完成了集成
        5.配置zabbix数据源
        
        6.grafana  变量   ()
    
        1.实现一个单条件触发器
        2.实现一个多条件触发器
        3.基于监控项
            1.图形
            2.聚合图形
            3.幻灯片
        4.grafana安装
    

    3.自定义报警

    基于监控项-->触发器-->执行动作--> ( 通知  |  执行命令  
    1.怎么发        
    2.发什么
    3.发给谁
    

    邮箱报警
    1.修改报警媒介
    smtp.qq.com
    端口:465
    HELo: qq.com
    SMTP电邮: 发件人邮箱 *****qq.com
    安全连接: SSL
    打开验证对端,验证主机
    认证:
    用户:发件人邮箱 *****qq.com
    密码:邮箱授权码
    2.收件人设置:
    右上角小人头,报警媒介填写接收人邮箱

        1.启用动作
        2.动作中将所有的报警消息通过介质发送给administrator用户
        3.配置介质--> 新建一个发邮件的邮箱介质
        4.配置administrator用户, 填写收件人邮件
    

    https://www.zabbix.com/documentation/3.4/zh/manual/appendix/macros/supported_by_location

    修改报警的消息

    报警主机:{HOST.NAME1}
    报警服务: {ITEM.NAME1}
    报警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
    报警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
    严重级别: {TRIGGER.SEVERITY}

    3.配置故障恢复消息,消息内容如下:
    恢复主机:{HOST.NAME1}
    恢复服务: {ITEM.NAME1}
    恢复Key1:{ITEM.KEY1}:{ITEM.VALUE1}
    恢复Key2: {ITEM.KEY2}:{ITEM.VALUE2}

    {ALERT.SENDTO} #发送的用户
    {ALERT.SUBJECT} #发送的主题
    {ALERT.MESSAGE} #发送的内容

    邮件报警
    微信报警
    安装python-pip 模块
         yum  install python-pip -y
         pip install requests
         cd /usr/lib/zabbix/alertscipts
         rz weixin.py chown +x weixin.py
         ./weixin.py  WeiXinID   Subject Messages
    切记一定要删除,否则导致权限问题。
            rm -f /tmp/weixin.log
            
    操作流程:单击管理---> 报警媒介类型--> 创建媒介类型      
    

    企业微信地址,个人可注册
    https://work.weixin.qq.com/

    登录企业微信

    1. 企业 -> 微工作台里可以直接微信关注,无需要下载企业微信
    2. 通讯录里的账号在发微信脚本中要用到
    3. 应用与小程序可创建应用

    发微信的python脚本/usr/local/zabbix/alertscripts/weixin.py
    [root@zabbix-server alertscripts]# cat weixin.py

    !/usr/bin/env python

    -- coding: utf-8 --

    author: bgx

    date: 2018

    comment: zabbix接入微信报警脚本

    import requests
    import sys
    import os
    import json
    import logging

    logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
    datefmt = '%a, %d %b %Y %H:%M:%S',
    filename = os.path.join('/tmp','weixin.log'),
    filemode = 'a')

    corpid='xxx'
    appsecret='xxx'
    agentid=xxx

    获取accesstoken

    token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
    req=requests.get(token_url)
    accesstoken=req.json()['access_token']

    发送消息

    msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

    touser=sys.argv[1]
    subject=sys.argv[2]

    toparty='3|4|5|6'

    message=sys.argv[2] + "\n\n" +sys.argv[3]

    params={
    "touser": touser,

    "toparty": toparty,

        "msgtype": "text",
        "agentid": agentid,
        "text": {
                "content": message
        },
        "safe":0
    

    }

    req=requests.post(msgsend_url, data=json.dumps(params))

    logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)

    测试脚本
    /usr/local/zabbix/alertscripts/weixin.py 'abc' 'weixin_subject' 'weixin_message'

    钉钉报警

    钉钉企业的地址
    https://oa.dingtalk.com/

    钉钉企业告警的注意事项
    1.通讯录管理里的userid发钉钉需要用到
    2.工作台里可自建应用
    3.微应用管理可以管理应用
    4.开发账号管理可以查看密码信息

    发送钉钉告警的脚本/usr/local/zabbix/alertscripts/zabbix_dingding.py

    !/usr/bin/python

    -- coding: utf-8 --

    curl 'https://oapi.dingtalk.com/gettoken?corpid=xxx&corpsecret=xxx'

    import json,urllib2,sys

    appkey = 'dingbb89fne7xgn86dri'
    appsecret = 'c81LS_3h7pDRB6ul94tzXfyfcwmWaoy68yr-PGn7eG6MVE8RGXqADmw2DYQFsOsX'
    agentid = '682880648'
    touser = sys.argv[1]
    content = sys.argv[2]

    tockenurl = 'https://oapi.dingtalk.com/gettoken?corpid=' + appkey + "&corpsecret=" + appsecret
    tockenresponse = urllib2.urlopen(tockenurl)
    tockenresult = json.loads(tockenresponse.read().decode('utf-8'))
    tocken = tockenresult['access_token']

    sendurl = 'https://oapi.dingtalk.com/message/send?access_token=' + tocken
    headers = {
    'Content-Type':'application/json'
    }
    main_content = {
    "touser": touser,
    "toparty": "",
    "agentid": agentid,
    "msgtype": "text",
    "text": {
    "content": content
    }
    }
    main_content = json.dumps(main_content)
    req = urllib2.Request(sendurl,headers=headers)
    response = urllib2.urlopen(req, main_content.encode('utf8'))
    print(response.read().decode('utf-8'))

    手动发钉钉告警测试
    chmod +x /usr/local/zabbix/alertscripts/zabbix_dingding.py
    /usr/local/zabbix/alertscripts/dingding.py manager8495 '监控测试'

    {ALERT.SENDTO} #发送的用户
    {ALERT.SUBJECT} #发送的主题
    {ALERT.MESSAGE} #发送的内容

    4.告警升级 | 告警抑制

    1.远程执行命令
    2.告警抑制是怎么回事
    

    1个故障 出现 发邮件给运维 邮件
    超过1分钟没有被处理 发邮件给经理 微信
    超过2分钟没有被处理 发邮件给总监 钉钉

    7.自定义模板
    8.自定义监控Nginx PHP


    自定义监控项模板,及服务的状态监控

    1.模板的重要
    1.手动添加监控比较麻烦,监控项 -> 图形 -> 触发器。
    问题:
    1.例如: 100台服务器需要检查81端口
    2.例如: 100台服务器81改成82
    解决:
    使用模板可以解决以上问题, 只需要修改一下模板,然后所有的主机都生效

    2.两种模板
    系统自带模板
    自定义模板

    自定义模板的使用
    1.创建模板,模板得属于某个主机组(Templates)
    2.在模板中创建监控项目、触发器、创建图形
    3.新增监控主机时添加对应的模板
    4.更改模板的监控项,所以使用模板的主机都会自动变更
    

    建议: 监控的时候都使用模板, 因为模板添加啥的都方便,修改也比较方便

    1.zabbix监控windows

    环境:
    1.zabbix server的ip:10.0.0.71
    2.被监控windows的ip:10.0.0.1

    1.下载Zabbix Agent

    https://www.zabbix.com/downloads/4.0.14/zabbix_agents-4.0.14-win-amd64.zip

    2.Windows安装zabbix agent
    编辑配置文件D:\zabbix_agents-4.0.14-win-amd64\conf\zabbix_agentd.conf
    Server=10.0.0.71

    3.运行cmd,将zabbix命令注册为服务(使用管理员) services.msc
    "d:\zabbix_agents-4.0.14-win-amd64\bin\zabbix_agentd.exe" --config d:\zabbix_agents-4.0.14-win-amd64\conf\zabbix_agentd.conf --install

    4.cmd运行
    查看监听netstat -an|find "10050"


    5.zabbix_get获取windows信息
    zabbix_get -s xxx -k system.uname
    zabbix_get -s xxx -k vm.memory.size[free]
    zabbix_get -s xxx -k vfs.fs.size[C:,pfree]

    6.windows防火墙放开10050端口
    1.防火墙关闭的可以跳过这步
    2.高级设置->入站规则->新建规则->端口->10050->允许连接->所有

    7.zabbix页面上添加windows主机
    1.直接应用windows模板
    2.验证Windows监控是否正常

    编写一个最简单的bat脚本D:\zabbix_agents-4.0.14-win-amd64\echo.bat
    @echo off
    echo "100"

    zabbix配置添加D:\zabbix_agents-4.0.14-win-amd64\conf\zabbix_agentd.conf
    UserParameter=echo.test,D:\zabbix_agents-4.0.14-win-amd64\echo.bat


    2.zabbix监控Nginx

    1.监控Nginx什么内容
        监控Nginx⑦中状态
    
    2.怎么监控
        1.开启Nginx stub status 模块
        2.使用curl命令获取stub_status的数据
        3.将获取数据的方法封装为一个又一个的监控项
    
    3.实施监控
        1.开启nginx stub_status状态
        
    
    
        2.编写脚本,提取nginx status的指标
        [root@web01 scripts]# cat nginx_status.sh 
        Nginx_status_file=/tmp/nginx_status.tmp
        Nginx_status_name=status.oldxu.com
        Nginx_status_path=/nginx_status
        curl -sH host:${Nginx_status_name} http://127.0.0.1:80${Nginx_status_path} > ${Nginx_status_file}
    
        case $1 in
            active)
                echo $[ $(awk 'NR==1 {print $NF}' ${Nginx_status_file}) -1 ]
                ;;
            accepts)
                echo $[ $(awk 'NR==3 {print $1}' ${Nginx_status_file}) - 1 ]
                ;;
            handled)
                echo $[ $(awk 'NR==3 {print $2}' ${Nginx_status_file}) - 1 ]
                ;;
            requests)
                echo $[ $(awk 'NR==3 {print $3}' ${Nginx_status_file}) - 1 ]
                ;;
            reading)
                awk 'NR==4 {print $2}' ${Nginx_status_file}
                ;;
            writing)
                awk 'NR==4 {print $4}' ${Nginx_status_file}
                ;;
            waiting)
                awk 'NR==4 {print $NF}' ${Nginx_status_file}
                ;;
            *)
                echo "USAGE: $0 [active|accepts|handled|requests|reading|writing|waiting]"
                ;;
        esac
    
    
        3.配置zabbix-agent, 添加自定义监控项
        [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx.conf 
    

    UserParameter=nginx_status[*], /bin/bash /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.sh "$1"

        4.重启zabbix-agent
        
        
        5.zabbix-server使用zabbix-get获取监控项的值
        [root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k nginx_status[active]
        10
        [root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k nginx_status[requests]
        20
        
        6.登录zabbix-web
            1.创建模板
            2.创建监控项
            3.创建图形
            4.创建触发器
            5.关联对应主机
            
    
    1.nginx的状态监控
    2.nginx日志监控 { 200 300 301 304 404 403 500 401 ....  这些状态出现的次数}
    
    
        1.提取日志
        awk '{print $9}' /var/log/nginx/access.log|grep -c "302"
        
        2.自定义监控项,支持传参
        [root@web01 ~]# cat  /etc/zabbix/zabbix_agentd.d/nginx.conf 
        UserParameter=nginx_status_code[*], awk '{print $9}' /var/log/nginx/access.log|grep -c "$1"
    
        [root@web01 ~]# systemctl restart zabbix-agent
        
    
        3.server使用zabbix-get获取
        [root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k nginx_status_code[200]
        10000
        [root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k nginx_status_code[302]
        327556
    
    
        4.登录zabbix-web
            1.创建模板
            2.创建监控项
            3.创建图形
            4.创建触发器
            5.关联对应主机
    

    ================================================================================
    监控php
    1.监控php端口
    2.监控php进程 master worker
    3.监控php状态

    实施:
        1.如何开启php状态
        2.获取php状态中重要的指标
        3.编写脚本支持传参
    
    
    
    1.开启php的状态模块
    [root@web01 ~]# cat /etc/php-fpm.d/www.conf
    ....
    pm.status_path = /fpm_status
    ....
    
    
    2.配置nginx,将http请求转发给php处理
    [root@web01 conf.d]# cat status.oldxu.com.conf 
    server {
        listen 80;
        server_name status.oldxu.com;
        location /fpm_status {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
    
    
    3.php-fpm状态指标含义
    [root@web01 conf.d]# curl -H Host:status.oldxu.com http://127.0.0.1/fpm_status
    pool:                 www
    process manager:      dynamic
    start time:           20/Nov/2019:15:15:19 +0800
    start since:          200
    accepted conn:        22    #当前池接受的请求数
    listen queue:         0     #请求队列,如果这个值不为0,那么需要增加FPM的进程数量
    max listen queue:     0     #请求队列最高的数量
    listen queue len:     128   #socket等待队列长度
    idle processes:       5     #空闲进程数量
    active processes:     1     #活跃进程数量
    total processes:      6     #总进程数量
    max active processes: 1     #最大的活跃进程数量(FPM启动开始计算)
    max children reached: 0     #超过最大进程数的峰值的次数,如果不为0,需要调整进程的最大活跃进程数量
    
    
    4.编写取值脚本
    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/scripts/fpm_status.sh 
    #!/usr/bin/bash
    
    fpm_status_file=/tmp/fpm_status.tmp
    fpm_status_name=status.oldxu.com
    fpm_status_path=/fpm_status
    
    curl -sH host:${fpm_status_name} http://127.0.0.1:80${fpm_status_path} > ${fpm_status_file}
    
    case $1 in
        accepted_conn)
            awk '/accepted conn:/{print $NF}' ${fpm_status_file}
            ;;
        listen_queue)
            awk '/^listen queue:/{print $NF}' ${fpm_status_file}
            ;;
        max_listen_queue)
            awk '/^max listen queue:/{print $NF}' ${fpm_status_file}
            ;;
        active_processes)
            awk '/^active processes:/{print $NF}' ${fpm_status_file}
            ;;
        idle_processes)
            awk '/^idle processes:/{print $NF}' ${fpm_status_file}
            ;;
        total_processes)
            awk '/^total processes:/{print $NF}' ${fpm_status_file}
            ;;
        max_active_processes)
            awk '/^max active processes:/{print $NF}' ${fpm_status_file}
            ;;
        max_children_reached)
            awk '/^max children reached:/{print $NF}' ${fpm_status_file}
            ;;
        *)
            echo "USAGE: $0 [accepted_conn|listen_queue|max_listen_queue|active_processes|idle_processes|total_processes|max_active_processes|max_children_reached]"
            ;;
    esac
    
        
    
    5.自定义监控项,支持传参
    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.conf
    

    UserParameter=fpm.status[*], /bin/bash /etc/zabbix/zabbix_agentd.d/scripts/fpm_status.sh "$1"

    [root@web01 ~]# systemctl restart zabbix-agent
        
    6.server使用zabbix-get获取
    [root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k fpm.status[accepted_conn]
    2031
    [root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k fpm.status[max_active_processes]
    50
    
    
    7.登录zabbix-web
        1.创建模板
        2.创建监控项
        3.创建图形
        4.创建触发器
        5.关联对应主机
    

    ==============================================================================
    Mysql的基础监控
    1.进程存活
    2.检测端口

    Mysql的高级监控说明
    Mysql提供show global status可以实现对Mysql的高级监控
    高级监控包含监控Mysql连接数,增删改查数,流量等

    其他的监控mysql的方式
    天兔 (文档)
    percona (视频)

    监控命令详解mysql -uroot -poldxu.com -e 'show global status'
    Threads_connected:连接数
    Com_select:查询总量
    Com_insert:插入总量
    Com_update:更新总量
    Com_delete:删除总量
    Bytes_received: 流入总流量
    Bytes_sent:流出总流量
    Slow_queries:慢查询总量

    1.编写取值脚本check_mysql.sh
    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh

    !/usr/bin/bash

    port=1 key=2
    mysql -uroot -poldxu.com -P{port} -e "show global status" |grep "{key}\s" |awk '{print $2}'

    2.测试监控Shell脚本
    [root@web01 ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh 3306 Threads_connected

    3.Zabbix自定义监控项
    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql.conf
    UserParameter=mysql.status[*], /bin/bash /etc/zabbix/zabbix_agentd.d/scripts/mysql_status.sh "1" "2" 2>/dev/null

    重启agent
    

    4测试能否获取到值
    zabbix_get -s xxx -k mysql.status[3306,Threads_connected]
    zabbix_get -s xxx -k mysql.status[3306,Com_insert]

    5.使用Template DB MySQL模板监控Mysql 利用自带的模板改一改
    mysql.status[3306,Threads_connected]
    mysql.status[3306,Com_select]
    mysql.status[3306,Bytes_received]
    mysql.status[3306,Bytes_sent]

    写一个测试的程序测一下
    [root@web01 ~]# cat mysql.sh
    for i in {1..1000}
    do
    mysql -uroot -poldxu.com -h 127.0.0.1 -e "create database IF NOT EXISTS db;
    use db;
    DROP TABLE IF EXISTS test{i}; create table test{i}(id int);
    insert into db.test{i} values (123456); select * from db.test{i};
    delete from test${i} where id=123456;"
    done
    ==============================================================================
    Mysql主从监控的必要性
    1.如果发生主从同步异常,业务会出问题
    2.如果从库是用来备份的,会导致数据丢失

    Mysql主从同步监控说明
    1.从库运行show slave status\G可以来查看主从同步信息
    Slave IO Running 可以观察从库的IO进程是否正常,IO进程用于同步二进制日志
    Slave SQL Running 可以观察从库的SQL进程是否正常,SQL进程用于执行二进制日志
    Seconds Behind Master代表主从同步的延时时间

    1.监控Mysql主从的Shell脚本mysql_slave_status.sh
    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh

    !/usr/bin/bash

    port=1 key=2
    mysql -uroot -poldxu.com -P{port} -e "show slave status\G"|grep "{key}:"|awk '{print $2}' 2>/dev/null

    2.Shell脚本测试
    [root@web01 ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh 3306 Slave_SQL_Running
    Yes
    [root@web01 ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh 3306 Slave_IO_Running
    Yes
    [root@web01 ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh 3306 Seconds_Behind_Master
    0

    3.Zabbix自定义Key监控Mysql主从
    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql.conf
    UserParameter=mysql.slave.status[*], /bin/bash /etc/zabbix/zabbix_agentd.d/scripts/mysql_slave_status.sh "1" "2" 2>/dev/null

    重启Agent
    

    4.创建监控模板Template Mysql Slave Status
    mysql.slave.status[3306,Slave_IO_Running]
    mysql.slave.status[3306,Slave_SQL_Running]
    mysql.slave.status[3306,Seconds_Behind_Master]

    5.定义解决器来判断主从同步是否异常

    1.触发器一: 两个状态都要为Yes 
    {Template MySQL Slave Status:mysql.slave.status[3306,Slave_IO_Running].str(Yes)}=0 or {Template MySQL Slave Status:mysql.slave.status[3306,Slave_SQL_Running].str(Yes)}=0
    
    2.触发器二: 延时不能超过100
    {Template MySQL Slave Status:mysql.slave.status[3306,Seconds_Behind_Master].last()}>100
    

    网络发现、主动注册

    1.zabbix的snmp监控? ( 不重要 )
    2.web监控
    pv uv ip
    请求延时
    响应延时
    加载时间
    网站慢则报警

    4.自动化监控:
    自动发现,网络发现
    主动注册
    主动模式与被动模式区别?
    主动模式与被动模式效果展示?

    https://blog.csdn.net/qq_28657577/article/details/82834442

    snmp基础介绍

    snmp全称是简单网络管理协议
    
    为什么要用?
        路由器交换机无法安装agent程序,但是都提供snmp服务端, 我们可以使用zabbix的snmp方式监控snmp服务端的数据
    

    snmp基础概念:
    OID:
    内存的大小:.1.3.6.1.2.1.25.2.2.0
    内存的剩余:.1.3.6.1.2.1.25.2.2.1
    任何一个指标在snmp中都有一个唯一的值进行表示,那么oid排列顺序是以树状信息排列。

    MIB库:统计所有的old库(国际标准)
        获取内存信息,hrMemorySize.0
    
    可以理解MIB是域名,比较好记忆。  OID是IP地址,不太好记忆。
    
    snmp版本:
        v1:不支持加密,任何人都可以取值, 不安全
        v2:简单加密版,通过口令才可以取值  通过 community设定口令
        v3:复杂加密,采集效率比较低
        目前使用的最多的还是v2版本
    

    snmp服务端安装

    1.安装
    [root@web02 ~]# yum install net-snmp -y

    2.配置
    [root@web02 ~]# vim /etc/snmp/snmpd.conf
    #public是默认密码,建议修改
    com2sec notConfigUser default oldxu

    #限制丛树杈哪个地方开始取值,如果需要监控的信息,设置.1从顶点开始
    view    systemview    included   .1
    

    3.启动
    [root@web02 ~]# systemctl enable snmpd.service
    [root@web02 ~]# systemctl start snmpd

    4.客户端安装命令测试取值
    # yum install net-snmp-utils -y
    # snmpwalk -v2c -c oldxu 172.16.1.7 .1.3.6.1.2.1.25.2.2.0 #OID方式
    # snmpwalk -v2c -c oldxu 172.16.1.7 hrMemorySize.0 #MIB方式

    5.在zabbix-web界面直接添加即可

    总结:
    1.snmp介绍
    OID
    MIB
    版本
    2.snmp服务安装配置启动测试

    1.zabbix基础架构
    2.zabbix内部资源

    2.web监控
    pv uv ip
    1.awk
    2.腾讯分析 百度统计 google分析
    3.piwiki ---> 改名matomo
    4.自建流量分析平台

    1.进入腾讯移动分析平台 html应用 别人家
    2.给一份js的代码
    3.将js的代码加入网站
    4.等待一天 就能查看到指标

    2.自己家 开源matomo
    php+mysql 方式开发 LNMP环境 + matomo代码 = 统计网站

    1.准备好一个blog站点  +  qq主题
    2.安装matomo程序
    3.matomo添加我们的网站,会生成一个js的代码
    4.登录blog 将js代码添加进主题
    5.用户模拟访问测试
    6.登录matomo查看pv 情况
    
    
    注意: 在内网使用,一定都需要做域名解析
            在外网使用,无需考虑
    
    
    请求延时
    响应延时
    加载时间
    网站慢则报警
    
    
    实际案例:  监控一个网站:  zabibx网站速度
        1.访问zabbix
        2.登录zabbix      regex:name="csrf-token" content="([0-9a-z]{16})"            
        3.检查zabbix
        4.退出zabbix
        5.检查是否退出zabbix成功
    
    
    监控宝   压测宝   
    

    1.snmp监控
    2.腾讯移动分析公网--
    3.matomo内网分析
    4.web检测-->wordpress

    4.自动化监控:
    自动发现,网络发现
    主动注册

    主动模式与被动模式区别?
    主动模式与被动模式效果展示?
    

    1.自动发现:
    规则 + 动作 -->
    添加主机
    添加主机组
    添加模板

    2.自动发现弊端:
    1.扫描慢
    2.容易漏
    3.对server压力较大
    4.无法根据主机名称关联对应模板


    1.主动注册:
    agent主动上报数据,而不是server询问
    1.agent需要配置 ServerActive HostName 配置为主动模式

    主动注册2个场景:
    1.根据主机名称,关联不同的模板?
    web linux tcp nginx php mysql-slave
    db linux tcp mysql

    2.根据主机的元数据,关联不同的模板?
        linux
        windows
    

    主动模式和被动模式的区别?

    网络发现  ---> 被动模式
    主动注册  ---> 主动模式
    
    
    主动还是被动说的都是Agent程序.
    
    被动:
        形象理解:   领导找你要数据
        Server-->不断轮询Agent获取数据
        
    主动:
        形象理解:   主动向领导汇报数据
        Agent自动上报数据给Server
    

    zabbix监控项全部都是被动模式:
    针对监控项目被动模式: 获取100个值 需要server轮询获取Agent100次
    针对监控项目主动模式: 获取100个监控项的值 Server--->发给Agent Agent一次上报所有数据

    主动模式: 自动注册 zabbix监控客户端(主动式)
    被动模式: 网络发现 zabbix监控客户端(被动式)

    主动模式与被动模式 选择哪个?
    1.如果主机超过300+以上,建议主动
    2.如果zabbix队列比较繁忙 建议主动模式


    分布式监控、优化

    20.zabbix分布式监控,模拟多机房实现监控?

    1.有多机房时,需要用到proxy
        1.网络不通
        2.网络延迟
    2.当监控的主机较多时,也可以用proxy来缓解压力
    

    1.安装proxy
    [root@web01 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

    1.安装proxy 数据库

    yum install zabbix-proxy-mysql mariadb-server -y

    systemctl start mariadb

    MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
    MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix_proxy@localhost identified by 'zabbix_proxy';

    zcat /usr/share/doc/zabbix-proxy-mysql-4.0.14/schema.sql.gz | mysql -uzabbix_proxy -pzabbix_proxy zabbix_proxy

    2.配置zabbix-proxy
    [root@web02 ~]# grep "^[a-Z]" /etc/zabbix/zabbix_proxy.conf
    ....
    Server=10.0.0.71
    Hostname=sh_proxy

    DBHost=localhost
    DBName=zabbix_proxy
    DBUser=zabbix_proxy
    DBPassword=zabbix_proxy
    ....

    3.启动proxy

    systemctl enable zabbix-proxy.service

    systemctl start zabbix-proxy

    4.配置zabbix-agent 不通区域的agent指向不同的proxy

    10.0.0.71   <--- 10.0.0.7       <---172.16.1.51
    10.0.0.71   <--- 10.0.0.8       <---172.16.1.41
    

    5.登录zabbix-web
    1.管理-->agent代理程序

    注意: zabbix-server 与 zabbix-proxy 需要版本一致

    ProxyLocalBuffer Proxy将在本地保留数据N小时,即使数据已与server同步。(默认不保留立即发送)
    ProxyOfflineBuffer 如果无法连接Zabbix server,proxy将默认保留数据1小时.

    zabbix监控jvm? tomcat
    zabbix ---> jmx ---> java(zabbix-agent)

    1.Zabbix-Server找Zabbix-Java-Gateway获取Java数据
    2.Zabbix-Java-Gateway找Java程序获取数据
    3.Java程序返回数据给Zabbix-Java-Gateway
    4.Zabbix-Java-Gateway返回数据给Zabbix-Server
    5.Zabbix-Server进行数据展示

    配置JMX监控的步骤:
    1.安装Zabbix-Java-Gateway。
    2.配置zabbix_java_gateway.conf参数。
    3.配置zabbix-server.conf参数。-->连接java-gateway
    4.Tomcat应用开启JMX协议。
    5.ZabbixWeb配置JMX监控的Java应用。

    环境:
    zabbix-server 10.0.0.71 172.16.1.71
    zabbix-gateway 172.16.1.7
    tomcat 172.16.1.8

    1.安装Zabbix-Java-Gateway
    [root@web01 ~]# yum install zabbix-java-gateway -y

    2.启动Zabbix-Java-Gateway
    [root@web01 ~]# systemctl restart zabbix-java-gateway
    [root@web01 ~]# systemctl enable zabbix-java-gateway.service

    3.配置zabbix-server指向zabbix-java-gateway
    [root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
    JavaGateway=172.16.1.7
    JavaGatewayPort=10052
    StartJavaPollers=5

    [root@zabbix-server ~]# systemctl restart zabbix-server

    4.启动tomcat程序,开启jmx协议
    [root@web02 soft]# vim /soft/tomcat/bin/catalina.sh #头部添加即可
    CATALINA_OPTS="$CATALINA_OPTS
    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=12345
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Djava.rmi.server.hostname=172.16.1.8"

    5.登录zabbix-web添加一台jmx的主机

    zabbix Api ( 开发 )

    1.在使用zabbix-api之前,先获取一个token
    curl -s -X POST -H 'Content-Type:application/json' -d '
    {
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
    "user": "Admin",
    "password": "123456"
    },
    "id": 1
    }' http://zabbix.oldxu.com/zabbix/api_jsonrpc.php

    {"jsonrpc":"2.0","result":"6b322c293dc557631c8ffdb32b1c6b5f","id":1}

    curl -s -X POST -H 'Content-Type:application/json' -d '
    {
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
    "output": [
    "hostid",
    "host"
    ],
    "selectInterfaces": [
    "interfaceid",
    "ip"
    ]
    },
    "id": 2,
    "auth": "6b322c293dc557631c8ffdb32b1c6b5f"
    }' http://zabbix.oldxu.com/zabbix/api_jsonrpc.php

    2.使用token验证身份, 并禁用某一台主机

    curl -s -X POST -H 'Content-Type:application/json' -d '
    {
    "jsonrpc": "2.0",
    "method": "host.update",
    "params": {
    "hostid": "10277",
    "status": 1
    },
    "auth": "6b322c293dc557631c8ffdb32b1c6b5f",
    "id": 1
    }' http://zabbix.oldxu.com/zabbix/api_jsonrpc.php

    4.使用API创建主机

    curl -s -X POST -H 'Content-Type:application/json' -d '
    {
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
    "host": "10.0.0.1",
    "interfaces": [
    {
    "type": 1,
    "main": 1,
    "useip": 1,
    "ip": "10.0.0.1",
    "dns": "",
    "port": "10050"
    }
    ],
    "groups": [
    {
    "groupid": "20"
    }
    ],
    "templates": [
    {
    "templateid": "10001"
    }
    ]
    },
    "auth": "4c831e081ff77510f9662bb9de0f9144",
    "id": 1
    }' http://zabbix.oldxu.com/zabbix/api_jsonrpc.php

    1. Zabbix属于写多读少的业务, 所以需要针对zabbix的MySQL进行拆分.
      1.LAMP -->拆分成LAP + MySQL
      2.MySQL尽量使用SSD固态盘 (静态盘会有寻道的过程,浪费时间)

    2. 将Zabbix-Agent被动监控模式, 调整为主动监控模式.

    3. 使用zabbix-proxy分布式监控, 在大规模监控时用于缓解Zabbix-Server压力
      用proxy代理服务器可以缓解server的压力

    4. 去掉无用监控项, 增加监控项的取值间隔, 减少历史数据保存周期(由housekeeper进程定时清理)
      一些自带监控项很多我们用不到,可把无用监控项取消。

    5)针对于Zabbix-server进程调优, 谁忙就加大谁的进程数量, 具体取决实际情况, 不是越大越好
    StartPollersUnreachable=1
    调整工作进程数。

    6)针对于Zabbix-server缓存调优, 谁使用的缓存多,就加大它的缓存值(zabbix cache usage图表)
    调整zabbix-server.conf的主配置文件,CacheSize相关大小。

    1. 关注管理->队列, 是否有被延迟执行的监控项

    zabbix单机监控两千台机器是瓶颈,分布式同样最多2000台。

    Btree算法结构的构件过程
    首先是把数据从小到大进行排序,然后将数据有顺序的存储到数据页上,生成left-node 叶子节点
    通过叶子节点的范围(最小值到下个叶子节点的最小值)和每个叶子节点的指针生成枝节点
    最后通过枝节点的范围(最小值到下分枝节点的最小值)和枝节点的每个指针生成root根节点
    还有我们用的是数据库5.7版本,它对索引的查询范围作了优化,怎么优化的呢就是对叶子节点和枝节点加入了双向指针
    加入双向指针的作用是减少了索引IO的次数
    减少了随机IO的数量
    减少了IO的量级

    锁的隔离级别
    脏读 读未提交的 比如A发生数据变化,但是没有提交,B事务来了读A修改的这些数据,就是脏读
    RU: 读未提交

    RC: 读已提交
    RR: 可重复读
    SR: 串行化

    主从复制
    两台以上的数据库实例,通过二进制日志,实现数据复制的关系。
    实现过程:
    1.两台以上数据库实例,设置不同的server_id ,server_uuid
    2.主库开启二进制日志,binlog
    3.用mysqldump备份主库的数据,并且记录位置点,。把数据恢复到从库。
    4.从库通知主库,告诉从库主库相关的信息。
    5.从库开启slave复制线程

    原理:
    包括三个线程,4个文件 主:binlogdump mysql_bin
    从: SQL、IO relay_info master_info relay_log
    从库执行change master to ,获取连接主库的信息(IP、port、用户、密码、binlog起点)
    信息被存到master.info文件中。

    1. 从库:start slave 命令, 启动IO,SQL线程.
    2. IO开始工作,拿着,master.info中的连接信息,连接主库,验证通过,主库开启dump线程
    3. IO按照master.info中记录的binlog位置点信息,向主库的DUMP线程请求新的日志
    4. 主库dump线程返回新的日志event,返回给从库.
    5. 从库IO线程接收binlog,并重新更新master.info信息
    6. 从库IO将接收到的binlog记录到relay-log中
    7. 从库SQL线程读取 relay.info信息,获取到上次执行到的位置点,继续向后回放最新relaylog日志,并重新更新relay.info信息

    相关文章

      网友评论

          本文标题:Zabbix监控工具

          本文链接:https://www.haomeiwen.com/subject/qsbouhtx.html