Zabbix 学习路线和要点摘抄

本贴最后更新于 251 天前,其中的信息可能已经沧海桑田
  • zabbix 相关书籍

    • Zabbix 企业级分布式监控系统 (吴兆松) (Z-Library)
    • 深入理解 Zabbix 监控系统 (鲍光亚) (Z-Library)
  • roadmap

    • 本文根据参考书籍目录得出 roadmap 并摘录要点为新手作指引,未完善的内容可自行百度学习

    • 参考书籍:Zabbix 企业级分布式监控系统

    • 第 1 章 开篇——监控系统简介

      • 1.1 监控系统的功能概述(什么是监控系统?)

        监控系统,一是监测,二是控制,监测以达到控制的效果,在计算机领域,可以将其分为 5 种监控类型。

        • 应用性能监控(Application Performance Monitoring)。
        • 业务交易监控(Business Transaction Monitoring)。
        • 网络性能监控(Network Monitoring)。
        • 操作系统监控(System Monitoring)。
        • 网络站点监控(Website Monitoring)。

        大规模的监控环境,被监控节点多且监控类型多产生的数据和网络连接开销非常大,数据采集方式除了使用主动采集模式,还需要使用代理架构分摊服务器端的性能开销。

        image

        通常监控系统会选用以下 几种数据存储方式。

        (1)本地存储。使用本地磁盘,基于文件的方式存储。

        (2)使用时序数据库进行数据存储,如古老的环状数据库 (Round Robin Database, RRD)等。近年来,随着时序数据技术的不断发展,出现了比较成熟的时序数据库,如 OpenTSDB(底层存储基于 HBase)、Graphite、InfluxDB、Prometheus 等,与直接使用文件的存储方式相比,这些时序数据库更加高效。
        ( 3 ) 使 用 数 据 库 管 理 系 统 ( Database Management System, DBMS)进行数据存储,如常见的 MySQL、Oracle、SQL Server 等。使用 这种数据库来存储监控数据,当数据量达到一定规模时,其读/写效率 均会显著下降,数据库的压力比较大,通常优化方案思路有 3 种,一是 减少数据的存储量;二是优化数据库本身,调整配置参数,优化运行 环境;三是使用分布式数据库和数据库集群技术方案。
        (4)使用 NoSQL 数据库进行数据存储。NoSQL 相对于 DBMS 这种传统 的数据库有着一些天然的优势,单机的 QPS 通常较高。但 NoSQL 本身并 不是为监控系统设计的,在数据结构存储方面存在一些缺陷
        (5)使用列存储数据库进行数据存储。列存储数据库由于其设计 之初专为大数据而有所考虑,故无须担心其存储容量,底层均有良好 的解决方案。但由于其部署、运维均较为复杂,故一般监控系统也不 会常采用这种技术作为数据库存储。这方面的数据库代表为 HBase。
        (6)使用全文搜索引擎数据库进行监控数据存储。这方面的代表 是 Elasticsearch,其作为监控数据库存储监控数据具有天然的优势, 支持集群、分布式部署、容灾,并且集群能够提供较高的性能。目前 采用全文搜索引擎数据库进行监控数据存储,典型的代表是 ELK 套件,在 Zabbix 4.0 中可以选用 Elasticsearch 作为数据库存储。

        监控系统的重要功能是根据设定的阈值进行告警,将不同级别的告警分成不同的梯度发送给不同的告警接收人。告警模块需要支持故障的有效汇报和集中汇报,尽量避免出现“告警风暴”,防止同一时间大量发送重复、类 似的告警,即告警功能支持对告警内容进行分析和自动处理,防止误报、漏报及抖动。

        事后还需要对告警信息进行统计分析,以方便衡量系统的稳定性、可用性。通常使用 SLA 服务质量指标来衡量。

      • 为什么要使用监控

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

      • 如果去到一家新公司,如何入手监控(怎么实现监控系统?新入职)

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

      • 单机时代如何监控,比如我们需要监控磁盘的使用率

        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 空闲:
        

        内存监控命令: free

        [root@m01 ~]# free -h
                      total        used        free      shared  buff/cache   available
        Mem:           977M        105M        724M        6.6M        148M        729M
        Swap:          1.0G          0B        1.0G
        

        磁盘监控命令: df、 iotop

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

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

        网络监控命令: ifconfig、 route、 glances、 iftop、 nethogs、 netstat

        单位换算
        Mbps 100Mbps/8
        MB 12MB
        iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。
        TX:发送流量、 RX:接收流量、 TOTAL:总流量
        #查看 TCP11 中状态
        netstat -an|grep ESTABLISHED
        netstat -rn # 查看路由信息
        netstat -lntup
        
        [root@ZabbixServer ~]# cat free.sh
        #!/usr/bin/bash
        HostName=$(hostname)_$(hostname -i)
        Date=$(date +%F)
        while true;do
        Free=$(free -m|awk '/^Mem/{print $NF}')
        if [ $Free -le 100 ];then
        echo "$Date: $HostName Mem Is < ${Free}MB"
        fi
        sleep 5
        done
        
      • 1.2 监控系统的实现原理(怎么实现监控系统?原理)

        • 一个监控系统的组成大体可以分为两部分:数据采集部分(客户 端,Agent)和数据存储分析告警展示部分(服务器端,Server)
        • 监控系统数据采集可以分为两种:专用客 户端采集和公用协议采集(SNMP、IPMI、SSH、Telnet 等)
        • 监控系统数据采集的工作模式可以分为被动模式(从服务器端到 客户端采集数据,对应的英文单词是 pull)和主动模式(客户端主动 上报数据到服务器端,对应的英文单词是 push)两种。一般来说,被动模式对监控控制端服务器的开销较大,适合小规 模的监控环境;主动模式对监控控制端服务器的开销较小,适合大规 模的监控环境。
      • 1.3 监控系统的开源产品(怎么实现监控系统?现有产品)

        在监控软件中,开源的解决方案有流量监控(MRTG、Cacti、 SmokePing 等 ) 、 性能告警 ( Nagios 、 Zabbix 、 Zenoss Core 、 Ganglia 、 Netdata 等 ) 、 基于时 序据库存储数据的监控 (Graphite、OpenTSDB、InfluxDB、Prometheus、OpenFalcon 等)、 基于全文搜索引擎数据库存储数据的监控(如 ELK 套件)可供选择。上述各监控产品具有一些共同特征,例如 采集数据、分析展示、告警以及简单的故障自动处理等,最终都能达 到对 IT 系统服务可用性的完全展示。需要说明的是,当前的时序数据库侧重于监控数据的存储,其采集需要借助其他工具来实现。时序监控产品的设计理念较为先进,具有很多创新功能

        流行的监控工具

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

    • 第 2 章 Zabbix 简介/

      • 2.3 Zabbix 是一个什么样的产品(Zabbix 是什么?简介)

        • Zabbix 是一个企业级的高度集成的开源监控软件,提供了分布式 监控解决方案,可以用来监控设备、服务等的可用性和性能。其产品不分企业版和社区版,是一个真正的源码开放产品,用户可以自由下载并使用该软件。
      • 2.4 为何选择 Zabbix 作为监控系统(为什么用 Zabbix?)

        可自由修改发布(GPL2.0),搭建环境、安装和配置简单,完全支持 Linux、UNIX、Windows、AIX、BSD 和 Solaris,C 语言编写占用非常少性能速度非常好,开源社区支持良好,超强扩展能力只有想不 到的事情,没有办不到的事情

      • 2.1 Zabbix 的用户群体都有谁(Zabbix 谁来用?)

        • Zabbix 自身的定位是中型企业和大型企业
        • 单个服务器节点可以支持 10 万台 设备的监控,其每秒可以处理 5 万次请求(NVPS 在有历史数据和触发器 的情况下为 5 万次,而在无历史数据和触发器的情况下则可以达到单机 30 万次)。
      • 2.2 使用 Zabbix 需要具备什么基础(Zabbix 怎么用?所需基础)

        • 入门阶段:以前从未接触过任何监控系统,也不熟悉 Linux 操 作系统。在这个阶段,能够熟练地掌握 Zabbix 的安装和基本配 置即可。
        • 中级阶段:具备 Linux 基础,熟悉 LAMP 和 LNMP 环境搭建、MySQL 数据库、Shell 脚本,以及具有简单的英文阅读能力,主要难点 在于触发器、数据库调优和 API 的使用。在这个阶段,读者可以 将 Zabbix 与其他系统进行集成对接。
        • 高级阶段:熟悉 PHP 语言或 C 语言,具备二次开发能力,能够修改源码,可以对 Zabbix 从代码级别进行优化和扩展。在这个阶段,读者一般都能熟练地掌握 Zabbix 的各个功能,已经从使用阶段到了源码级别的研究阶段,因此主要是对编程能力的要求。
      • 2.5 该选用 Zabbix 的哪个版本(Zabbix 怎么用?版本选择)

        到目前 2024 年,4.0 在中国应用广泛,向 5.0 过渡,6.0 很少用

      • 2.6 Zabbix 的架构是什么样的(Zabbix 怎么用?架构)

        image

        image

      • 2.7 Zabbix 的功能特性都有哪些(Zabbix 是什么?功能特性)

        • 1.数据收集 · 可用性、性能检测。 · 支持 Agent、SNMP(包括 Trapping 和 Polling)、IPMI、JMX、 SSH、Telnet 等。 · 自定义检测。 · 自定义收集数据的频率。 · 客户端/代理端/服务器端模式。
        • 2.灵活的触发器 可以定义非常灵活的告警阈值和与多种告警相关联的条件。
        • 3.高度可定制的告警 · 发送通知,可定制包括告警级别、动作升级、收件人和媒体类 型。 · 通知可以使用全局宏变量和自定义变量。 · 自动处理功能包括远程命令的自动调用和执行。
        • 4.实时的绘图功能 监控项将数据实时绘制在图形上。
        • 5.Web 监控能力 Zabbix 可以模拟浏览器请求访问一个网站,并检查返回值和响应时间。
        • 6.多种可视化展示 · 可以自定义监控的展示图,将多种监控数据集中展示到一张图 上。 · 网络拓扑图。 · 自定义的 Screens 和 Slide shows 可以将多种图形集中展示。 · 报表功能。 · 资源使用情况的监控展示。
        • 7.历史数据的存储 · 将数据存储在数据库中。 · 历史数据的存放周期可配置。 · 定期删除过期的历史数据。
        • 8.配置非常容易 配置比较简单,只需要以下两步即可。 (1)添加设备。 (2)应用模板即可完成监控。
        • 9.使用模板 · 模板可以分组。 · 模板具有可继承性。
        • 10.网络发现 · 支持自动发现网络设备和服务器(可以通过配置自动发现服务 规则实现)。 · Agent 自动注册。 · 支持用自动发现(Low Level Discovery)实现动态监控项的 批量监控(支持自定义),内置的自动发现包括文件系统、网 络接口、SNMP OID,可定制自动发现。
        • 11.快速的访问接口 · Web 页面基于 PHP。 · 远程访问。 · 日志审计。
        • 12.API 功能 应用 API 功能可以方便地与其他系统结合,包括手机客户端的使 用。
        • 13.系统权限 · 不同的用户展示监控的资源不同。 · 用户身份认证。
        • 14.程序特性 服务器端 Zabbix-Server 和采集端 Zabbix-Agent 使用 C 语言编写, 其性能非常高,内存开销非常小。 15.大型环境的支持 利用 Zabbix-Proxy 方式可轻松构建远程监
    • 第 3 章 安装与部署

      • 3.1 安装环境概述

        最小化的安装环境,磁盘 I/O 性能、数据库性能是系统良好运行的关键因素

        image

        所需磁盘空间:数据库写入的一个关键 指标是 NVPS(New Values Per Second),NVPS 值是指每秒处理的平均数据量,通过这个值可以计算出数据 存储所需的空间大小。原理为,每条数据都占用大约 50B 的存储空间, 因此 NVPS× 每条数据的平均大小=历史数据所需的空间大小。计算公式:历史数据所需的空间大小=天数 x 每秒处理的数据量 x1 天 24 小时 x1 小时 3600sx50B

        image

        操作系统要求:

        image

        软件环境:

        image

        image

        image

      • 3.2 Zabbix-Server 服务器端的安装

        • zabbix 服务端一键安装初始配置脚本1

        • Zabbix-Server 安装配置步骤详解

          • Zabbix-Server 服务器端安装配置步骤详解2
      • 3.3 Zabbix-Agent 客户端的安装

        • zabbix 客户端一键安装脚本3
      • 3.4 SNMP 监控配置

      • 3.5 在 Windows 中安装 Zabbix-Agent

      • 3.6 在其他平台安装 Zabbix-Agent

      • 3.7 Zabbix-Get 的使用、3.8 Zabbix 相关术语(命令)

        • Zabbix-Get 详解4
      • 3.9 Zabbix-Server 对数据的存储

        • 3.9.1 监控数据的存储
        • 3.9.2 MySQL 表分区实例
      • 3.10 高可用和安全

      • 3.11 Zabbix 数据库备份

        • Zabbix 数据库备份脚本
      • 3.12 升级 Zabbix

        • 3.12.1 同版本升级的方法
        • 3.12.2 跨版本升级的方法
        • 3.12.3 数据库自动升级的原理
        • 3.12.4 升级失败的处理案例
      • 配置 zabbix_agentd.conf 详解5

      • 用 docker 快速部署 zabbix

        • 用 docker 快速部署 zabbix6
    • 第 4 章 快速配置和使用

      • 4.1 配置流程

        其完整的配置流程可以 简单描述为: Host groups(主机组)→Hosts(主机)、图形(模板链接)→Applications(监控 项组)→Items(监控项、模板链接)→Triggers(触发器、模板链接)→Problems(故 障)→Actions(处理动作)→User groups(用户组)→Users(用 户)→Medias(告警方式)→Action log(日志审计)。

        image

      • 4.2 添加主机组

        • 4.2.1 如何划分主机组

          在 Zabbix 的软 件设计规则中,已规定主机、模板必须属于一个分组。 对同一属性的主机或者模板应归类到相同组,相关原则如下:

          • 以地理位置纬度进行划分。
          • 以业务为单位划分组。
          • 以机器用途进行划分。
          • 以系统版本进行划分。
          • 以应用程序来划分组。
          • 其他方式等。
        • 支持对主机组进行层级分组

      • 4.3 添加模板

      • 4.4 添加主机

      • 4.5 配置图形

      • 4.6 配置大屏

      • 4.7 配置幻灯片

      • 4.8 配置地图(拓扑图)

      • 4.9 使用(IT)服务

      • 4.10 使用报表

      • 4.11 资产管理

      • 4.12 图形共享

      • 4.13 全局搜索

      • 4.14 最新数据

      • 4.15 故障

      • 4.16 数据的导入/导出

        • Zabbix 支持将所有的配置导出为标准格式的 XML 文件,同样,也支 持导入标准格式的 XML 配置文件。
      • 4.17 用户权限

        • 用户类型主要有 3 类,分别为超级管 理员、管理员和普通用户。还有一类特殊用户,即匿名用户 guest。
      • 4.18 调试模式

        • Zabbix 的调试模式(Debug mode)主要用于前后端的调试,如果 想知道对某个页面的查询使用了哪些 SQL 语句,则可以打开调试模式
      • 4.19 与 LDAP 对接

        • Zabbix 本身具有认证体系,还支持与 LDAP 集成来实现身份的统一 认证。
      • 4.20 维护模式

        • 在某些场合中,我们不需要告警,例如业务的正常维护,所以此 时维护时间功能特别有用。
      • 4.21 故障确认

        • 故障确认(Problem acknowledgement)功能用于人为干预故障, 当某个故障发生时,我们无法立即解决,但是已经知晓了该故障,即 先响应后彻底消除。为方便故障处理流程的转动,我们就可以使用这 一功能。
      • 4.22 批量更新

    • 第 5 章 处理监控指标数据

      • 5.1 添加新的监控项(Items)

      • 5.2 监控指标的自定义

      • 5.3 Zabbix 内置的监控方式

        Zabbix 4.0 支持的监控方式如下:

        • Zabbix agent check

          • Agent 用于从 Zabbix-Agent 采集数据,其工作方式分为被动模式和主动模式两种

            image

        • SNMP agent check

        • SNMP trap

        • IPMI check

        • Simple check

          • Simple check 监控方式是 Zabbix-Server 主动发起的对外请求,所 以请求的源地址是 Zabbix-Server 服务器的 IP 地址,目标地址为远程 IP 地址,这样我们就可以不用安装任何 Agent,即可对一些常见的服务协 议进行监控了

            image

        • VMware monitoring

        • Log file monitoring

        • Calculated item

        • Zabbix internal check

        • SSH check

        • Telnet check

        • External check

        • Aggregate check

        • Trapper item

        • JMX monitoring

        • ODBC check

        • Dependent items

        • HTTP check

      • 5.3.3 日志监控方式

        Zabbix-Agent 支持对日志文件的监控,可以对日志的关键字进行 监控,然后告警。日志监控支持普通的日志文件,也支持日志轮询、 切割的文件。当日志中出现特殊的字符串(例如,警告、报错等字符 串)时,可以发送通知给用户。为了使日志监控能够正常使用,必须 满足以下条件: ·

        • Zabbix-Agent 必须运行,且工作方式为主动模式。 ·
        • 日志的 Item 必须设置,必须指定文件名。 ·
        • Zabbix-Agent 有读取日志的权限,如日志位于/home/用户名/ 文件中,则会因为权限的问题而导致无法读取到文件。

        注意:Zabbix 日志监控必须工作于主动模式下,在 Web 前端配置的主机名 ( 宏 为 {HOST.HOST} ) 必须和 Zabbix-Agent 端 zabbix_agentd.conf 中的 Hostname 值是一致的,并且这个 Hostname 值具有唯一性;否则,在主动模式下是无法正常采集到数据的。

      • 5.3.4 计算型监控方式

        计算型(Calculated)监控方式是在 Zabbix-Server 端对历史数据 进行统计分析的一个功能,例如,可以求主机总的磁盘容量、网络流 量等。经过计算后的指标值,如配置了该 Item 的 Trigger,则同样可以 触发告警阈值进行告警。

      • 5.3.5 聚合型监控方式

        聚合型(Aggregate)监控方式是指将已经存储在数据库中的监控 指标数值进行二次统计运算,从而形成新的监控指标。利用这个功 能,我们很容易做到对一组已有的监控指标进行再次统计求值,如计 算一组或多组服务器的 CPU 平均 iowait、计算一组或多组服务器 的/data 分区总的容量。

      • 5.3.6 内部检测监控方式

        内部检测用于监控 Zabbix 自身的性能数据,可以监控 ZabbixServer 和 Zabbix-Proxy,选择监控方式为“Zabbix internal”,添加 相应的 Item key,即可完成监控。

      • 5.3.7 SSH 监控方式

        在默认情况下,Zabbix-Server 并不知道我们使用哪个 SSH 密钥来 连接服务器,因此需要指定 SSH 密钥的位置。由于使用 RPM 包安装的 Zabbix-Server,其用户家目录在/var/lib/zabbix 目录下面,因此我 们将 SSH 密钥目录设置为/var/lib/zabbix/.ssh

      • 5.3.8 Telnet 监控方式

        Telnet 监控方式,Zabbix-Server 使用 Telnet 协议来获取数据。为 什么要支持这么古老的方式呢? 因为在某些场景下,有些设备只提供 了 Telnet 方式来获取数据,所以这个时候 Telnet 监控方式就有用武之地了。

      • 5.4 监控项指标数据的预处理

        • 5.4.1 预处理概述

          预处理(Preprocessing),指在 Zabbix-Server 接收到监控项数 据之后,在入库之前再次处理的过程,这意味着可以从客户端采集任 意格式的数据,大大提高了数据处理的灵活性。例如,我们可以从客 户端采集 JSON 格式的数据,然后通过预处理功能进行值的分割,将符 合规则的数据入库。采用预处理功能可以批量获取数据,如图 5-43 所 示,左侧是通过预处理功能,一次可以获取多个指标数据;右侧是以 一问一答方式轮询获取数据的

        • 5.4.2 预处理的运行流程

          image

        • 5.4.3 预处理的数据类型

      • 5.5 配置宏(变量)

        • 5.5.1 全局宏
        • 5.5.2 模板宏
        • 5.5.3 主机宏
        • 5.5.4 监控项宏
      • 5.6 配置值映射

        值映射(Value mapping)功能是指将监控指标取到的数据替换为 文本进行展示,如将数值 1 替换为 available,则表示在监控指标取到 数值 1 时,在界面中将显示为 available。

    • 第 6 章 精通告警配置

      • 6.1 告警流程

        Host groups(设备组)→Hosts(设备)→Applications(监控 项组)→Items(监控项)→Triggers(触发器)→Actions(告警动 作)→Medias(告警方式)→User groups(用户组)→Users(用 户)。

        Zabbix 告警的配置步骤如下: (1)配置 Trigger。 (2)配置用户。 (3)配置告警介质。 (4)配置 Action。

      • 6.2 告警触发器(Trigger)的配置

      • 6.3 告警处理的配置

        • 6.3.1 如何发送告警

          客户端定期采集需要监控的指 标,然后发送给 Zabbix-Server 服务器,Zabbix-Server 对数据进行存 储和分析,如果指标的数据值满足告警表达式规则,则会触发一个告 警,但告警并不会主动通知给用户,在 Zabbix-Web 界面中我们可以看 到故障告警的显示。如果此故障不仅要在 Zabbix-Web 界面中展示,同 时也要发送给用户,这时就需要在 Zabbix-Web 界面的 Action 页面中对 告警信息进行规则匹配,并将其发送给不同的用户。

          image

        • 6.3.2 Action 功能概述

          Action 中文翻译为“动作”,如果从中文字义来理解它,则确实 很难理解。其实可以这么理解,Action 就是指发生了什么事件,根据 一定的条件采取什么措施,可以为发送消息,也可以为执行命令。通 过这样的解释,相信读者对 Action 的理解就不会很难了。 Action 的 事 件 来 源 有 4 种 , 包 括 : Triggers ( 触 发 器 ) 、 Discovery(网络自动发现)、Auto registration(Agent 主动注册) 和 Internal(内部事件)

      • 6.4 邮件告警配置

      • 6.5 自定义脚本告警

        6.5.1 自定义脚本告警的原理 自定义脚本在/etc/zabbix/zabbix_server.conf 中,配置语句如 下:

        AlertScriptsPath=/etc/zabbix/alertscripts
        

        Zabbix-Server 在调用脚本时会传递参数给脚本,在 Zabbix 3.0 以 下版本中,默认传递 3 个参数,即收件人、主题和内容;在 Zabbix 3.0 以上版本中,则可以自定义多个参数传递给脚本

      • 6.6 邮件告警脚本的配置

      • 6.7 告警升级机制

        image

        image

      • 6.8 触发器标签配置

      • 6.9 手动关闭告警

      • 6.10 如何取消告警发送

      • 6.11 如何删除故障信息

      • 6.12 告警聚合

        告警聚合则基于告警对告警数据 进行分析。这种功能属于监控系统的高级功能,在大规模环境中,这 种功能是不可缺少的,其重要性比监控系统本身更重要。比如一天人 均收到几百个告警,但如果都是同一类型,那么接收告警的人员会对 告警产生免疫效果,时间一长,对告警消息处理的灵敏度就会下降。 因此在设置告警时,可以通过触发器函数本身来调整触发器依赖的配 置,最终的解决办法还是告警聚合系统在发挥作用。 在 Zabbix 4.0 中,告警聚合的原理是通过对每个事件打标签,然 后匹配标签来关闭告警。

      • 6.13 告警配置故障排查

    • 第 7 章 探究告警触发器

      • 7.1 Trigger 函数的意义
      • 7.2 Trigger 函数的分类
      • 7.3 Trigger 函数——比较与查找
      • 7.4 Trigger 函数——计算
      • 7.5 Trigger 函数——时间
      • 7.6 Trigger 函数——日志
      • 7.7 Trigger 函数——字符串匹配
      • 7.8 Trigger 函数——趋势预测
      • 7.9 参考资料
    • 第 8 章 剖析监控方式

      • 8.1 Zabbix 支持的监控方式

        image

      • 8.2 Zabbix 监控方式的逻辑

        Zabbix 支持多种监控方式,其获取数据的方式可以分为三类:一 是 Zabbix-Server 主动对外请求数据;二是外部主动发送数据给 Zabbix-Server;三是 Zabbix-Server 内部进行数据计算,对已有数据 进行重新计算分析,如图 8-4 所示。

        image

      • 8.3 Zabbix-Agent 的工作模式

        • Zabbix-Agent 的工作模式可以分为主动模式(Active)和被动模 式(Passive),下文会详细剖析各自的工作原理。 主动模式是指 Zabbix-Agent 将采集到的数据主动推送给 ZabbixServer,其行为是 Zabbix-Agent 向 Zabbix-Server 主动发起的数据连接 过 程 , Zabbix-Server 不 必 等 待 Zabbix-Agent 的 数 据 采 集 行 为 , Zabbix-Agent 能够一次批量发送多条数据给 Zabbix-Server,属于一对 多的响应模式,对 Zabbix-Server 的性能开销较少,适合大规模环境使 用。 被动模式是指 Zabbix-Server 向 Zabbix-Agent 请求数据,ZabbixAgent 被动接受数据请求后进行回应,属于一对一的响应模式。比如有 100 个监控项,Zabbix-Server 需要向 Zabbix-Agent 请求 100 次,同时, Zabbix-Agent 在响应 Zabbix-Server 时,对监控项数据采集也需要消耗 时间,此时,Zabbix-Server 只能耗着时间安静地等待 Zabbix-Agent。 相对于主动模式的高效,被动模式从时间开销和发送数据量上都处于 劣势,对 Zabbix-Server 的性能开销较大,适合小规模环境使用。 主动模式和被动模式在同一个 Zabbix-Agent 上,是可以共存的, 比如让一部分监控项处于被动模式,另一部分处于主动模式。处于主 动模式的监控项,由 Zabbix-Agent 周期性地采集数据传输给 ZabbixServer;处于被动模式的监控项,则由 Zabbix-Server 周期性地从 Zabbix-Agent 获取数据。
        • 被动模式的工作流程 被动模式的工作流程总结如下: (1)Zabbix-Server 打开一个 TCP 连接。 (2)Zabbix-Server 发送一个 key 为 agent.ping\n 的请求。 (3)Zabbix-Agent 接受这个请求,然后响应数据 <HEADER>< DATALEN>。 (4)Zabbix-Server 对接收到的数据进行处理。 (5)关闭 TCP 连接。
        • Zabbix-Agent 主动向 Zabbix-Server 发送请求的工作流程 在主动模式中,Zabbix-Agent 在启动时就会向 Zabbix-Server 发送 请求,以获取需要主动监控的监控项。这部分的运行流程总结如下: (1)Zabbix-Agent 向 Zabbix-Server 建立一个 TCP 连接。 (2)Zabbix-Agent 请求需要检测的数据列表。 ( 3 ) Zabbix-Server 响 应 Zabbix-Agent , 发 送 一 个 Item 列 表 (Item key、Delay)。 (4)Zabbix-Agent 响应请求。 (5)完成本次会话后关闭 TCP 连接。 (6)Zabbix-Agent 开始周期性地采集数据
        • Zabbix-Agent 发送数据给 Zabbix-Server 的工作流程 当 Zabbix-Agent 将监控项数据采集完成之后,会将数据发送给 Zabbix-Server。这部分的运行流程总结如下: (1)Zabbix-Agent 向 Zabbix-Server 建立一个 TCP 连接。 (2)Zabbix-Agent 将数据发送给 Zabbix-Server,其发送周期等 于 Item 的更新周期。 (3)Zabbix-Server 处理 Zabbix-Agent 发送的数据。 (4)关闭 TCP 连接。
      • 8.4 Zabbix-Trapper(zabbix sender)监控方式

        Zabbix-Trapper 监 控 方 式 可 以 一 次 批 量 发 送 数 据 给 ZabbixServer,与主动模式不同,Zabbix-Trapper 可以让用户控制数据的发 送,而不用 Zabbix-Agent 进程控制,这意味着可以使用 Linux 定时任 务 , 或 者 借 助 其 他 程 序 调 用 Zabbix-Trapper 发 送 数 据 给 ZabbixServer。由于可以一次批量发送更多的数据(为防止数据过大导致内 存溢出,在 Zabbix 4.0 中 Zabbix 协议明确限制单次传输数据的大小最 多为 128MB),因此这种方式的性能比 Zabbix-Agent 主动模式会更好。 在 Zabbix-Trapper 工 作 模 式 中 , Zabbix 发 送 数 据 的 程 序 是 zabbix_sender。

      • 8.5 SNMP 监控方式

        使用 SNMP 可以监控路由器、交换机、打印机、UPS 或者其他开启 SNMP 的设备,如果要支持 SNMP 监控方式,需要 Zabbix-Server 在编译源 码时带上--with-net-snmp 参数。

        • 8.5.1 SNMP 协议概述
        • 8.5.2 SNMP 协议的工作方式
        • 8.5.3 SNMP 协议的工作原理
      • 8.6 SNMPTraps 监控方式

        • 8.6.1 SNMPTraps 的概念

          SNMPTraps 是 SNMP 的被管理端向 SNMP 管理端主动发送数据的过程, 管理端使用 UDP 162 端口接收被管理端发送的数据,这个功能通常用于 故障推送、信息发送等场景中,以便管理端能够在被管理端发生事件 时及时接收到相关信息。

        • 8.6.2 SNMPTraps 的工作原理

          在 Zabbix-Server 服务器中,SNMPTraps 使用 snmptrapd 进程接收 SNMP 被管理端发送过来的数据,然后使用 snmptt 对接收到的数据进行 处理,写入日志文件中,Zabbix-Server 中的 snmptrap 处理进程对日志 进行处理,符合 Zabbix 的数据格式要求,后续对数据进行阈值判断、 告警等处理。

          image

      • 8.7 IPMI 监控方式

        • 8.7.1 IPMI 的概念

          IPMI(Intelligent Platform Management Interface)即智能平 台管理接口,原本是 Intel 架构中企业系统的周边设备所采用的一种工 业标准,后来成为业界通用的标准。 用户可以利用 IPMI 监视服务器的物理特征,如温度、电压、电扇 工作状态、电源供应以及机箱入侵等。

        • 8.7.2 IPMI 的特性

          IPMI 独立于 CPU BIOS 和 OS 自行运行,允许管理者在缺少操作系 统、系统管理软件或受监控的系统关机但接通电源的情况下仍能远端 管理服务器硬件。IPMI 也能在操作系统启动后活动,与系统管理功能 一并使用时还能提供加强功能,IPMI 只定义架构和接口格式成为标 准,具体操作时可能会有所不同。

      • 8.8 JMX 监控方式

        JMX(Java Management Extensions,Java 管理扩展)是 Java 平台 上为应用程序、设备、系统等植入管理功能的框架。JMX 可以跨越一系 列异构操作系统平台、系统体系结构和网络传输协议,灵活地开发无 缝集成的系统、网络和服务管理应用。 JMX 可以获取 Java 应用程序的性能数据,因此,我们可以直接通过 JMX 协议对 Java 应用程序内部进行深入的监控

        • 8.8.1 JMX 在 Zabbix 中的运行流程

          在 Zabbix 中,对 JMX 监控数据的获取由专门的代理程序来完成,即 由 Zabbix-Java-Gateway 负责数据的采集。Zabbix-Java-Gateway 采集 Java 应用程序(已开启 JMX 协议)的性能数据,然后把采集到的数据发 送给 Zabbix-Server

          image

      • 8.9 HTTP agent 监控方式

        HTTP 是互联网中应用最广泛的一种网络协议,主要有 HTTP 和 HTTPS 两种,在 HTTP agent 监控方式中,是由 Zabbix-Server 主动对外发起请 求的,然后目标 URL 响应请求。除支持 Zabbix-Server 主动发起请求 外,HTTP agent 还支持 Zabbix-Porxy 主动对目标 URL 发起请求(即 Item 位于 Proxy 模式的主机中),不需要 Agent 即可采集到数据。

      • 8.10 Web 监控方式

        Web 监控方式是用来监控 Web 程序的,可以监控 Web 程序的下载速 度、返回码及响应时间,还支持将一组连续的 Web 动作作为一个整体进 行监控。

        • 8.10.1 Web 监控的原理

          Web 监控即对 HTTP 服务的监控,模拟用户访问网站,对状态码、返 回字符串等特定的数据进行比较和监控,从而判断网站 Web 服务的可用 性。很多时候,我们可以用脚本、程序来进行自定义监控,如 Linux 下 的命令程序 curl、wget,其他语言提供的 http 库等都可以帮助我们完 成这一需求。

      • 8.11 Dependent item 监控方式

      • 8.12 ODBC 监控方式

      • 8.13 其他监控方式

      • 8.14 命令执行的监控方式

        • 8.14.1 system.run

          system.run 是 Zabbix-Agent 的一个 key,在默认情况下这个 key 是 不 能 使 用 的 。 若 要 使 用 这 个 key , 需 要 在 /etc/zabbix/zabbix_agentd.conf 中 将 EnableRemoteCommands=0 修 改为 EnableRemoteCommands=1(如图 8-73 所示)。注意,如果没有远 程执行命令需要这个 key,那么为了安全考虑,可以将其关闭,在关闭 后,Action 中的远程命令也将无法使用;如果将其开启,则务必保证 Zabbix-Server 和 Zabbix-Agent 之间的通信安全,防止被黑客劫持而造 成损失。

    • 第 9 章 分布式监控与自动化

      • 9.1 Zabbix-Proxy 分布式监控

        Zabbix 是一个分布式的监控系统,即采用一个中心点、多个分节 点的部署模式,适合于跨机房、跨地域的网络环境。 Zabbix-Proxy 的典型工作环境如下: · 监控远程区域,如异地区域。 · 监控网络非直连的区域,如处于 NAT 模式下的设备。 · 分担 Zabbix-Server 服务器的负载,在 Zabbix-Proxy 中预先处 理数据。

        image

        Zabbix-Proxy 支持的监控功能和 Zabbix-Server 差不多,不同的 是,对于需要在数据库层面计算的监控方式,Zabbix-Proxy 不支持, 其他方式均支持,详细支持情况如表 9-1 所示。

        image

        Zabbix-Proxy 和 Zabbix-Server 之间的数据通信,需要一个 TCP 端 口连接,为保证数据传输的安全,可以在网络防火墙层面设置允许 Zabbix-Proxy 和 Zabbix-Server(默认 10051 端口)进行通信。 Zabbix-Proxy 将采集到的数据传送给 Zabbix-Server 之前保存在本 地数据库中。这样的功能设计保证了不会因为 Zabbix-Proxy 临时与 Zabbix-Server 中断而造成监控数据丢失。Zabbix-Proxy 配置文件中的 ProxyLocalBuffer 和 ProxyOfflineBuffer 参数控制数据在本地保存的 时间。

      • 9.2 监控的自动化功能

        首先,Zabbix 提供了网络自动发现功能,该功能可以基于 FTP、 SSH 、 Web 、 LDAP 、 POP3 、 IMAP 、 SMTP 、 TCP 、 SNMP 、 Telnet 、 zabbix_agent 等,主动扫描网络中的协议和服务,当它们存在时,即 认为主机和设备存在,表示该 IP 地址存活,而是否添加到监控,则由 Action 来决定。在 Zabbix 中,网络自动发现和自动注册都具有以上提 到的功能。 其次,Zabbix 提供了对多变的监控项自动发现监控的功能。比 如,服务器有两块网卡,再增加两块网卡,那么新增加的两块网卡如 何做到自动监控?再比如磁盘分区、硬盘设备等,它们存在不确定的 因素,一台服务器可能只有一块硬盘,也可能有多块,那么如何做到 自动监控?如上问题,都可以用 Zabbix 的 LLD 功能轻松解决。即对于监 控项中具有相同的属性,但存在部分变量配置不同的情况,完成自动 添加监控项。 基于 Zabbix 的这两个功能,我们可以实现: · 自动添加主机、模板,自动分组,自动添加监控项、触发器 等。 · 自动添加监控项中有规律的“变量”。 Zabbix 监控的自动化功能如图 9-4 所示。

        image

      • 9.3 网络自动发现

        Zabbix 的网络自动发现是一个非常强大的功能,利用该功能可以 完成以下工作。 · 快速发现并添加主机。 · 进行简单的管理。 · 随着环境的改变而快速搭建监控系统。 网络自动发现基于以下信息: · IP 地址段。 · 基于服务的 FTP、SSH、Web、POP3、IMAP、TCP 等。 · 从 Zabbix-Agent 接收到的信息。 · 从 SNMP agent 接收到的信息。 网络自动发现功能不能做到的事情是发现网络拓扑图。 网络自动发现的两个工作流程是:Discovery 和 Action。

      • 9.4 主动方式的自动注册功能

        主动方式的自动注册(Active agent auto-registration)功能 主要用于 Agent 主动且自动向 Server 注册,即 Agent 处于主动模式,主动 向 Zabbix-Server 发送数据进行注册,如图 9-8 所示。与网络自动发现 具有同样的功能,都能够实现将设备自动添加到监控系统中。但是主 动方式的功能更适合于在特定的环境中使用,当一个条件未知(这里 的未知条件包括 Agent 端的 IP 地址段、Agent 端的操作系统版本等信 息)时,仍然可以实现自动添加监控。它特别适合于当前云环境下的 监控,在云环境中 IP 地址分配、操作系统版本等都可能随机,该功能 可以很好地解决类似的问题。

      • 9.5 监控项自动发现功能

        在 Zabbix 中,由于监控指标都是基于模板进行的,因此会存在模 板的通用性问题。比如 OS 层面的监控,一台服务器具有多块网卡、多 个分区、多块磁盘、多个进程端口等需要监控,因为 Zabbix 提供了 LLD(Low Level Discovery)功能,可以实现一个监控项原型生成多 个监控项的场景

      • 9.6 使用自动化工具 SaltStack 批量部署 Zabbix

        在实际的生产环境中,会对 Zabbix 进行大规模的部署、运维和管 理,此时一套集中的配置管理工具是必需的。自动化部署软件包、管 理配置文件等开源的工具有 Chef、Puppet、SaltStack、Ansible 等, 本节介绍 SaltStack 的安装与配置,其他工具的安装与配置与之类似。

        • 9.6.1 使用 SaltStack 配置管理 Zabbix

          SaltStack 是一个管理配置工具,其作用是为系统管理人员提供标 准 化 的 配 置 管 理 和 命 令 执 行 , 架 构 为 通 用 的 Client/Server ( Master/Minion , 服 务 器 / 客 户 端 ) 或 Client/Proxy/Server(Master/Sync-dic/Minion,服务器/代理/客户 端),通信采用证书认证方式,开发语言为 Python,提供 API,二次开 发 较 容 易 , 可 以 运 行 在 多 种 平 台 上 , 其 官 方 网 址 为 http://www.saltstack.com。 注意:一般采用自动化运维工具进行的配置管理,其软件都应该 采用标准化安装,如 RPM 包安装,需要有软件仓库。因此, 前提是将 Zabbix 放在指定的软件仓库中,定制 RPM 包,相关 内容可参考第 15 章。

    • 第 10 章 监控功能案例

      • 10.1 监控 TCP 连接状态
      • 10.2 监控 Nginx
      • 10.3 监控 PHP-FPM
      • 10.4 监控 MySQL
      • 10.5 监控物理服务器
      • 10.6 监控物理机磁盘
      • 10.7 监控 Cisco 路由器
      • 10.8 监控 VMware
      • 10.9 监控 RabbitMQ
      • 10.10 监控 Elasticsearch
      • 10.11 监控 Kafka
      • 10.12 监控 Redis
      • 10.13 监控 Oracle 数据库
      • 10.14 监控 W ebLogic
      • 10.15 监控 SQL Server
      • 10.16 监控 HTTPS 证书过期
    • 第 11 章 监控数据可视化

      • 11.1 Grafana
      • 11.2 Graphtrees
      • 11.3 谷歌浏览器告警插件
      • 11.4 Mac App 的使用
      • 11.5 手机 App 的使用
      • 11.6 导出实时监控数据
      • 11.7 网络拓扑自动发现
      • 11.8 监控数据可视化的意义
      • 11.9 总结
    • 第 12 章 监控性能优化

      • 12.1 Zabbix 性能优化概述

        image

        image

        Zabbix 性能低下的一些表现如下: · Zabbix 队 列 中 有 太 多 被 延 迟 的 Item , 可 以 通 过 Administration→Queue 查看。 · Zabbix 绘图中经常出现断图,一些 Item 没有数据。 · 带有 nodata()函数的触发器出现告警。 · 前端页面无响应,或者响应很慢。 解决方案如下: · 不使用默认模板,定制自己的模板。 · 调优数据库,使用分布式数据解决方案,使用最新稳定版本, 如 MySQL 5.6/5.7/8.0,一般来说,版本越新,其性能越好。 · 优化架构,如使用分布式架构,各服务器功能独立。 · 调优 Item、Trigger。 · 更换更好的硬件,如硬盘采用 PCI-E SSD。

      • 12.2 Zabbix 性能优化依据

        Zabbix-Server 的缓存监控情况如图 12-3 所示

        image

        监 控 指 标 是 剩 余 量 , 如 果 剩 余 量 非 常 小 , 则 可 以 调 大 zabbix_server.conf 中的缓存参数,直到这里的相关指标数据的剩余 量大于 0 为止。 Zabbix-Server 性能的监控指标有以下两个: · 每秒处理数据的数量。 · 等待的队列数量。 监控 Zabbix-Server 内部的进程运行情况,如图 12-4 所示。

        image

        查看等待的队列,如图 12-5 所示。

        image

        等待的队列越多,说明 Zabbix-Server 性能越差。

        衡量 Zabbix-Server 服务处理性能的一个指标是每秒新处理的数据 个数,英文缩写是 NVPS。在 Zabbix 4.0 中,从 zabbix_server 进程端口 中获取 NVPS,查看前端代码

      • 12.3 Zabbix 配置文件参数的优化

        在 Zabbix-Server 中,调整配置文件中的参数,可以设置的内容如 下: · 进程的数量。 · 缓存的大小。 · 超时时间。

      • 12.4 Zabbix 架构的优化

        Zabbix 架构有以下两种模式: · Server/Agent 模式。 · Serve/Proxy/Agent 模式。 通过采用分布式模式,可以大大降低服务器的负担,从而大大提 升单台服务器的性能。

      • 12.5 Item 的工作模式及 Trigger 的优化

        Zabbix 中的 Item 默认工作于被动模式下,但可以通过设置主动模 式来提升服务器的性能。 Item 除可以采用主动模式外,还可以采用 Trapper 工作模式,通过 zabbix_sender 程序发送数据,此种模式也具有很高的性能(请参考本 书 8.4 节)。 Trigger 中正则表达式函数 last()、nodata()的处理速度是最快 的,min()、max()、avg()的处理速度是最慢的,尽量使用处理速度快 的函数,并根据实际情况来权衡使用哪个函数。 在 Trigger 的配置中,需要注意一些表达式,如果配置失误,则很 可能会由于一个函数的逻辑错误而导致数据库查询较慢。

      • 12.6 Zabbix 数据库的优化

        Zabbix 数据库的优化分为以下几个部分。 · 对数据库本身的优化。采用更高性能的数据库版本,如选择 Percona(在最新版本的性能对比中,和 MySQL 官方版本相比, 性能相差不是特别的大),选用最新版本的 MySQL。 · 对数据库本身的参数进行调优配置。 · 对 Zabbix 数据库结构进行优化,采用诸如表分区的方案,表分 区在删除一个区间的数据时速度非常快,如删除 200GB 的数据, 也只需要 1 分钟。因此 Zabbix 数据库结构优化一般就采用表分区 的方式,方法是对 history. 、trends. 等表进行分表操作,从 而降低 Zabbix 数据库的压力。具体实施方法,请读者参考第 3 章 的内容。 · 采用数据库中间件的方式。 在进行分表操作时,我们是直接关闭 Housekeeper 的,因为 MySQL 执行 DELETE(删除)操作非常低效,而采用表分区删除却非常高效。 zabbix_server.conf 中的 LogSlowQueries 参数设置是关于慢查询 的,比如将超过 1000ms 的查询记录到日志中,就将其值设置为 1000。 开启这个参数可以对慢查询继续记录,方便调优配置。 更 多 MySQL 参 数 的 配 置 , 读 者 可 以 参 考 https://github.com/zabbix-book/MySQL_conf,此处省略相关配置, 因为本书的主体不是 MySQL 配置的优化。

      • 12.7 Zabbix 运行硬件的优化

        通常,在优化软件无效的情况下,更换成更好的物理硬件会有非 常明显的效果,如选用 RAID10、SSD 固态硬盘、多核 CPU、大容量内存 等硬件配置,如果使用云主机,则更换为高配即可。

      • 12.8 Zabbix 压力测试

        12.8.1 压力测试原理

        Zabbix-Server 对 Zabbix-Agent 的监控项取值时间间隔,最小值限 制为 1s(但是对于 zabbix_sender,则可以取小于 1s 的值存储时间间 隔)。因此,我们通过创建大量的监控项,让监控项 1s 更新一个数 据,对同一个 Zabbix-Agent 频繁地大量获取数据,即可模拟出真实的 压力情况。

      • 12.9 Zabbix-Server 内部实现原理

        • Zabbix-Server 的整体流程

          在 Zabbix 内部的进程中,进程和缓存之间是相互关联的。或许读 者会有这样的疑问:为什么 Zabbix 使用关系型数据库存储配置数据, 但速度却不慢,而自己写程序直接读取关系型数据库速度却不够理 想?为什么 Zabbix 没有使用 RabbitMQ 这样专业的消息队列?为什么 Zabbix 没有使用第三方的 NoSQL 缓存?这是因为 Zabbix 具有良好的软件 架构设计,在内部通过高性能的算法实现了队列、缓存等技术。当 然,只有一层缓存是不够的,还需要通过分层的缓存设计,让不同层 级的缓存解决不同的问题,最终让程序尽量少地访问关系型数据库。 在 Zabbix 中,缓存有以下几类。 (1)配置缓存:将主机组、主机、模板、全局宏、主机宏、监控 项、触发器表达式、Action 的条件和动作、告警聚合条件和动作等的 数据同步到内存中。 (2)历史数据缓存:将采集到的监控数据,经过预处理进程处理 后进行缓存。 (3)趋势数据缓存:将趋势数据存储到内存中。 (4)指标数据缓存:数据归档,将历史数据归档为趋势数据时, 从指标数据缓存中读取;触发告警事件,对需要告警的监控指标进行 判断,如涉及历史数据的告警指标判断,会从指标数据缓存中读取数 据,而不是从数据库中直接读取的。 以上缓存和其他进程中的流程与数据走向,以及如何通信,我们 可以通过图 12-14 来了解。看懂这个图后,我们对配置参数的优化思路 会更加明晰。

          image

        • Zabbix-Server 采集器的工作流程

          我们学习了 Zabbix 监控数据的采集方式,但读者 是否意识到一个问题,这样的采集功能是如何高效工作的?配置数据 又这么复杂,会不会很低效?答案就在本节中。 采集进程在读取采集任务时,首先从配置缓存中获取数据,只有 在需要更新主机可用性状态,或者处理 LLD 数据时,才会与数据库交互 写入数据,而绝大多数时候是直接读写缓存的,从而提高了处理性 能。如图 12-15 所示为 Zabbix-Server 数据采集的流程,展示了 Zabbix 内部的采集器是如何在缓存和数据库之间进行交互的。 我们看到,对于每种数据采集器所采集到的数据,当需要预处理 时都会通过预处理进程进行处理,流程如图 12-16 所示。

          image

          image

        • 12.9.3 Zabbix-Proxy 工作流程

          image

        • 12.9.4 Zabbix-Server 告警的工作流程

          Zabbix-Server 告警支持多进程,并且可以自定义脚本,其高效的 告警离不开内部缓存的支持,工作流程如图 12-18 所示

          image

      • 12.10 Zabbix-Server 配置参数

        image

      • 12.11 Zabbix-Server 性能优化总结

        其思路无非就是本身配置的优化、 数据库的优化,在做了这一系列优化后,其效果会比较明显,对于中 小规模的环境,Zabbix 能够运行良好;但对于超大规模的环境,可能 就会出现另一种局面了。由于 Zabbix 本身的一些限制,其无法横向扩 展,无法使用第三方消息队列,也不支持集群。因此,在超大规模的 环境中其存在天然的缺陷,尤其是在飞速发展的互联网环境中,加之 本身的监控方式具有限制(虽然足够良好,但仍无非满足某些场合的 需求,如把 Zabbix 当日志采集、APM 数据采集等功能使用时),因此要 取得非常理想的优化效果是非常困难的。只能从代码级别进行二次开 发优化,改造成适合超大规模环境的架构,但其改造成本不低。

    • 第 13 章 Zabbix API 的使用

      • 13.1 Zabbix API 简介
      • 13.2 JSON-RPC
      • 13.3 Zabbix API 的使用流程
      • 13.4 第三方 Zabbix API 模块
      • 13.5 编写命令行管理工具 zbx-tool
    • 第 14 章 安装与部署的扩展

      • 14.1 源码安装 Zabbix-Server
      • 14.2 源码安装 Zabbix-Agent
      • 14.3 定制安装包
      • 14.4 使用 RPMbuild 定制 RPM 包
      • 14.5 使用 Elasticsearch 作为数据库
    • 第 15 章 分布式监控项目实践

      • 15.1 监控系统项目概述

        在大规模的监控系统中,需要考虑以下因素。 第一,分布式架构是首要考虑因素。要求系统架构具备分布式的 设计,原则是将中心节点压力分散在各边缘节点上,使其尽可能监控 更多的设备。 第二,数据存储扩展的问题。节点数量增加到一定规模后,给监 控数据的存储带来了十分严峻的挑战,数据存储扩展的问题是整个监 控系统能否正常工作的前提条件。 第三,高可用性和健壮性、稳定可靠的系统架构、冗余的灾备, 是大型监控系统必备条件。 第四,提供 API 的能力,易于与第三方集成。在大型环境中,一个 孤立的监控系统会给其他业务系统造成很大的麻烦,通常需要花费更 多的精力进行改造,使其为其他系统提供所需的数据。 第五,具备自动化功能。自动化是解放繁重的体力劳动最有效的 方式,未来的运维一定更智能、更偏向于业务,以业务为核心,而不 是仅仅解决系统的底层问题。 以上观点适用于任何监控系统,而不仅仅是 Zabbix。

      • 15.2 监控系统项目的背景

        在 IT 运维管理中,日常的工作可以分为三类:一是基础环境搭 建;二是维护与更新;三是监控告警与调整优化。在维护与更新的工 作中,可以采用手动或自动化工具来实现,均可以满足不同企业的需 求。对于配置统一、基础环境一致的环境,通常会采用统一的配置管 理工具,如 Puppet、SaltStack、Ansible、Chef 等。而有些环境,配 置变更不频繁,其没法统一管理,如一年半载可能才发生一次变更, 而相同规模的设备不多,在这种情况下,配置管理工具就无法发挥它 的优势了。但是对于监控告警系统,无论是互联网公司还是传统公 司,都是必不可少的,因为 IT 设备并不是 100% 可靠的,就算是 100% 可 靠的设备,也会有人为因素造成服务不可用。因此,集中的监控告警 平台建设,是每个公司 IT 部门都十分关心的问题,即使是不懂 IT 技术 的公司成员,也知道监控告警系统是必需的。 在了解了 IT 监控系统的重要性后,我们来看看具体的监控需求。 一般来说,监控系统的构建可以分为如下几个层面。 (1)基础架构设施的监控,包括硬件服务器、存储、网络、虚拟 化等。 (2)应用存活与基本性能的监控,包括数据库、Web 应用、中间 件、消息队列、缓存等。 (3)代码内部的工作状态监控,这属于监控的细分领域,需要采 用其他技术来实现,如采用开源的 APM 监控工具 PinPoint、Zipkin、 CAT、OpenTraceing 等,这种层面的监控,需要软件工程师在编写业务 代码时,采用业务监控指标的埋点,进行整个业务调用链的监控,一 般需要软件架构师来规划设计,项目的整体推动实现过程通常较难。 (4)日志流监控,监控应用设备和应用软件的日志,并从日志中 提取相关的指标进行分析,其实现方式有开源的套件 ELK 等。 在 Zabbix 能够支持的监控范围中,上面提到的(1)(2)(4)部 分的功能被支持。所以,在构建监控系统之前,必须明白监控的具体 需求范围,以免范围扩大,从而造成需求蔓延和监控系统使用效果满 意度的下降。 在通常意义的监控建设项目中,一般的需求有:建立基于网络、 存储、虚拟化、应用、数据库系统、缓存、消息队列等的监控预警体 系,设备和服务的宕机、恢复均需要实时反馈给运维团队。监控目标 触发预警后可以设置重复的轮询作业确认问题是否存在。设置合理的 预警级别,根据预警的重要程度、紧急程度、问题处理程度,预警反 馈给不同级别的人员。 在监控系统的构建过程中,监控系统并不是孤立存在的,它往往 需要与其他系统打通,形成闭环,让工作的各个环节进行流通。因 此,企业在建立监控系统的过程中,往往是按照标准产品,加上个性 化定制来实现的。 在 IT 运维管理框架中,往往从逻辑结构上划分为五个平台和一个 中心配置库(简称“五台一库”),分别是集中监控平台、流程管理 平台、数据展现平台、自动化操作平台、历史数据分析平台和配置管 理数据库(CMDB)。它们的功能如下。 (1)监控平台:构建整个 IT 监控架构,实现集中事件管理,并为 面向业务的监控管理打下基础。 (2)流程管理平台:整合并标准化运维的日常工作,将日常的工 作规范化,并透明化。 (3)数据展现平台:建设统一报表平台和统一门户平台,将有效 增强数据利用和展示效果。 (4)自动化操作平台:完成对整个 IT 操作的集中管控和自动化。 (5)历史数据分析平台:集中存放历史数据,提供后期统一分析 及规划。 (6)配置管理数据库:记录完整的、准确的 IT 环境中各组件的信 息和彼此间的关联关系,作为唯一、可信的数据源,为周边系统提供 支撑数据。 因此,在这种背景环境下,我们需要重新审视企业中的 IT 监控系 统项目。无论是高速发展的互联网企业,还是平稳发展的传统企业, 抑或是金融保险企业,其构建监控系统的目的都一样,都是通过监控 系统发现故障与问题,并及时通知相关负责人,一线工程师能够根据 故障报告快速处理,并对处理的过程和结果进行整理分析,形成知识 积累,对于可以预见的常规故障,制定出应急方案。

      • 15.3 监控系统项目的步骤

      • 15.4 监控系统项目的规划——工作计划

      • 15.5 监控系统项目的启动——需求调研

      • 15.6 监控系统架构的设计——架构设计图

      • 15.7 监控系统项目的推进——软硬件环境配置

      • 15.8 监控系统项目的实施——安装与部署

      • 15.9 监控功能的实现——配置与定制开发

      • 15.10 监控系统与其他系统的集成

      • 15.11 监控系统项目的总结

    • 第 16 章 后记——探究监控系统

      • 16.1 监控系统的使用场景
      • 16.2 如何设置监控指标
      • 16.3 如何度量设置告警指标
      • 16.4 如何发送告警与处理告警风暴
      • 16.5 告警轮班机制
      • 16.6 DevOps 与监控
      • 16.7 ITIL 与监控
  • 实战:

    • zabbix 作业训练

      • 1 实现对系统层的监控 监控 cpu 内存 硬盘 磁盘 (可以用模板)
      • 2 .实现 zabbix 比如 80 端口进程宕机 邮件报警 实战演示
      • 3 监控一个 ip 状态 是否正常
      • 4.主动模式和被动模式的区别
        被动模式:服务端发送一条指令,客户端就执行一次,100 条指令就需要来回 100 次
        主动模式:agent 主动采集,采集完一起发给 server ,server 端不干预,大大减轻 server 压力
      • 5.监控 mysql 性能的监控
      • 6.实战演示 自动注册功能,实现批量自动监控服务器

  1. zabbix 服务端一键安装初始配置脚本

    简易脚本,初始化数据库可以改,centos7.9 亲测完美执行

    #!/bin/bash
    
    # 关闭SELinux、暂停防火墙
    setenforce 0
    systemctl stop firewalld
    # 中文乱码修正
    yum install -y wqy-microhei-fonts
    \cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
    
    # 安装Zabbix
    rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
    sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
    yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
    systemctl start mariadb.service && systemctl enable mariadb.service
    echo "rpm和yum安装Zabbixc完成"
    
    # 初始化数据库
    # mysql_secure_installation
    mysqladmin password 123456
    mysql -uroot -p123456 <<EOF
    CREATE DATABASE zabbix character set utf8 collate utf8_bin;
    GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix';
    FLUSH PRIVILEGES;
    EOF
    echo "初始化数据库完成"
    # 备份并修改Zabbix服务器配置
    cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server_$(date +%Y%m%d).conf
    cat > /etc/zabbix/zabbix_server.conf << EOF
    # This is a configuration file for Zabbix server daemon
    # To get more information about Zabbix, visit http://www.zabbix.com
    
    ############ GENERAL PARAMETERS #################
    
    ### Option: ListenPort
    #	Listen port for trapper.
    #
    # Mandatory: no
    # Range: 1024-32767
    # Default:
    # ListenPort=10051
    
    ### Option: SourceIP
    #	Source IP address for outgoing connections.
    #
    # Mandatory: no
    # Default:
    # SourceIP=
    
    ### Option: LogType
    #	Specifies where log messages are written to:
    #		system  - syslog
    #		file    - file specified with LogFile parameter
    #		console - standard output
    #
    # Mandatory: no
    # Default:
    # LogType=file
    
    ### Option: LogFile
    #	Log file name for LogType 'file' parameter.
    #
    # Mandatory: yes, if LogType is set to file, otherwise no
    # Default:
    # LogFile=
    
    LogFile=/var/log/zabbix/zabbix_server.log
    
    ### Option: LogFileSize
    #	Maximum size of log file in MB.
    #	0 - disable automatic log rotation.
    #
    # Mandatory: no
    # Range: 0-1024
    # Default:
    # LogFileSize=1
    
    LogFileSize=0
    
    ### Option: DebugLevel
    #	Specifies debug level:
    #	0 - basic information about starting and stopping of Zabbix processes
    #	1 - critical information
    #	2 - error information
    #	3 - warnings
    #	4 - for debugging (produces lots of information)
    #	5 - extended debugging (produces even more information)
    #
    # Mandatory: no
    # Range: 0-5
    # Default:
    # DebugLevel=3
    
    ### Option: PidFile
    #	Name of PID file.
    #
    # Mandatory: no
    # Default:
    # PidFile=/tmp/zabbix_server.pid
    
    PidFile=/var/run/zabbix/zabbix_server.pid
    
    ### Option: SocketDir
    #	IPC socket directory.
    #       Directory to store IPC sockets used by internal Zabbix services.
    #
    # Mandatory: no
    # Default:
    # SocketDir=/tmp
    
    SocketDir=/var/run/zabbix
    
    ### Option: DBHost
    #	Database host name.
    #	If set to localhost, socket is used for MySQL.
    #	If set to empty string, socket is used for PostgreSQL.
    #
    # Mandatory: no
    # Default:
    DBHost=localhost
    
    ### Option: DBName
    #	Database name.
    #
    # Mandatory: yes
    # Default:
    # DBName=
    
    DBName=zabbix
    
    ### Option: DBSchema
    #	Schema name. Used for IBM DB2 and PostgreSQL.
    #
    # Mandatory: no
    # Default:
    # DBSchema=
    
    ### Option: DBUser
    #	Database user.
    #
    # Mandatory: no
    # Default:
    # DBUser=
    
    DBUser=zabbix
    
    ### Option: DBPassword
    #	Database password.
    #	Comment this line if no password is used.
    #
    # Mandatory: no
    # Default:
    DBPassword=zabbix
    
    ### Option: DBSocket
    #	Path to MySQL socket.
    #
    # Mandatory: no
    # Default:
    # DBSocket=
    
    ### Option: DBPort
    #	Database port when not using local socket.
    #
    # Mandatory: no
    # Range: 1024-65535
    # Default:
    # DBPort=
    
    ### Option: HistoryStorageURL
    #	History storage HTTP[S] URL.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageURL=
    
    ### Option: HistoryStorageTypes
    #	Comma separated list of value types to be sent to the history storage.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageTypes=uint,dbl,str,log,text
    
    ### Option: HistoryStorageDateIndex
    #	Enable preprocessing of history values in history storage to store values in different indices based on date.
    #	0 - disable
    #	1 - enable
    #
    # Mandatory: no
    # Default:
    # HistoryStorageDateIndex=0
    
    ### Option: ExportDir
    #	Directory for real time export of events, history and trends in newline delimited JSON format.
    #	If set, enables real time export.
    #
    # Mandatory: no
    # Default:
    # ExportDir=
    
    ### Option: ExportFileSize
    #	Maximum size per export file in bytes.
    #	Only used for rotation if ExportDir is set.
    #
    # Mandatory: no
    # Range: 1M-1G
    # Default:
    # ExportFileSize=1G
    
    ############ ADVANCED PARAMETERS ################
    
    ### Option: StartPollers
    #	Number of pre-forked instances of pollers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartPollers=5
    
    ### Option: StartIPMIPollers
    #	Number of pre-forked instances of IPMI pollers.
    #       The IPMI manager process is automatically started when at least one IPMI poller is started.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartIPMIPollers=0
    
    ### Option: StartPreprocessors
    #	Number of pre-forked instances of preprocessing workers.
    #       The preprocessing manager process is automatically started when preprocessor worker is started.
    #
    # Mandatory: no
    # Range: 1-1000
    # Default:
    # StartPreprocessors=3
    
    ### Option: StartPollersUnreachable
    #	Number of pre-forked instances of pollers for unreachable hosts (including IPMI and Java).
    #	At least one poller for unreachable hosts must be running if regular, IPMI or Java pollers
    #	are started.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartPollersUnreachable=1
    
    ### Option: StartTrappers
    #	Number of pre-forked instances of trappers.
    #	Trappers accept incoming connections from Zabbix sender, active agents and active proxies.
    #	At least one trapper process must be running to display server availability and view queue
    #	in the frontend.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartTrappers=5
    
    ### Option: StartPingers
    #	Number of pre-forked instances of ICMP pingers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartPingers=1
    
    ### Option: StartDiscoverers
    #	Number of pre-forked instances of discoverers.
    #
    # Mandatory: no
    # Range: 0-250
    # Default:
    # StartDiscoverers=1
    
    ### Option: StartHTTPPollers
    #	Number of pre-forked instances of HTTP pollers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartHTTPPollers=1
    
    ### Option: StartTimers
    #	Number of pre-forked instances of timers.
    #	Timers process maintenance periods.
    #	Only the first timer process handles host maintenance updates. Problem suppression updates are shared
    #	between all timers.
    #
    # Mandatory: no
    # Range: 1-1000
    # Default:
    # StartTimers=1
    
    ### Option: StartEscalators
    #	Number of pre-forked instances of escalators.
    #
    # Mandatory: no
    # Range: 0-100
    # Default:
    # StartEscalators=1
    
    ### Option: StartAlerters
    #	Number of pre-forked instances of alerters.
    #	Alerters send the notifications created by action operations.
    #
    # Mandatory: no
    # Range: 0-100
    # Default:
    # StartAlerters=3
    
    ### Option: JavaGateway
    #	IP address (or hostname) of Zabbix Java gateway.
    #	Only required if Java pollers are started.
    #
    # Mandatory: no
    # Default:
    # JavaGateway=
    
    ### Option: JavaGatewayPort
    #	Port that Zabbix Java gateway listens on.
    #
    # Mandatory: no
    # Range: 1024-32767
    # Default:
    # JavaGatewayPort=10052
    
    ### Option: StartJavaPollers
    #	Number of pre-forked instances of Java pollers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartJavaPollers=0
    
    ### Option: StartVMwareCollectors
    #	Number of pre-forked vmware collector instances.
    #
    # Mandatory: no
    # Range: 0-250
    # Default:
    # StartVMwareCollectors=0
    
    ### Option: VMwareFrequency
    #	How often Zabbix will connect to VMware service to obtain a new data.
    #
    # Mandatory: no
    # Range: 10-86400
    # Default:
    # VMwareFrequency=60
    
    ### Option: VMwarePerfFrequency
    #	How often Zabbix will connect to VMware service to obtain performance data.
    #
    # Mandatory: no
    # Range: 10-86400
    # Default:
    # VMwarePerfFrequency=60
    
    ### Option: VMwareCacheSize
    #	Size of VMware cache, in bytes.
    #	Shared memory size for storing VMware data.
    #	Only used if VMware collectors are started.
    #
    # Mandatory: no
    # Range: 256K-2G
    # Default:
    # VMwareCacheSize=8M
    
    ### Option: VMwareTimeout
    #	Specifies how many seconds vmware collector waits for response from VMware service.
    #
    # Mandatory: no
    # Range: 1-300
    # Default:
    # VMwareTimeout=10
    
    ### Option: SNMPTrapperFile
    #	Temporary file used for passing data from SNMP trap daemon to the server.
    #	Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
    #
    # Mandatory: no
    # Default:
    # SNMPTrapperFile=/tmp/zabbix_traps.tmp
    
    SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
    
    ### Option: StartSNMPTrapper
    #	If 1, SNMP trapper process is started.
    #
    # Mandatory: no
    # Range: 0-1
    # Default:
    # StartSNMPTrapper=0
    
    ### Option: ListenIP
    #	List of comma delimited IP addresses that the trapper should listen on.
    #	Trapper will listen on all network interfaces if this parameter is missing.
    #
    # Mandatory: no
    # Default:
    # ListenIP=0.0.0.0
    
    ### Option: HousekeepingFrequency
    #	How often Zabbix will perform housekeeping procedure (in hours).
    #	Housekeeping is removing outdated information from the database.
    #	To prevent Housekeeper from being overloaded, no more than 4 times HousekeepingFrequency
    #	hours of outdated information are deleted in one housekeeping cycle, for each item.
    #	To lower load on server startup housekeeping is postponed for 30 minutes after server start.
    #	With HousekeepingFrequency=0 the housekeeper can be only executed using the runtime control option.
    #	In this case the period of outdated information deleted in one housekeeping cycle is 4 times the
    #	period since the last housekeeping cycle, but not less than 4 hours and not greater than 4 days.
    #
    # Mandatory: no
    # Range: 0-24
    # Default:
    # HousekeepingFrequency=1
    
    ### Option: MaxHousekeeperDelete
    #	The table "housekeeper" contains "tasks" for housekeeping procedure in the format:
    #	[housekeeperid], [tablename], [field], [value].
    #	No more than 'MaxHousekeeperDelete' rows (corresponding to [tablename], [field], [value])
    #	will be deleted per one task in one housekeeping cycle.
    #	If set to 0 then no limit is used at all. In this case you must know what you are doing!
    #
    # Mandatory: no
    # Range: 0-1000000
    # Default:
    # MaxHousekeeperDelete=5000
    
    ### Option: CacheSize
    #	Size of configuration cache, in bytes.
    #	Shared memory size for storing host, item and trigger data.
    #
    # Mandatory: no
    # Range: 128K-64G
    # Default:
    # CacheSize=8M
    
    ### Option: CacheUpdateFrequency
    #	How often Zabbix will perform update of configuration cache, in seconds.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # CacheUpdateFrequency=60
    
    ### Option: StartDBSyncers
    #	Number of pre-forked instances of DB Syncers.
    #
    # Mandatory: no
    # Range: 1-100
    # Default:
    # StartDBSyncers=4
    
    ### Option: HistoryCacheSize
    #	Size of history cache, in bytes.
    #	Shared memory size for storing history data.
    #
    # Mandatory: no
    # Range: 128K-2G
    # Default:
    # HistoryCacheSize=16M
    
    ### Option: HistoryIndexCacheSize
    #	Size of history index cache, in bytes.
    #	Shared memory size for indexing history cache.
    #
    # Mandatory: no
    # Range: 128K-2G
    # Default:
    # HistoryIndexCacheSize=4M
    
    ### Option: TrendCacheSize
    #	Size of trend cache, in bytes.
    #	Shared memory size for storing trends data.
    #
    # Mandatory: no
    # Range: 128K-2G
    # Default:
    # TrendCacheSize=4M
    
    ### Option: ValueCacheSize
    #	Size of history value cache, in bytes.
    #	Shared memory size for caching item history data requests.
    #	Setting to 0 disables value cache.
    #
    # Mandatory: no
    # Range: 0,128K-64G
    # Default:
    # ValueCacheSize=8M
    
    ### Option: Timeout
    #	Specifies how long we wait for agent, SNMP device or external check (in seconds).
    #
    # Mandatory: no
    # Range: 1-30
    # Default:
    # Timeout=3
    
    Timeout=4
    
    ### Option: TrapperTimeout
    #	Specifies how many seconds trapper may spend processing new data.
    #
    # Mandatory: no
    # Range: 1-300
    # Default:
    # TrapperTimeout=300
    
    ### Option: UnreachablePeriod
    #	After how many seconds of unreachability treat a host as unavailable.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # UnreachablePeriod=45
    
    ### Option: UnavailableDelay
    #	How often host is checked for availability during the unavailability period, in seconds.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # UnavailableDelay=60
    
    ### Option: UnreachableDelay
    #	How often host is checked for availability during the unreachability period, in seconds.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # UnreachableDelay=15
    
    ### Option: AlertScriptsPath
    #	Full path to location of custom alert scripts.
    #	Default depends on compilation options.
    #	To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # AlertScriptsPath=${datadir}/zabbix/alertscripts
    
    AlertScriptsPath=/usr/lib/zabbix/alertscripts
    
    ### Option: ExternalScripts
    #	Full path to location of external scripts.
    #	Default depends on compilation options.
    #	To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # ExternalScripts=${datadir}/zabbix/externalscripts
    
    ExternalScripts=/usr/lib/zabbix/externalscripts
    
    ### Option: FpingLocation
    #	Location of fping.
    #	Make sure that fping binary has root ownership and SUID flag set.
    #
    # Mandatory: no
    # Default:
    # FpingLocation=/usr/sbin/fping
    
    ### Option: Fping6Location
    #	Location of fping6.
    #	Make sure that fping6 binary has root ownership and SUID flag set.
    #	Make empty if your fping utility is capable to process IPv6 addresses.
    #
    # Mandatory: no
    # Default:
    # Fping6Location=/usr/sbin/fping6
    
    ### Option: SSHKeyLocation
    #	Location of public and private keys for SSH checks and actions.
    #
    # Mandatory: no
    # Default:
    # SSHKeyLocation=
    
    ### Option: LogSlowQueries
    #	How long a database query may take before being logged (in milliseconds).
    #	Only works if DebugLevel set to 3, 4 or 5.
    #	0 - don't log slow queries.
    #
    # Mandatory: no
    # Range: 1-3600000
    # Default:
    # LogSlowQueries=0
    
    LogSlowQueries=3000
    
    ### Option: TmpDir
    #	Temporary directory.
    #
    # Mandatory: no
    # Default:
    # TmpDir=/tmp
    
    ### Option: StartProxyPollers
    #	Number of pre-forked instances of pollers for passive proxies.
    #
    # Mandatory: no
    # Range: 0-250
    # Default:
    # StartProxyPollers=1
    
    ### Option: ProxyConfigFrequency
    #	How often Zabbix Server sends configuration data to a Zabbix Proxy in seconds.
    #	This parameter is used only for proxies in the passive mode.
    #
    # Mandatory: no
    # Range: 1-3600*24*7
    # Default:
    # ProxyConfigFrequency=3600
    
    ### Option: ProxyDataFrequency
    #	How often Zabbix Server requests history data from a Zabbix Proxy in seconds.
    #	This parameter is used only for proxies in the passive mode.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # ProxyDataFrequency=1
    
    ### Option: AllowRoot
    #	Allow the server to run as 'root'. If disabled and the server is started by 'root', the server
    #	will try to switch to the user specified by the User configuration option instead.
    #	Has no effect if started under a regular user.
    #	0 - do not allow
    #	1 - allow
    #
    # Mandatory: no
    # Default:
    # AllowRoot=0
    
    ### Option: User
    #	Drop privileges to a specific, existing user on the system.
    #	Only has effect if run as 'root' and AllowRoot is disabled.
    #
    # Mandatory: no
    # Default:
    # User=zabbix
    
    ### Option: Include
    #	You may include individual files or all files in a directory in the configuration file.
    #	Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
    #
    # Mandatory: no
    # Default:
    # Include=
    
    # Include=/usr/local/etc/zabbix_server.general.conf
    # Include=/usr/local/etc/zabbix_server.conf.d/
    # Include=/usr/local/etc/zabbix_server.conf.d/*.conf
    
    ### Option: SSLCertLocation
    #	Location of SSL client certificates.
    #	This parameter is used only in web monitoring.
    #	Default depends on compilation options.
    #	To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # SSLCertLocation=${datadir}/zabbix/ssl/certs
    
    ### Option: SSLKeyLocation
    #	Location of private keys for SSL client certificates.
    #	This parameter is used only in web monitoring.
    #	Default depends on compilation options.
    #	To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # SSLKeyLocation=${datadir}/zabbix/ssl/keys
    
    ### Option: SSLCALocation
    #	Override the location of certificate authority (CA) files for SSL server certificate verification.
    #	If not set, system-wide directory will be used.
    #	This parameter is used only in web monitoring and SMTP authentication.
    #
    # Mandatory: no
    # Default:
    # SSLCALocation=
    
    ### Option: StatsAllowedIP
    #	List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of external Zabbix instances.
    #	Stats request will be accepted only from the addresses listed here. If this parameter is not set no stats requests
    #	will be accepted.
    #	If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
    #	and '::/0' will allow any IPv4 or IPv6 address.
    #	'0.0.0.0/0' can be used to allow any IPv4 address.
    #	Example: StatsAllowedIP=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
    #
    # Mandatory: no
    # Default:
    # StatsAllowedIP=
    
    ####### LOADABLE MODULES #######
    
    ### Option: LoadModulePath
    #	Full path to location of server modules.
    #	Default depends on compilation options.
    #	To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # LoadModulePath=${libdir}/modules
    
    ### Option: LoadModule
    #	Module to load at server startup. Modules are used to extend functionality of the server.
    #	Formats:
    #		LoadModule=<module.so>
    #		LoadModule=<path/module.so>
    #		LoadModule=</abs_path/module.so>
    #	Either the module must be located in directory specified by LoadModulePath or the path must precede the module name.
    #	If the preceding path is absolute (starts with '/') then LoadModulePath is ignored.
    #	It is allowed to include multiple LoadModule parameters.
    #
    # Mandatory: no
    # Default:
    # LoadModule=
    
    ####### TLS-RELATED PARAMETERS #######
    
    ### Option: TLSCAFile
    #	Full pathname of a file containing the top-level CA(s) certificates for
    #	peer certificate verification.
    #
    # Mandatory: no
    # Default:
    # TLSCAFile=
    
    ### Option: TLSCRLFile
    #	Full pathname of a file containing revoked certificates.
    #
    # Mandatory: no
    # Default:
    # TLSCRLFile=
    
    ### Option: TLSCertFile
    #	Full pathname of a file containing the server certificate or certificate chain.
    #
    # Mandatory: no
    # Default:
    # TLSCertFile=
    
    ### Option: TLSKeyFile
    #	Full pathname of a file containing the server private key.
    #
    # Mandatory: no
    # Default:
    # TLSKeyFile=
    
    ####### For advanced users - TLS ciphersuite selection criteria #######
    
    ### Option: TLSCipherCert13
    #	Cipher string for OpenSSL 1.1.1 or newer in TLS 1.3.
    #	Override the default ciphersuite selection criteria for certificate-based encryption.
    #
    # Mandatory: no
    # Default:
    # TLSCipherCert13=
    
    ### Option: TLSCipherCert
    #	GnuTLS priority string or OpenSSL (TLS 1.2) cipher string.
    #	Override the default ciphersuite selection criteria for certificate-based encryption.
    #	Example for GnuTLS:
    #		NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
    #	Example for OpenSSL:
    #		EECDH+aRSA+AES128:RSA+aRSA+AES128
    #
    # Mandatory: no
    # Default:
    # TLSCipherCert=
    
    ### Option: TLSCipherPSK13
    #	Cipher string for OpenSSL 1.1.1 or newer in TLS 1.3.
    #	Override the default ciphersuite selection criteria for PSK-based encryption.
    #	Example:
    #		TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
    #
    # Mandatory: no
    # Default:
    # TLSCipherPSK13=
    
    ### Option: TLSCipherPSK
    #	GnuTLS priority string or OpenSSL (TLS 1.2) cipher string.
    #	Override the default ciphersuite selection criteria for PSK-based encryption.
    #	Example for GnuTLS:
    #		NONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL
    #	Example for OpenSSL:
    #		kECDHEPSK+AES128:kPSK+AES128
    #
    # Mandatory: no
    # Default:
    # TLSCipherPSK=
    
    ### Option: TLSCipherAll13
    #	Cipher string for OpenSSL 1.1.1 or newer in TLS 1.3.
    #	Override the default ciphersuite selection criteria for certificate- and PSK-based encryption.
    #	Example:
    #		TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
    #
    # Mandatory: no
    # Default:
    # TLSCipherAll13=
    
    ### Option: TLSCipherAll
    #	GnuTLS priority string or OpenSSL (TLS 1.2) cipher string.
    #	Override the default ciphersuite selection criteria for certificate- and PSK-based encryption.
    #	Example for GnuTLS:
    #		NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
    #	Example for OpenSSL:
    #		EECDH+aRSA+AES128:RSA+aRSA+AES128:kECDHEPSK+AES128:kPSK+AES128
    #
    # Mandatory: no
    # Default:
    # TLSCipherAll=
    
    EOF
    
    echo "备份并修改Zabbix服务器配置完成"
    
    # 获取最新的create.sql文件并导入到数据库
    latest_sql_file=$(ls /usr/share/doc/ | grep 'zabbix-server-mysql' | sort -V | tail -1)
    zcat "/usr/share/doc/${latest_sql_file}/create.sql.gz" | mysql -uzabbix -pzabbix zabbix
    echo "获取最新的create.sql文件并导入到数据库完成"
    
    # 启动Zabbix服务进程,并加入开机自启
    systemctl start zabbix-server.service
    systemctl enable zabbix-server.service
    echo "启动Zabbix服务进程,并加入开机自启完成"
    
    # 配置Apache的配置文件,修改时区
    sed -i 's/# php_value date.timezone Europe\/Riga/php_value date.timezone Asia\/Shanghai/g' /etc/httpd/conf.d/zabbix.conf
    echo "配置Apache的配置文件,修改时区完成"
    # 重启Apache Web服务器
    systemctl start httpd
    systemctl start zabbix-agent.service
    echo "Zabbix安装脚本执行完毕。"
    
  2. Zabbix-Server 服务器端安装配置步骤详解

  3. zabbix 客户端一键安装脚本

    本环境:centos7.9

    简易安装脚本,Server=192.168.2.111​此处需要修改为 server 的 ip 地址

    #!/bin/bash
    # 关闭SELinux、暂停防火墙
    setenforce 0
    systemctl stop firewalld
    
    # 安装Zabbix仓库和zabbix-agent zabbix-get
    rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
    sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
    yum install -y zabbix-agent zabbix-get.x86_64 net-tools
    
    # 配置zabbix-agent,Server和ServerActive保持一致,Hostname根据情况修改
    cat << 'EOF' > /etc/zabbix/zabbix_agentd.conf
    PidFile=/var/run/zabbix/zabbix_agentd.pid
    LogFile=/var/log/zabbix/zabbix_agentd.log
    LogFileSize=0
    Server=192.168.2.111
    ServerActive=192.168.2.111
    Hostname=Zabbix agent
    Include=/etc/zabbix/zabbix_agentd.d/*.conf
    EOF
    
    # 启动zabbix-agent并检查
    systemctl start zabbix-agent.service 
    systemctl enable zabbix-agent.service
    netstat -lntup | grep 10050
    
    
  4. Zabbix-Get 详解

  5. 配置 zabbix_agentd.conf 详解

    zabbix_agentd.conf 示例

    [root@web02 ~]# cat /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=10.0.1.61
    Hostname=Zabbix agent
    Include=/etc/zabbix/zabbix_agentd.d/*.conf
    

    zabbix_agentd.conf​ 是 Zabbix 代理守护进程的配置文件,它定义了代理如何与 Zabbix 服务器通信以及如何记录日志等。以下是文件中每个配置项的解释:

    1. PidFile

      PidFile=/var/run/zabbix/zabbix_agentd.pid
      

      这个配置项指定了存储 Zabbix 代理进程 ID(PID)的文件的路径。当代理启动时,它的 PID 会被写入到这个文件中。这通常用于监控代理进程是否正在运行,或者在需要时终止代理进程。

    2. LogFile

      LogFile=/var/log/zabbix/zabbix_agentd.log
      

      这个配置项指定了 Zabbix 代理日志文件的路径。所有代理的日志信息,包括错误、警告和信息消息,都会被写入到这个文件中。这对于调试和监控代理的行为非常有用。

    3. LogFileSize

      LogFileSize=0
      

      这个配置项设置了日志文件的最大大小(以 MB 为单位)。如果设置为 0(如上所示),则日志文件的大小将不受限制,直到代理被重启。如果设置了具体的数值,当日志文件达到这个大小时,旧的日志会被滚动(即创建一个新的日志文件,旧的日志文件会被重命名或删除)。

    4. Server

      Server=10.0.1.61
      

      这个配置项指定了 Zabbix 代理应该连接的 Zabbix 服务器的 IP 地址。在这个例子中,代理将尝试连接到 IP 地址为 192.168.2.111 的服务器。

    5. ServerActive

      ServerActive=10.0.1.61
      

      这个配置项指定了 Zabbix 代理用于接收来自 Zabbix 服务器的主动检查(active checks)的 IP 地址。在这个例子中,代理期望从地址(10.0.1.61)接收数据。应该与 Server 地址一致

    6. Hostname

      Hostname=Zabbix agent
      

      这个配置项设置了代理在与 Zabbix 服务器通信时使用的主机名。这个名称会在 Zabbix 的 Web 界面中显示,以便于识别代理。实际定义应有所区别,如 Zabbix agent001 等

    7. Include

      Include=/etc/zabbix/zabbix_agentd.d/*.conf
      

      这个配置项指定了一个目录,Zabbix 代理会在这个目录下查找并包含(include)额外的配置文件。这些文件通常以 .conf​为扩展名,可以用来定义额外的用户参数(UserParameters),这些参数可以被 Zabbix 服务器用来获取更多的监控数据。

    这些配置项是 Zabbix 代理正常运行的基础,确保代理能够正确地与 Zabbix 服务器通信,并记录必要的日志信息。在修改配置文件后,通常需要重启 Zabbix 代理服务以使更改生效。

  6. 用 docker 快速部署 zabbix

    【全网最简单的 Zabbix 部署方式】 https://www.bilibili.com/video/BV16a411n7Mt/?share_source=copy_web&vd_source=060a67fd53d735ce5086832f669200d5

    https://github.com/Jack-Ywn/zabbix-docker/blob/4.0/docker-compose_v3_alpine.yaml

    https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers

    https://github.com/zabbix/zabbix-docker

    https://www.imooc.com/article/324911

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 165 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 2 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    46 引用 • 25 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 65 回帖 • 453 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    541 引用 • 672 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 724 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 185 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    285 引用 • 728 回帖
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1739 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 101 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • 电影

    这是一个不能说的秘密。

    120 引用 • 599 回帖
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 212 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 130 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    404 引用 • 1246 回帖 • 580 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 354 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    346 引用 • 1801 回帖 • 3 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3186 引用 • 8212 回帖 • 1 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    130 引用 • 793 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 127 关注
  • CodeMirror
    1 引用 • 2 回帖 • 126 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4600 回帖 • 701 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 30 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    5 引用 • 106 回帖