• 07--Zabbix监控告警


    前言:和普米一样运维必会的技能,这里总结一下,适用范围非常广泛,有图形化界面,能帮助运维极快确定问题所在,这里记录下概念和基础操作。

    1、zabbix简介

    Zabbix是一个基于 Web 界面的企业级开源解决方案,提供分布式系统监控和网络监控功能。它能够监视各种网络参数,确保服务器系统的安全运行,并通过灵活的通知机制让系统管理员快速定位和解决问题。Zabbix由两部分组成:Zabbix Server 和可选组件 Zabbix Agent。Zabbix Server 可以通过 SNMP、Zabbix Agent、Ping、端口监视等方法,对远程服务器和网络状态进行监控和数据收集。它支持多平台运行,为系统管理员提供强大而灵活的监控工具。

    监控信息的收集方式分为主动模式和被动模式(实际工作中通常两种模式都启用)。被动模式主要依赖监控对象上报故障,其优点是占用资源少,但缺点是及时性差,无法应对通信中断等情况。而主动模式则是定时检查业务状态,其缺点是占用资源较高,但优点在于可以从业务角度测试服务,确保了监测数据的及时性。

    2、zabbix服务器部署

    两个节点都有部署行为,阅读此篇文章需注意主机名区别!!!

    2.1、实验环境

    防火墙和selinux根据需要放行或直接关闭

    IP主机名角色
    192.168.189.150zabbix_serverzabbix服务器/监控服务器
    192.168.189.151web1业务服务器/被监控服务器

    2.2、准备zabbix源

    官网地址:Zabbix:企业级开源监控解决方案

    操作如下

     本次使用国内镜像源完成部署

    这里建议搞个centos7和epel的国内源,阿里清华都可以

    1. [root@zabbix_server ~]# vim /etc/yum.repos.d/zabbix.repo
    2. [root@zabbix_server ~]# cat /etc/yum.repos.d/zabbix.repo
    3. [zabbix]
    4. name=tsinghua_zabbix
    5. baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/
    6. gpgcheck=0
    7. enabled=1
    8. [zabbix2]
    9. name=tsinghua_zabbix_frontend
    10. baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/frontend/
    11. gpgcheck=0
    12. enabled=1
    13. [root@zabbix_server ~]# yum clean all
    14. [root@zabbix_server ~]# yum makecache

    2.3、安装zabbix服务器

    1. [root@zabbix_server ~]# yum install -y zabbix-server-mysql zabbix-agent
    2. # zabbix-server-mysql:数据库
    3. # zabbi-agent:代理程序(上报信息的程序)
    4. [root@zabbix_server ~]# yum install -y centos-release-scl
    5. #centos插件
    6. [root@zabbix_server ~]# yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
    7. #数据库插件和前台界面

    2.4、数据库部署

    1. [root@zabbix_server ~]# yum -y install mariadb mariadb-server
    2. [root@zabbix_server ~]# systemctl enable mariadb
    3. Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
    4. [root@zabbix_server ~]# systemctl start mariadb

    2.5、授权zabbix账号

    1. [root@zabbix_server ~]# mysql
    2. Welcome to the MariaDB monitor. Commands end with ; or \g.
    3. Your MariaDB connection id is 2
    4. Server version: 5.5.68-MariaDB MariaDB Server
    5. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    6. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    7. MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
    8. Query OK, 1 row affected (0.00 sec)
    9. MariaDB [(none)]> create user zabbix@localhost identified by 'Liumuquan@123';
    10. Query OK, 0 rows affected (0.00 sec)
    11. MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
    12. Query OK, 0 rows affected (0.00 sec)
    13. #授予 zabbix 用户对 zabbix 数据库的全部权限
    14. MariaDB [(none)]> flush privileges;
    15. Query OK, 0 rows affected (0.00 sec)
    16. MariaDB [(none)]> quit;

    2.6、初始化zabbix

    1. [root@zabbix_server ~]# zcat /usr/share/doc/zabbix-server-mysql-5.0.42/create.sql.gz | mysql -uzabbix -p'Liumuquan@123' zabbix
    2. 使用 zcat 解压并读取 Zabbix 提供的数据库创建脚本 create.sql.gz。
    3. 通过管道,将解压缩后的SQL内容传递给 mysql 客户端。
    4. 使用 zabbix 用户和其密码 Liumuquan@123 连接到 zabbix 数据库。
    5. 在 zabbix 数据库中执行 create.sql.gz 中包含的所有SQL语句,以创建或初始化 Zabbix 所需的数据库结构和表

    2.7、配置mysql账号密码

    1. [root@zabbix_server ~]# vim /etc/zabbix/zabbix_server.conf
    2. DBHost=localhost
    3. DBName=zabbix
    4. DBUser=zabbix
    5. DBPassword=Liumuquan@123

    2.8、启动zabbix

    1. [root@zabbix_server ~]# systemctl enable zabbix-server.service
    2. Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
    3. [root@zabbix_server ~]# systemctl start zabbix-server.service

    2.9、php配置

    1. [root@zabbix_server ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
    2. [root@zabbix_server ~]# tail -1 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
    3. php_value[date.timezone] = Asia/Shanghai
    4. #修改时区配置
    5. [root@zabbix_server ~]# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
    6. [root@zabbix_server ~]# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
    7. Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
    8. Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
    9. Created symlink from /etc/systemd/system/multi-user.target.wants/rh-php72-php-fpm.service to /usr/lib/systemd/system/rh-php72-php-fpm.service.

    2.10、web访问

    环境检查

     数据库信息配置

    zabbix服务器命名

     信息汇总

     登录zabbix(默认用户名/密码)

    初始状态为全英文页面,修改语言方式如下

    更改后效果如下

    3、业务服务器部署

    3.1、基础环境配置

    将zabbix服务器的源通过scp拷贝至本机

    [root@zabbix_server ~]# scp /etc/yum.repos.d/* root@192.168.189.151:/etc/yum.repos.d/

    开始安装并配置

    1. [root@web1 ~]# yum -y install zabbix-agent
    2. [root@web1 ~]# vim /etc/zabbix/zabbix_agentd.conf
    3. Server=192.168.189.150
    4. ServerActive=192.168.189.150
    5. Hostname=web1
    6. # 语法
    7. # Server=zabbix_ip1,zabbix_ip2
    8. # ServerActive=zabbix_ip1,zabbix_ip2
    9. # Hostname=web1 这里可以写变量 $HOSTNAME

    启动zabbix

    1. [root@web1 ~]# systemctl start zabbix-agent
    2. [root@web1 ~]# systemctl enable zabbix-agent

    此时双方zabbix已部署完成

    4、命令行测试

    在zabbix服务器上通过zabbix_get 命令行监控,zabbix5默认没有安装zabbix_get(5以前的版本自带)需要单独安装

    [root@zabbix_server ~]# yum install -y zabbix-get

    命令测试

    1. [root@zabbix_server ~]# zabbix_get -s 192.168.189.151 -k system.uname
    2. Linux web1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64
    3. #-s :指定 Zabbix Agent 的 IP 地址或主机名。
    4. #-k :指定要获取的监控项键(key)。
    5. [root@zabbix_server ~]# zabbix_get -s 192.168.189.151 -k system.cpu.load[all,avg15]
    6. 0.050000
    7. # 过去 15 分钟所有 CPU 的平均负载

    5、图形监控

    创建主机组

     

     添加主机

    此时主机并未有指明的监控项,为主机添加监控模板

     这里选择基础网站模板

     选择完成后zabbix已经产生告警(web1为全新环境未安装网站)

    给web1装个网站程序模拟排除告警

    1. [root@web1 ~]# yum install -y nginx
    2. [root@web1 ~]# systemctl start nginx
    3. [root@web1 ~]# systemctl enable nginx

    等待数秒后,显示已解决

    创建图形

    配置——主机——web1_liumuquan——图形——创建图形

     

    此处乱码为修改语言环境所致,尽量不要尝试修复!!!

    6、模板(Template)

    在 Zabbix 中,模板是一个非常重要的概念,用于统一和简化监控配置。模板包含一组预定义的监控项、触发器、图形、屏幕、发现规则和其他相关元素,可以应用到多个主机上,从而避免重复配置和管理。

    • 主机:监控对象
    • 应用集(Applications):应用集用于对监控项进行分组,以便更好地组织和管理。例如,可以将所有与数据库相关的监控项放在一个应用集中
    • 监控项(Items):监控项是模板中的基础元素,用于定义从主机收集的数据类型和方法。例如,CPU 使用率、内存使用情况、磁盘 I/O 等。
    • 触发器(Triggers):触发器是基于监控项的逻辑条件,用于定义何时生成告警。例如,当 CPU 使用率超过90%时触发告警。
    • 图形(Graphs):图形用于将监控数据可视化。模板可以包含预定义的图形,以便在应用模板后自动提供数据的图形化展示。
    • 聚合图形(Screens):屏幕是由多个图形和其他元素组成的仪表板,用于提供更全面的监控视图。
    • 自动发现:通过使用模板,可以确保不同主机上的监控配置一致性,并且可以轻松地将监控配置应用到新添加的主机上。这样不仅减少了工作量,还降低了人为错误的风险。如添加一整个网段的服务器。
    • web监测:独立监测几乎没用过

    下面会对模板元素进行详细的解析

    7、监控项(Zabbix Items)

    7.1、监控项详解

    监控项的定义配置可以细分为以下几个维度

    配置名称详细解释
    获取监控项数据方式

    1)zabbix-agent

    2)SNMP-简单的网际管理协议(一般用在路由器或交换机上)

    取值的类型和基础单位磁盘容量单位一般为B,网卡bps,mysql的查询统计qps,cpu的ips或%等
    监控key(键值)组合命令,由zabbix集成,大部分只需选择即可
    获取数据的间隔工作中一般为5-30分钟,本次实验间隔越短越好
    历史数据保存的时间/
    趋势数据保存的时间/

    如下所示

     

    7.2、增加监控项(1)

    增加监控项:监控服务器启动分区剩余空间

    常规查询方式

    zabbix监控方式

    7.2.1、创建模板

    7.2.2、新增监控项

     查看新增的监控项

    7.2.3、新增图形

    7.2.4、关联主机与模板

    模板关联完成

    7.2.5、观察最新数据

    查看图形

    通过写入文件改变剩余分区大小,观察监控结果

    1. [root@web1 ~]# dd if=/dev/zero of=/boot/1.txt bs=1M count=300
    2. 记录了300+0 的读入
    3. 记录了300+0 的写出
    4. 314572800字节(315 MB)已复制,0.788679 秒,399 MB/秒

    7.3、增加监控项(2)

    增加监控项:服务器网络接口进出流量

     

    添加图形

    7.4、自定义监控项

    自定义监控项即自定义键值key,zabbix自带key有限,有些值需要通过自定义才能完成收集。

    操作如下:

    添加监控项:mysql被查询次数

    1. [root@web1 ~]# yum -y install mariadb-server mariadb
    2. [root@web1 ~]# systemctl start mariadb
    3. [root@web1 ~]# systemctl enable mariadb
    4. Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
    5. [root@web1 ~]# mysqladmin -uroot status
    6. Uptime: 128 Threads: 1 Questions: 2 Slow queries: 0 Opens: 0 Flush tables: 2 Open tables: 26 Queries per second avg: 0.015
    7. # 此处Questions为数据库启动后被查询次数,该值位于“第六项”
    8. [root@web1 ~]# mysqladmin -uroot status | awk '{print $6}'
    9. 3
    10. [root@web1 ~]# mysqladmin -uroot status | awk '{print $6}'
    11. 4
    12. [root@web1 ~]# mysqladmin -uroot status | awk '{print $6}'
    13. 5
    14. # 此处每执行一次也视为一次查询
    15. # 将此条命令保存

     配置zabbix客户端(被监控端)配置文件

    1. [root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/customkey_mysql.conf
    2. # customkey_mysql.conf中conf为固定格式不可更改
    3. [root@web1 ~]# cat /etc/zabbix/zabbix_agentd.d/customkey_mysql.conf
    4. UserParameter=mysql.questions,mysqladmin -uroot status | awk '{print $6}'
    5. # UserParameter固定值不可能更改
    6. # mysql.questions是key名字,可自定义

    初步测试配置是否正确

    1. [root@web1 ~]# zabbix_agentd -t mysql.questions
    2. mysql.questions [t|7]

    测试成功后重启客户端程序,加载新增的key,按照增加监控项的操作添加

    添加图形

     在被监控端执行一万次

    for i in {1..10000}; do mysqladmin -uroot status; done

    查看效果

    8、触发器(Triggers)

    触发器用于定义item的报警阈值

    操作如下:

    先添加一个方便设置触发器的监控项如cpu负载,并添加图形

     在被监控端创造较大文件,观察图形

    1. [root@web1 ~]# dd if=/dev/zero of=/1.txt bs=1M count=3000
    2. 记录了3000+0 的读入
    3. 记录了3000+0 的写出
    4. 3145728000字节(3.1 GB)已复制,37.0871 秒,84.8 MB/秒

    监控项正常,设置触发器

     

    添加完成后回到对应的图形界面,在图中可以看到设定的触发器阈值的标记

     尝试触发告警,观察告警

    9、动作(Zabbix Action)

    Zabbix Action是指当某个触发器状态发生改变(如Problem、OK),可以采取相应的动作,大多为告警或执行预设命令。现在在公司常用的告警多为邮箱告警或微信告警,具体部署过程将在下方演示。

    9.1、邮件告警部署

    9.1.1、邮箱配置

    注册一个126邮箱,并开启用于给程序登录使用的pop3授权码

    按照操作提示开启pop3授权码,找个记事本将授权码保存下来稍后会使用。

    9.1.2、设置zabbix邮箱

    首先测试zabbix服务端和邮箱服务器的连通性

    1. [root@zabbix_server ~]# nc smtp.126.com -t 25
    2. 220 126.com Anti-spam GT for Coremail System (126com[20140526])
    3. 421 closing transmission channel

    进入zabbix的web界面,创建媒体类型

     

     9.1.3、创建用户组

     9.1.4、创建用户

    创建用户同时完成用户与用户组,与自定义告警类型的关联

    先不要点击添加,先配置报警媒介

    9.1.5、告警设置

    此时未配置触发告警后zabbix需要做什么,此时点击添加会报错

    常用内置变量(宏)

    {TRIGGER.DESCRIPTION}        触发器描述

    {TRIGGER.NAME}        触发器名称

    {TRIGGER.EVENTS.ACK}        事件是否确认

    宏可以自定义或引用

    9.1.6、查看告警

    尝试触发告警后,观察邮箱内容,这里设置的是cpu负载大于0.6

    我们回到zabbix控制台可以观察,异常发生后zabbix的动作

    9.2、远程执行

    当问题发生,可以通过远程执行命令的方式对目标主机进行控制。

    操作步骤如下

    9.2.1、创建动作

    9.2.2、开启zabbix远程执行

    客户端操作

    1. [root@web1 ~]# vim /etc/zabbix/zabbix_agentd.conf
    2. [root@web1 ~]# cat /etc/zabbix/zabbix_agentd.conf | grep EnableRemoteCommands=1
    3. # 添加如下内容
    4. EnableRemoteCommands=1
    5. [root@web1 ~]# systemctl restart zabbix-agent.service

    9.2.3、权限设置

    客户端操作

    1. [root@web1 ~]# visudo
    2. # 在下面添加如下内容
    3. [root@web1 ~]# tail -1 /etc/sudoers
    4. zabbix ALL=NOPASSWD: /usr/bin/systemctl restart nginx

    9.2.4、测试动作

    关闭客户端nginx,查看状态却为启动或启动中

     查看zabbix状态

     小节实验完成,在公司内部可以通过构建不同的动作达成不同效果,如电话告警,短信告警,微信告警(这三项目前需要收费),也可以通过远程执行不同的脚本完成各种需求。

    10、自动发现及自动注册

    为了满足监控企业成千上万台服务器,因此我们需要使用Zabbix批量监控来实现。自动发现和自动注册。

    清理前面注册的主机

    主机列表状态

    10.1、自动发现

    10.1.1、创建自动发现规则

    10.1.2、创建自动发现动作

    添加时可以完成的操作配置

     观察自动发现

    10.2、自动注册

    由客户端主动发起,客户端必须安装并启动Agent,否则无法被自动注册添加至主机列表。

    10.2.1、创建自动注册动作

    10.2.2、根据主机名称注册

    10.3、 查看新增的主机

    11、zabbix实战模板

    11.1、监控 TCP连接状态数量

    以监控tcp连接为例,演示模板用法

    11.1.1、配置文件

    创建二次传参所需的脚本

    1. [root@web1 ~]# mkdir /etc/zabbix/tcp_status
    2. [root@web1 ~]# vim /etc/zabbix/tcp_status/tcp_status.sh
    3. #!/bin/bash
    4. #ESTABLISHED/LISTEN/SYN_SENT/SYN_RECV/FIN_WAIT1/FIN_WAIT2/TIME_WAIT/CLOSE/CLOSE_WAIT/LAST_ACK/LISTEN/CLOSING/ERROR_STATUS
    5. LISTEN() {
    6. netstat -an |grep ^tcp |grep LISTEN |wc -l
    7. }
    8. ESTABLISHED() {
    9. netstat -an |grep ^tcp |grep ESTABLISHED |wc -l
    10. }
    11. TIME_WAIT() {
    12. netstat -an |grep ^tcp |grep TIME_WAIT |wc -l
    13. }
    14. SYN_SENT() {
    15. netstat -an |grep ^tcp |grep SYN_SENT |wc -l
    16. }
    17. SYN_RECV() {
    18. netstat -an |grep ^tcp |grep SYN_RECV |wc -l
    19. }
    20. CLOSE() {
    21. netstat -an |grep ^tcp |grep CLOSE |wc -l
    22. }
    23. $1
    24. # 记得给这个脚本执行权限

    创建监控项所需配置文件

    1. [root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf
    2. UserParameter=tcp.status[*],/etc/zabbix/tcp_status/tcp_status.sh $1

    重启zabbix客户端

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

    11.1.2、测试 

    1. [root@zabbix_server ~]# zabbix_get -s 192.168.189.151 -k tcp.status[TIME_WAIT]
    2. 227
    3. [root@zabbix_server ~]# zabbix_get -s 192.168.189.151 -k tcp.status[LISTEN]
    4. 9
    5. [root@zabbix_server ~]#

    11.2、监控 MySQL

    1. [root@web1 ~]# cat /etc/zabbix/mysql_status/mysql_status.sh
    2. #!/bin/bash
    3. # MySQL for Zabbix Monitoring Script
    4. # 这个脚本用于通过Zabbix监控MySQL数据库的性能指标。
    5. # 获取MySQL服务器的运行时间(以秒为单位)
    6. Uptime() {
    7. mysqladmin status | awk '{print $2}'
    8. }
    9. # 获取MySQL服务器上的慢查询数量
    10. Slow_queries() {
    11. mysqladmin status | awk '{print $9}'
    12. }
    13. # 获取MySQL服务器上的UPDATE操作次数
    14. Com_update() {
    15. mysqladmin extended-status | awk '/\/ {print $4}'
    16. }
    17. # 获取MySQL服务器上的SELECT操作次数
    18. Com_select() {
    19. mysqladmin extended-status | awk '/\/ {print $4}'
    20. }
    21. # 获取MySQL服务器上的ROLLBACK操作次数
    22. Com_rollback() {
    23. mysqladmin extended-status | awk '/\/ {print $4}'
    24. }
    25. # 获取MySQL服务器上的DELETE操作次数
    26. Com_delete() {
    27. mysqladmin extended-status | awk '/\/ {print $4}'
    28. }
    29. # 获取MySQL服务器上的INSERT操作次数
    30. Com_insert() {
    31. mysqladmin extended-status | awk '/\/ {print $4}'
    32. }
    33. # 获取MySQL服务器上的COMMIT操作次数
    34. Com_commit() {
    35. mysqladmin extended-status | awk '/\/ {print $4}'
    36. }
    37. # 获取MySQL服务器发送的字节数
    38. Bytes_sent() {
    39. mysqladmin extended-status | awk '/\/ {print $4}'
    40. }
    41. # 获取MySQL服务器接收的字节数
    42. Bytes_received() {
    43. mysqladmin extended-status | awk '/\/ {print $4}'
    44. }
    45. # 获取MySQL服务器上的BEGIN操作次数
    46. Com_begin() {
    47. mysqladmin extended-status | awk '/\/ {print $4}'
    48. }
    49. # 调用传递的参数所对应的函数
    50. "$1"

    配置文件及测试略

    其他自定义key模板上传至网盘保存,操作方式与上方两个示例相同,模板大多为网上收集,整理如下需要的可以自取

    链接:https://pan.baidu.com/s/1w6Jjp_I-egZr72DiIrBAVg?pwd=2jam 
    提取码:2jam

  • 相关阅读:
    python迭代器生成器操作
    面向过程与面向对象、面向对象三大特性的介绍和示例
    系统学习区块链、Solidity 和前后端全栈 Web3 开发
    RESTful API 设计指南——为什么要用(上)
    【C++学习手札】模拟实现vector
    Nginx内存池:外部资源释放和内存池销毁
    智能座舱供应链的“新主角”
    存档&改造【07】多表查询和可操控对象的存储
    基于非支配排序遗传算法的多目标水光互补优化调度附Matlab代码
    班级管理系统
  • 原文地址:https://blog.csdn.net/qq_43387908/article/details/139600146