zoukankan      html  css  js  c++  java
  • Zabbix入门

    1.Zabbix简介

    组件说明

    基于web界面 采用B/S架构

    提供分布式系统监控和网络监视功能

    企业级开源解决方案

    核心组件:

    • Zabbix Server
    • Zabbix Agent

    进程构成

    Zabbix安装完成后会产生五个程序:
    zabbix_agentd、zabbix_get、zabbix_sender、zabbix_server、zabbix_proxy

    
    zabbix_agentd   #客户端守护进程,收集客户端数据;例如:CPU负载、内存、硬盘等使用情况
    
    zabbix_get		#zabbix工具,单独使用的命令,通常用于排错
    
    zabbix_sender	#在脚本完成后主动提交数据,发送数据给server或proxy
    
    zabbix_server	#zabbix服务端守护进程,所有的数据都是被提交或主动提交到zabbix_server端
    
    zabbix_proxy	#代理守护进程,功能类似为server,唯一不同的是他只是一个中转站
    zabbix_java_gaetway   #java网关,只用于java方面,需要另外安装
    

    硬件需求

    3.2构建zabbix监控服务器

    1.初始化系统设置

    # 关闭防火墙
    # 关闭selinux
    [root@201 ~]# systemctl stop firewalld
    [root@201 ~]# systemctl disable firewalld
    [root@201 ~]# getenforce 
    Disabled
    

    2.安装LAMP环境,采用mariadb数据库

    wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
    yum clean all
    yum makecache
    yum -y install mariadb mariadb-server httpd php php-mysql 
    
    systemctl enable httpd
    systemctl restart httpd
    systemctl enable mariadb
    systemctl restart mariadb
    # 初始化mariadb
    mysql_secure_installation
    

    3.安装zabbix程序

    cat <<EOF > /etc/yum.repos.d/zabbix.repo
    [zabbix]
    name=Zabbix Official Repository - $basearch
    baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
     
    [zabbix-non-supported]
    name=Zabbix Official Repository non-supported - $basearch
    baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
    gpgcheck=1
    EOF
    # 添加gpgkey
    curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591 
    -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
     
    curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX 
    -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
    
    
    yum -y install zabbix-server-mysql zabbix-web-mysql  zabbix-agent
    
    # 初始化数据库
    mysql -u root -p
    CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
    grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';  
    
    # 写入数据库
    cd /usr/share/doc/zabbix-server-mysql-3.2.1
    zcat create.sql.gz | mysql -uroot -p  zabbix 
    
    # 启动zabbix服务
    vim /etc/zabbix/zabbix_server.conf
    	DBHost=127.0.0.1
    	DBName=zabbix
    	DBUser=zabbix
    	DBPassword=zabbix
    	
    systemctl start zabbix-server
    systemctl enable zabbix-server
    
    # 配置zabbix前端php
    vim /etc/httpd/conf.d/zabbix.conf 
        php_value date.timezone Asia/Shanghai # 取消注释,修改为亚洲
        
    # 配置时间同步,生产环境中应有一台ntp服务器,集群内的时间同步到ntp服务器上
    yum -y install ntpdate 
    ntpdate cn.pool.ntp.org
    
    # 配置httpd,重启httpd,访问网页安装
    vim /etc/httpd/conf/httpd/conf
    	DocumentRoot "/usr/share/zabbix/"
    

    访问zabbix服务器的IP

    新建简单的监控主机

    [root@201 /usr/share/zabbix]# systemctl start zabbix-agent
    [root@201 /usr/share/zabbix]# systemctl enable zabbix-agent
    

    中文情况下,会出现字符乱码情况

    解决办法:

    # 在windows下 Win+R 快捷键 --> fonts --> 拷贝宋体到服务器
    # 的/usr/share/zabbix/assets/fonts 目录下
    cd /usr/share/zabbix/assets/fonts
    mv simsun.ttc song.ttf
    chmod a+x song.ttf 
    
    # 编辑zabbix php页面的配置文件,将graphfont改为song
    vim /usr/share/zabbix/include/defines.inc.php 
    define('ZBX_GRAPH_FONT_NAME','song'); 
    

    验证:

    3.3添加监控主机----自动发现

    自动发现的应用场景:
    企业批量添加主机时,传统的添加耗时耗力

    自动发现规则有主机发起,zabbix server开启发现进程,定时扫描局域网中IP服务、设备,实现自动发现主机、将主机添加到主机组、加载模板、创建图像等。

    创建自动发现步骤

    配置 ---> 动作 ---> 创建动作 ---> 自动发现 ---> 创建发现规则

    添加客户端验证自动发现规则是否生效

    yum -y install zabbix-agent
    
    vim /etc/zabbix/zabbix_agentd.conf 
    Server=10.0.0.201		#zabbix-server服务端IP
    ServerActive=10.0.0.20	#zabbix-server服务端IP
    Hostname=10.0.0.20		#本机名字随意
    
    # 开启服务
    service zabbix-agent start
    
    # 开启httpd服务 
    service httpd start
    

    3.4Nginx并发监控

    # 安装nginx
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
    # 利用nginx自带的状态统计功能
    `--with-http_stub_status_module`
    # 编辑nginx主配置文件,增加状态统计页面
    location /nginx_status{
          stub_status on;
           access_log ogg;
    }
    

    1.编写nginx监控脚本,在被监控端

    #!/bin/bash
    
    HOST="127.0.0.1"
    PORT="80"
    
    # 检测nginx进程
    function ping {
        /sbin/pidof nginx | wc -l
    }
    # 检测nginx性能
    function active {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
    }
    function reading {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
    }
    function writing {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
    }
    function waiting {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
    }
    function accepts {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null|awk NR==3 | awk '{print $1}'
    }
    function handled {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null|awk NR==3 | awk '{print $2}'
    }
    function requests {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null|awk NR==3 | awk '{print $3}'
    }
    # 执行function
    $1
    

    2.将自定义的userparameter加入配置文件,然后重启agent

    vim /etc/zabbix/zabbix_agentd.conf
    UserParameter=nginx.status[*],/server/scripts/nginx-status.sh $1
    
    systemctl restart zabbix-agent
    
    

    3.server端安装zabbix-get,获取数据

    # zabbix_get -s 10.0.0.202 -k 'nginx.status[accepts]'
    63
    # zabbix_get -s 10.0.0.202 -k 'nginx.status[ping]'
    1
    

    4.导入监控模板,在主机中添加模板

    3.5钉钉告警

    1.钉钉群组内添加自定义机器人

    复制生成的webhook

    https://oapi.dingtalk.com/robot/send?access_token=cdf07f8b3cb0daa2ee7e9a1cd5dc8487a0233cebe41367c0ebf6821fa2f2c066

    2.编写py脚本,修改webhook为自己生成的

    #!/usr/bin/env python
    #coding:utf-8
    #日志文件:/var/log/dingding.log
    import requests,json,sys,os,datetime
    webhook="https://oapi.dingtalk.com/robot/send?access_token=cdf07f8b3cb0daa2ee7e9a1cd5dc8487a0233cebe41367c0ebf6821fa2f2c066"      
    user=sys.argv[1]
    text=sys.argv[3]
    data={
        "msgtype": "text",
        "text": {
            "content": text
        },
        "at": {
            "atMobiles": [
                user
            ],
            "isAtAll": False
        }
    }
    headers = {'Content-Type': 'application/json'}
    x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
    if os.path.exists("/var/log/dingding.log"):
        f=open("/var/log/dingding.log","a+")
    else:
        f=open("/var/log/dingding.log","w+")
    f.write("
    "+"--"*30)
    if x.json()["errcode"] == 0:
        f.write("
    "+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"
    "+str(text))
        f.close()
    else:
        f.write("
    "+str(datetime.datetime.now()) + "    " + str(user) + "    " + "发送失败" + "
    " + str(text))
        f.close()
    

    3.添加执行权限,测试:

    chmod +x token.py
    ./token.py test test "告警"
    

    注意事项

    该脚本需要python2.6.6以上版本,且具有requests模块

    否则会报错:

    [root@201 ~]# ./token.py 1 2 告警
    Traceback (most recent call last):
      File "./token.py", line 4, in <module>
        import requests,json,sys,os,datetime
    ImportError: No module named requests
    

    解决办法:

    yum -y install epel-release
    yum -y install python-pip
    pip install requests
    

    4.将脚本放到指定目录下

    # cat /etc/zabbix/zabbix_server.conf
    AlertScriptsPath=/usr/lib/zabbix/alertscripts
    
    [root@201 /usr/lib/zabbix/alertscripts]# mv /root/token.py .
    

    5.zabbix web界面配置

    创建报警媒介

    参数为:

    {ALERT.SENDTO}
    {ALERT.SUBJECT}
    {ALERT.MESSAGE}
    

    用户添加报警媒介,点击admin用户


    收件人为钉钉群内成员的手机号

    添加动作:

    错误报警信息参数

    # 标题:
    故障{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}
    
    

    模拟nginx主机宕机,查看钉钉消息:

    查看日志:

    ------------------------------------------------------------
    2020-09-13 09:22:21.747544    18365707729    发送成功
    告警主机:10.0.0.202
    告警时间:2020.09.13 09:22:18
    告警等级:High
    告警信息: nginx was down!
    告警项目:nginx.status[ping]
    问题详情:nginx status PING:Down (0)
    当前状态:PROBLEM:Down (0)
    事件 ID:110
    ------------------------------------------------------------
    
    作者:ccku
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
  • 相关阅读:
    zookeeper
    消息中间件介绍
    Java实现动态代理的两种方式
    深入理解Java内存模型
    消息中间件(一)MQ详解及四大MQ比较
    synchronized关键字详解及分析锁升级过程
    JDK1.6的Synchronized底层优化(偏向锁、轻量级锁)
    分布式通信-tcp/ip socket
    技术点
    大众点评 cat
  • 原文地址:https://www.cnblogs.com/ccku/p/13957931.html
Copyright © 2011-2022 走看看