zoukankan      html  css  js  c++  java
  • Zabbix监控服务

     

     

    第五章 Zabbix 监控基础架构

    zabbix-agent(数据采集)—>zabbix-server(数据分析|报警)—> 数据库(数据存储)<—zabbix web(数据展示)

    第六章 zabbix 快速监控主机

    1.安装zabbix-agent

    [root@web01 ~]# rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm
    

    2.配置zabbix-agent

    [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=10.0.1.61
    ServerActive=127.0.0.1
    Hostname=Zabbix server
    Include=/etc/zabbix/zabbix_agentd.d/*.conf
    

    3.启动zabbix-agent并检查

    [root@web01 ~]# systemctl start zabbix-agent.service 
    [root@web01 ~]# systemctl enable zabbix-agent.service
    [root@web01 ~]# netstat -lntup|grep 10050
    tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      10351/zabbix_agentd 
    tcp6       0      0 :::10050                :::*                    LISTEN      10351/zabbix_agentd 
    

    4.zabbix-web界面,添加主机

    第七章 自定义监控主机小试身手

    1.监控需求

    监控TCP11种状态集

    2.命令行实现

    [root@web01 ~]# netstat -ant|grep -c TIME_WAIT
    55
    [root@web01 ~]# netstat -ant|grep -c LISTEN
    12
    

    3.编写zabbix监控文件(传参形式)

    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp_status.conf 
    UserParameter=tcp_state[*],netstat -ant|grep -c $1
    root@web01 ~]# systemctl restart zabbix-agent.service
    

    4.server端进行测试

    [root@m01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
    [root@m01 ~]# yum install zabbix-get.x86_64 -y 
    [root@m01 ~]# zabbix_get -s 10.0.1.7 -k tcp_state[TIME_WAIT]
    51
    [root@m01 ~]# zabbix_get -s 10.0.1.7 -k tcp_state[LISTEN]   
    12
    

    5.web端添加

    6.克隆监控项

    由于TCP有多种状态,需要添加多个监控项,我们可以使用克隆快速达到创建的效果

    其他的状态依次添加即可

    7.创建图形

    8.查看图形

    9.设置触发器

     

     

     

     

     

     

     

     

     

    第八章 邮件报警

    1.定义发件人

     

     

     

     

    2.定义收件人

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    3.自定义报警内容过

    定制报警内容:
    https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location
    参考博客

    https://www.cnblogs.com/bixiaoyu/p/7302541.html
    

    发送警告

    报警邮件标题可以使用默认信息,亦可使用如下中文报警内容
    名称:Action-Email
    默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
    告警主机:{HOSTNAME1}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    告警等级:{TRIGGER.SEVERITY}
    告警信息: {TRIGGER.NAME}
    告警项目:{TRIGGER.KEY1}
    问题详情:{ITEM.NAME}:{ITEM.VALUE}
    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
    事件ID:{EVENT.ID} 
    

    恢复警告

    恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
    恢复信息:
    告警主机:{HOSTNAME1}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    告警等级:{TRIGGER.SEVERITY}
    告警信息: {TRIGGER.NAME}
    告警项目:{TRIGGER.KEY1}
    问题详情:{ITEM.NAME}:{ITEM.VALUE}
    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
    事件ID:{EVENT.ID}
    

    第九章 微信报警

    1.查看配置文件里的脚本目录路径

    [root@m01 ~]# grep "^AlertScriptsPath" /etc/zabbix/zabbix_server.conf
    AlertScriptsPath=/usr/lib/zabbix/alertscripts
    

    2.将weixin.py放在zabbix特定目录

    [root@m01 /usr/lib/zabbix/alertscripts]# ll
    总用量 4
    -rwxr-xr-x 1 root root 1344 8月   7 21:58 weixin.py
    

    3.配置发信人

    4.配置收信人

    5.登陆企业微信公众号添加账户

    https://work.weixin.qq.com/wework_admin/loginpage_wx
    1.登陆后在企业号上新建应用


    2.上传logo,填写应用名称 ,应用介绍等


    3.查看启动应用
    同时会生成应用的AgentId以及Secret,这个在后面步骤会有用


    4.接口调用测试
    http://work.weixin.qq.com/api/devtools/devtool.php


    这里的corpid为公司ID


    Corpsecret就是刚才创建应用生成的Secrt,确认没问题填写进去然后下一步
    如果没问题会显示200状态码

    6.添加成员

    7.关注公众号

    8.查看自己的账号

    9.修改脚本里的信息

    [root@m01 /usr/lib/zabbix/alertscripts]# cat weixin.py 
    ..............
    corpid='微信企业号corpid'
    appsecret='应用的Secret'
    agentid=应用的id
    ..............
    

    10.发信测试

    [root@m01 /usr/lib/zabbix/alertscripts]# python  weixin.py  你的账号  '发信测试'  ‘微信测试消息’
    

    11.微信号上查看

    12.发送到整个微信组

    虽然我们实现了发送到单个用户的功能,但是如果我们的用户比较多,这样还是麻烦的,不过我们可以发送到整个组,其实脚本里已经预留好了配置,只不过默认注释了。
    将脚本修改为以下内容,注释掉用户,打开组设置

    #!/usr/bin/env python
    
    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='wwd26fdfb9940e7efa'
    appsecret='Btg89FnZfMu0k7l6b4iagmAR5Z9TCgKknYbx-SMQvmg'
    agentid=1000005
    
    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]
    toparty=sys.argv[1]
    subject=sys.argv[2]
    message=sys.argv[2] + "
    
    " +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:' + toparty + ';;subject:' + subject + ';;message:' + message)                                                                              
    

    12.随机发送到指定用户玩笑脚本

    #!/bin/bash 
    num=$(echo $(($RANDOM%28+1)))
    name=$(sed -n "${num}p" name.txt)
    ok_boy=$(grep -v "${name}" name.txt)
    
    for ok in ${ok_boy}
    do
      python  weixin.py ${ok}  "$1"  "$2"
    done
    

    第十章 自定义模版

    1.监控TCP11种状态

    编写zabbix配置文件

    [root@web01 /etc/zabbix/zabbix_agentd.d]# cat zbx_tcp.conf 
    UserParameter=ESTABLISHED,netstat -ant|grep  -c 'ESTABLISHED'
    UserParameter=SYN_SENT,netstat -ant|grep  -c 'SYN_SENT'
    UserParameter=SYN_RECV,netstat -ant|grep  -c 'SYN_RECV'
    UserParameter=FIN_WAIT1,netstat -ant|grep  -c 'FIN_WAIT1'
    UserParameter=FIN_WAIT2,netstat -ant|grep  -c 'FIN_WAIT2'
    UserParameter=TIME_WAIT,netstat -ant|grep  -c 'TIME_WAIT'
    UserParameter=CLOSE,netstat -ant|grep  -c 'CLOSE'
    UserParameter=CLOSE_WAIT,netstat -ant|grep  -c 'CLOSE_WAIT'
    UserParameter=LAST_ACK,netstat -ant|grep  -c 'LAST_ACK'
    UserParameter=LISTEN,netstat -ant|grep  -c 'LISTEN'
    UserParameter=CLOSING,netstat -ant|grep  -c 'CLOSING'
    

    2.重启zabbix-agent

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

    3.测试监控项

    使用zabbix-get命令测试

    [root@m01 ~]# yum install zabbix-get.x86_64 -y
    [root@m01 ~]# zabbix_get -s 10.0.1.7 -k ESTABLISHED
    2
    [root@m01 ~]# zabbix_get -s 10.0.1.7 -k LISTEN
    12
    

    3.导入模版文件

    4.主机关联模版文件

    5.查看最新数据

    6.查看图形

    第x章 自定义模版监控nginx状态

    1.开启监控页面并访问测试

    [root@web01 ~]# cat /etc/nginx/conf.d/status.conf 
    server {
       listen 80;
       server_name localhost;
       location /nginx_status {
           stub_status on;
           access_log off;
       }
    }
    
    [root@web01 ~]# curl 127.0.0.1/nginx_status/
    Active connections: 1 
    server accepts handled requests
     6 6 6 
    Reading: 0 Writing: 1 Waiting: 0 
    

    2.准备nginx监控状态脚本

    [root@web01 /etc/zabbix/zabbix_agentd.d]# cat nginx_monitor.sh 
    #!/bin/bash
    NGINX_COMMAND=$1
    CACHEFILE="/tmp/nginx_status.txt"
    CMD="/usr/bin/curl http://127.0.0.1/nginx_status/"
    if [ ! -f $CACHEFILE  ];then
       $CMD >$CACHEFILE 2>/dev/null
    fi
    # Check and run the script
    TIMEFLM=`stat -c %Y $CACHEFILE`
    TIMENOW=`date +%s`
    
    if [ `expr $TIMENOW - $TIMEFLM` -gt 60 ]; then
        rm -f $CACHEFILE
    fi
    if [ ! -f $CACHEFILE  ];then
       $CMD >$CACHEFILE 2>/dev/null
    fi
    
    nginx_active(){
             grep 'Active' $CACHEFILE| awk '{print $NF}'
             exit 0;
    }
    nginx_reading(){
             grep 'Reading' $CACHEFILE| awk '{print $2}'
             exit 0;
    }
    nginx_writing(){
             grep 'Writing' $CACHEFILE | awk '{print $4}'
             exit 0;
    }
    nginx_waiting(){
             grep 'Waiting' $CACHEFILE| awk '{print $6}'
             exit 0;
    }
    nginx_accepts(){
             awk NR==3 $CACHEFILE| awk '{print $1}' 
             exit 0;
    }
    nginx_handled(){
             awk NR==3 $CACHEFILE| awk '{print $2}' 
             exit 0;
    }
    nginx_requests(){
             awk NR==3 $CACHEFILE| awk '{print $3}'
             exit 0;
    }
    
    case $NGINX_COMMAND in
        active)
            nginx_active;
            ;;
        reading)
            nginx_reading;
            ;;
        writing)
            nginx_writing;
            ;;
        waiting)
            nginx_waiting;
            ;;
        accepts)
            nginx_accepts;
            ;;
        handled)
            nginx_handled;
            ;;
        requests)
            nginx_requests;
            ;;
        *)
    echo 'Invalid credentials';
    exit 2;
    esac
    

    3.编写zabbix监控配置文件

    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf
    UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_monitor.sh $1
    
    [root@web01 ~]# systemctl restart zabbix-agent.service
    

    4.使用zabbix_get取值

    [root@m01 ~]# zabbix_get -s 10.0.1.7 -k nginx_status[accepts]
    7
    

    5.导入模版

    6.链接模版

    7.查看数据

    第x章 自定义模版监控php状态

    1.开启监控页面

    [root@web01 ~]# tail -1 /etc/php-fpm.d/www.conf    
    pm.status_path = /php_status
    
    [root@web01 ~]# cat /etc/nginx/conf.d/status.conf    
    server {
       listen 80;
       server_name localhost;
       location /nginx_status {
           stub_status on;
           access_log off;
       }
    
       location /php_status {
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME html$fastcgi_script_name;
           include fastcgi_params;
       }
    }
    
    [root@web01 ~]# nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    [root@web01 ~]# systemctl restart nginx.service php-fpm.service
    

    2.访问测试

    [root@web01 ~]# curl 127.0.0.1/php_status
    pool:                 www
    process manager:      dynamic
    start time:           08/Aug/2019:22:31:27 +0800
    start since:          37
    accepted conn:        1
    listen queue:         0
    max listen queue:     0
    listen queue len:     128
    idle processes:       4
    active processes:     1
    total processes:      5
    max active processes: 1
    max children reached: 0
    slow requests:        0
    

    3.准备访问脚本

    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.sh 
    #!/bin/bash
    ##################################
    # Zabbix monitoring script
    #
    # php-fpm:
    #  - anything available via FPM status page
    #
    ##################################
    # Contact:
    #  vincent.viallet@gmail.com
    ##################################
    # ChangeLog:
    #  20100922     VV      initial creation
    ##################################
    
    # Zabbix requested parameter
    ZBX_REQ_DATA="$1"
    ZBX_REQ_DATA_URL="$2"
    
    # Nginx defaults
    NGINX_STATUS_DEFAULT_URL="http://localhost/fpm/status"
    WGET_BIN="/usr/bin/wget"
    
    #
    # Error handling:
    #  - need to be displayable in Zabbix (avoid NOT_SUPPORTED)
    #  - items need to be of type "float" (allow negative + float)
    #
    ERROR_NO_ACCESS_FILE="-0.91"
    ERROR_NO_ACCESS="-0.92"
    ERROR_WRONG_PARAM="-0.93"
    ERROR_DATA="-0.94" # either can not connect /   bad host / bad port
    
    # Handle host and port if non-default
    if [ ! -z "$ZBX_REQ_DATA_URL" ]; then
      URL="$ZBX_REQ_DATA_URL"
    else
      URL="$NGINX_STATUS_DEFAULT_URL"
    fi
    
    # save the nginx stats in a variable for future parsing
    NGINX_STATS=$($WGET_BIN -q $URL -O - 2>/dev/null)
    
    # error during retrieve
    if [ $? -ne 0 -o -z "$NGINX_STATS" ]; then
      echo $ERROR_DATA
      exit 1
    fi
    
    # 
    # Extract data from nginx stats
    #
    #RESULT=$(echo "$NGINX_STATS" | awk 'print $0;match($0, "^'"$ZBX_REQ_DATA"':[[:space:]]+(.*)", a) { print a[1] }')
    #RESULT=$(echo "$NGINX_STATS" | grep "$ZBX_REQ_DATA" | awk -F : '{print $2}')
    RESULT=$(echo "$NGINX_STATS" | awk -F : "{if($1=="$ZBX_REQ_DATA") print $2}")
    if [ $? -ne 0 -o -z "$RESULT" ]; then
        echo $ERROR_WRONG_PARAM
        exit 1
    fi
    
    echo $RESULT
    
    exit 0
    
    [root@web01 ~]# bash /etc/zabbix/zabbix_agentd.d/fpm.sh "total processes" http://127.0.0.1/php_status
    5
    

    4.准备zabbix配置文件

    [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.conf    
    UserParameter=php-fpm[*],/etc/zabbix/zabbix_agentd.d/fpm.sh "$1" "$2"
    [root@web01 ~]# systemctl restart zabbix-agent.service
    

    4.使用zabbix_get取值

    [root@m01 ~]# zabbix_get -s 10.0.1.7 -k php-fpm["total processes",http://127.0.0.1/php_status]
    5
    

    5.导入模版

    导入之后需要修改一下模版里的宏配置

    第x章 WEB监控

    需求,监控页面状态码

    第x章 故障记录

    故障1

    故障现象:
    提示zabbix-server is not running

    报错日志:

     34983:20190807:202215.171 database is down: reconnecting in 10 seconds
     34983:20190807:202225.172 [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost' (using password: NO)
    

    故障原因:
    zabbix-server的配置文件里配有配置数据库密码
    故障解决:
    添加正确的数据库账号密码信息

    [root@m01 ~]# grep "^DB" /etc/zabbix/zabbix_server.conf     
    DBHost=localhost
    DBName=zabbix
    DBUser=zabbix
    DBPassword=zabbix
    

    故障2

    故障现象:微信报警失败
    报错日志:

    [root@m01 ~]# tail -f /var/log/zabbix/zabbix_server.log 
    Problem name: TIME_WAIT过多
    Host: web01
    Severity: Average
    
    Original problem ID: 51
    '": Traceback (most recent call last):
      File "/usr/lib/zabbix/alertscripts/weixin.py", line 7, in <module>
        import requests
    ImportError: No module named requests
    

    问题原因:
    缺少模块 requests

    问题解决:
    安装缺失的依赖包

    [root@m01 ~]# yum install python-pip
    [root@m01 ~]# pip install --upgrade pip
    [root@m01 ~]# pip install requests
    

    故障3

    故障现象:
    在server端使用zabbix_get命令测试键值命令时提示警告

    [root@m01 ~]# zabbix_get -s 10.0.1.7 -k ESTABLISHED  
    (Not all processes could be identified, non-owned process info
     will not be shown, you would have to be root to see it all.)
    2
    

    问题原因:
    zabbix_agent是以普通用户zabbix运行的,而普通用户执行netstat -antp时会有警告,网上查找发现只要不是用p参数就可以以普通用户运行
    解决方案:
    监控脚本里的命令修改为netstat -ant

     
  • 相关阅读:
    97. Interleaving String
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    94. Binary Tree Inorder Traversal
    odoo many2many字段 指定打开的form视图
    docker sentry 配置文件位置
    postgres 计算时差
    postgres 字符操作补位,字符切割
    postgres判断字符串是否为时间,数字
    odoo fields_view_get
  • 原文地址:https://www.cnblogs.com/linux985/p/11700317.html
Copyright © 2011-2022 走看看