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

    目录

    一、监控知识概述

    1.1 为什么要使用监控

    • 1)对系统不间断实时监控;
    • 2)实时反馈系统当前状态;
    • 3)保证服务可靠性安全性;
    • 4)保证业务持续稳定运行;

    1.2 如何进行监控,比如监控磁盘使用率

    • 1)如何查看磁盘使用率 df -h;
    • 2)监控磁盘的那些指标 block、 inode;
    • 3)如何获取具体的信息 df -h|awk '///{print(NF-1)}';
    • 4)获取的数值到达多少报警 80%;

    1.3 流行的监控工具

    • 1)Zabbix
    • 2)Lepus(天兔)数据库监控系统
    • 3)Open-Falcon 小米
    • 4)Prometheus(普罗米修斯, Docker、 K8s)

    1.4 如果到一家新公司,如何入手监控

    • 1)硬件监控 路由器、交换机、防火墙
    • 2)系统监控 CPU、内存、磁盘、网络、进程、 TCP
    • 3)服务监控 nginx、 php、 tomcat、 redis、 memcache、 mysql
    • 4)WEB 监控 请求时间、响应时间、加载时间
    • 5)日志监控 ELk(收集、存储、分析、展示)
    • 6)安全监控 Firewalld、 WAF(Nginx+lua)、安全宝、牛盾云、安全狗
    • 7)网络监控 smokeping 多机房
    • 8)业务监控 活动引入多少流量、产生多少注册量、带来多大价值

    二、单机时代如何进行监控

    2.1 CPU 监控

    命令: w、 top、 htop、 glances

    %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    us 用户态: 跟用户的操作有关 35%
    sy 系统态: 跟内核的处理有关 60%
    id CPU 空闲:
    

    2.2 内存监控

    命令: free

    $ free -h
                  total        used        free      shared  buff/cache   available
    Mem:           977M        105M        724M        6.6M        148M        729M
    Swap:          1.0G          0B        1.0G
    

    内存的计算方式,使用如下python脚本:

    #!/usr/bin/env python
    # _*_ coding:UTF-8 _*_
    # 收集程序所占用的物理内存大小,占所有物理内存的比例
    # OS: Centos 6.7  Python: 2.7.6
    # __author__:Dahlhin
    
    import sys
    import os
    from subprocess import Popen,PIPE
    
    def get_pid(program):
        '获取目标程序的PID列表'
        p = Popen(['pidof',program],stdout=PIPE,stderr=PIPE)
        pids,stderrput = p.communicate()
    #     pids = p.stdout.read()  #这种方法也是可以的
    #     这里也可以对stderrput来进行判断
        if pids:
            return pids.split()
        else:
            raise ValueError
    
    def mem_calc(pids):
        '计算PIDs占用的内存大小'
        mem_total = 0
        for pid in pids:
            os.chdir('/proc/%s' % pid)
            with open('status') as fd:
                for line in fd:
                    if line.startswith('VmRSS'):
                        mem = line.strip().split()[1]
                        mem_total += int(mem)
                        break
        return mem_total
    
    
    def mem_percent(mem):
        '计算程序内存占用物理内存的百分比'
        with open('/proc/meminfo') as fd:
            for line in fd:
                if line.startswith('MemTotal'):
                    total = line.strip().split()[1]
            percent = (float(mem)/int(total)) * 100
        return percent
    
    
    def main():
        try:
            program = sys.argv[1]
            pids = get_pid(program)
        except IndexError as e:
            sys.exit('%s need a Program name ' % __file__)
        except ValueError as e:
            sys.exit('%s not a Process Name or not Start' % program )
        mem_total = mem_calc(pids)
        percent = mem_percent(mem_total)
        return program,mem_total,percent
    
    if __name__ == '__main__':
        program,mem_total,mem_percent=main()
        print('进程名称:%s
    物理内存为:%s
    百分比为:%.2f%%'% (program,mem_total,mem_percent))
    

    使用方法:

    $ python2.7 test.py mysqld
    进程名称:mysqld
    物理内存为:86664
    百分比为:1.06%
    

    参考网址:https://www.cnblogs.com/dachenzi/p/6812317.html

    2.3 磁盘监控

    命令: df、 iotop

    Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
    sda 0.80 25.32 33.36 221034 291193
    设备名 每秒传输次数 每秒读大小 每秒写大小 读的总大小 写的总大小
    

    2.4 网络监控

    命令: ifconfig、 route、 glances、 iftop、 nethogs、 netstat

    单位换算
    Mbps 100Mbps/8
    MB 12MB
    iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。
    TX:发送流量、 RX:接收流量、 TOTAL:总流量
    #查看 TCP11 中状态
    netstat -an|grep ESTABLISHED
    netstat -rn # 查看路由信息
    netstat -lntup
    

    三、zabbix监控快速安装

    参考zabbix官方手册

    3.1配置zabbix仓库

    由于下载的其中指向的是zabbix官网,可能会下载失败,所以需要手动更换为阿里云的zabbix源!

    $ vim /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=0
    
    [zabbix-non-supported]
    name=Zabbix Official Repository non-supported - $basearch
    baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/
    enabled=1
    gpgcheck=0
    

    3.2 安装zabbix所需软件包

    $ yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent 
    

    3.3 安装并初始化数据库

    $ yum install -y mariadb-server
    $ systemctl start mariadb && systemctl enable mariadb
    $ mysql
    MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
    MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
    MariaDB [(none)]> flush privileges;
    MariaDB [(none)]> quit;
    

    使用 MySQL 来导入 Zabbix server 的初始数据库 schema 和数据,

    $ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
    

    3.4 为zabbix server配置数据库

    $ vim /etc/zabbix/zabbix_server.conf
    DBHost=localhost
    DBName=zabbix
    DBUser=zabbix
    DBPassword=zabbix
    $ systemctl start zabbix-server && systemctl enable zabbix-server
    $ ss -lnt | grep 10051     # 确认端口已经在监听
    

    3.5 ZABBIX 前端配置

    $ vim  /etc/httpd/conf.d/zabbix.conf
    # 修改为当前的时区
            php_value date.timezone Asia/Shanghai
    $ systemctl start httpd && systemctl enable httpd
    $ ss -lnt | grep 80
    

    zabbix前端可以在浏览器中通过http://IP/zabbix/进行访问,默认的用户名/密码:Admin/zabbix

    20201008153147
    20201008153202
    20201008153241
    20201008153301
    20201008153315
    20201008153326
    20201008153338

    配置zabbix-web中文显示:

    20201008154446

    $ yum -y install wqy-microhei-fonts
    $ cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
    # 修复中文乱码
    

    四、快速监控主机

    安装zabbix-agent,需注意:zabbix-server版本可以高于zabbix-agent版本,但是zabbix-agent版本不可以高于zabbix-server版本!建议版本选择一致!

    zabbix-server主机执行zabbix_server -V命令可以查看zabbix-server版本信息!

    4.1 安装、配置zabbix-agent

    $ rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.25-1.el7.x86_64.rpm
    $ vim /etc/zabbix/zabbix_agentd.conf 
    Server=192.168.88.1    # 修改为zabbix-server地址
    $ ss -lnt | grep 10050    # 确认端口正在监听的状态
    

    4.2 zabbix-server测试获取zabbix-agent端数据

    $ yum -y install zabbix-get.x86_64 
    $ zabbix_get -s 192.168.88.2 -p 10050 -k "system.uptime"
    508
    # -s:指定zabbix agent端的IP地址;
    # -p:指定zabbix agent端的监听端口;
    # -k:指定监控项;
    # 如果有输出结果,则表示zabbix server可以获取zabbix agent的数据,配置成功;
    

    4.3 zabbix-web页面,添加主机

    20201008155955
    20201008160047
    20201008160720
    20201008160913

    4.4 zabbix-agent端监控失败,排查思路

    • 检查IP地址和端口;
    • 检查firewalld和SELinux;
    • 检查zabbix-agent端配置文件;
    • 重新加载zabbix-agent配置文件;
    • 查看zabbix-agent日志信息;

    五、zabbix监控基础架构

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

    架构图:

    20201008161637

    六、zabbix架构拆分数据库

    6.1 准备一台mysql数据库(192.168.88.2),安装数据库(保证数据库版本一致);

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

    6.2 创建zabbix数据库,网络授权;

    $ mysql
    MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
    MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
    MariaDB [(none)]> flush privileges;
    MariaDB [(none)]> quit;
    

    6.3 在旧的数据库上备份zabbix库,然后恢复到新的数据库;

    $ mysqldump -uroot --databases zabbix --single-transaction > `date +%F%H`-zabbix-sql
    $ cat 2020-10-0816-zabbix-sql | mysql -h 192.168.88.2 -uzabbix -pzabbix zabbix
    # 通过远程的方式导入到192.168.88.2的zabbix数据库中
    

    6.4 修改zabbix-server配置文件指向数据库的IP地址

    $ vim /etc/zabbix/zabbix_server.conf
    DBHost=192.168.88.2       # 只修改数据库连接地址
    $ systemctl restart zabbix-server
    

    6.5 修改zabbix-web配置文件指向数据库的IP地址

    $ vim /etc/zabbix/web/zabbix.conf.php
    $DB['SERVER']   = '192.168.88.2';        # 修改数据库地址
    $ systemctl restart httpd
    

    该方式不适合在生产环境使用,只适合在测试环境使用!因为会丢数据,主要的就是实现的思路!

    七、自定义监控

    7.1 自定义监控项

    ① 监控系统的登录状态,如果登录的xshell超过两个用户则触发报警
    ② 在zabbix-agent端自定义监控项,使用UserParameter
    $ vim /etc/zabbix/zabbix_agentd.conf
    # 添加以下内容
    UserParameter=login.number,uptime | awk '{print $4}'
    
    ③ 重启zabbix-agent
    $ systemctl restart zabbix-agent
    
    ④ 检查zabbix-agent端上自定义监控项是否生效
    $ zabbix_agentd -p      # 获取zabbix-agent端所有的监控项内容
    $ zabbix_agentd -p | grep login.number
    login.number                                  [t|1]
    
    ⑤ zabbix-server测试是否可以获取到zabbix-agent端上的自定义监控项的值
    $ yum -y install zabbix-get.x86_64         # 安装zabbix-get软件包
    $ zabbix_get -s 192.168.88.2 -k login.number
    1
    
    ⑥ web界面添加监控项

    20201008170004
    20201008170015
    20201008170451
    20201008170549

    7.2 自定义触发器——>动作——>通知

    ① 自定义触发器

    20201008170955
    20201008171006
    20201008171234
    手动测试,触发故障,使zabbix面板报警!
    20201008171518

    ② 启用动作

    20201008172229

    ③ 创建报警媒介

    20201008172425

    20201008172730

    ④ 定义收件人信息

    20201008172833
    20201008172859

    ⑤ 验证邮箱收到的消息

    20201008173622

    7.3 值映射

    创建一个监控22端口的监控项!

    20201008204135

    20201008204146
    20201008204335
    20201008204548
    20201008204748

    效果已经产生!

    7.4 监控TCP11种状态

    ① zabbix-agent编写监控文件(传参的形式)
    $ vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf
    UserParameter=tcp_state[*],netstat -ant|grep -wc $1
    $ systemctl restart zabbix-agent
    
    ② zabbix-server测试是否可以获取到值
    $ zabbix_get -s 192.168.88.2 -k tcp_state[LISTEN]
    6
    $ zabbix_get -s 192.168.88.2 -k tcp_state[TIME_WAIT]
    44
    
    ③ zabbix-web添加模板、创建监控项

    20201008210411
    20201008210454
    20201008210505
    20201008210513
    20201008210603
    11种状态,也可挨个添加,也可选择克隆!自行完成!

    20201008211824

    ④ zabbix-agent使用该模板

    20201008211950
    20201008212016
    20201008212118

    7.5 自定义触发器多条件

    监控系统的内存可用百分比,如果低于25%,并且使用swap超过5%,则触发报警!

    ① zabbix-agent 编写监控文件监控内存使用百分比
    $ vim /etc/zabbix/zabbix_agentd.d/mem_ava.conf 
    UserParameter=mem.ava,free -m | awk '/^Mem/{print $NF/$2*100}'
    
    ② 重启zabbix-agent,agent与server测试是否可以获取到值
    $ systemctl restart zabbix-agent
    $ zabbix_agentd -p | grep mem.ava        # agent测试取值
    mem.ava                                       [t|75.1279]
    $ zabbix_get -s 192.168.88.2 -k mem.ava    # server测试取值
    75.2303
    
    ③ zabbix-web添加监控项

    20201008213553
    20201008213641

    ④ 基于该监控项创建触发器

    20201008214101
    20201008214110
    20201008214834

    使用dd if=/dev/zero of=/dev/null bs=500M count=1024压低内存,测试报警!

    20201008215114

    ⑤ zabbix-agent编写监控文件监控swap分区使用百分比
    $ vim /etc/zabbix/zabbix_agentd.d/mem_ava.conf 
    # 末尾添加
    UserParameter=swap.use,free -m | awk '/Swap/{print $3/$2*100}'
    $ systemctl restart zabbix-agent
    $ zabbix_agentd -p | grep swap.use        # agent测试取值
    0                                      [t|75.1279]
    $ zabbix_get -s 192.168.88.2 -k swap.use    # server测试取值
    0
    
    ⑥ zabbix-web添加监控项

    20201008220741
    20201008220812

    ⑦ 配置多条件触发器

    20201008221128
    20201008221744

    使用dd if=/dev/zero of=/dev/null bs=1024M count=1024压低内存,测试报警!

    20201008222028
    20201008222035

    邮件内容,信息不是太明确,所以进行以下修改!

    ⑧ 常用触发器表达式
    and             # 并且
    or              # 或者
    last()          # 比对最新的值      
    avg()           # 平均值
    diff()          # 比对上一次文件内容
    nodata()        # 收不到数据进行报警
    
    (5m)            # 表示最近5分钟得到值
    (#5)            # 表示最近5次得到的值
    
    ⑨ 配置故障消息

    消息内容如下:

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

    20201008223201

    $ swapoff -a
    $ swapon -a        
    # 释放swap分区空间
    

    重新使用dd if=/dev/zero of=/dev/null bs=1024M count=1024压低内存,测试报警!

    邮件内容如下:
    20201008223700

    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    消费RabbitMQ时的注意事项,如何禁止大量的消息涌到Consumer,保证线程安全
    消费RabbitMQ时的注意事项,如何禁止大量的消息涌到Consumer,保证线程安全
    scrollTop值为0等疑难杂症
    9.四平方和
    8.冰雹数
    7.搭积木
    6.凑算式
    5.分小组
    4.骰子游戏
    3.平方怪圈
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/14199227.html
Copyright © 2011-2022 走看看