Zabbix 学习路线和要点摘抄

  • 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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 238 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 194 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 345 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    15 引用 • 7 回帖 • 8 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    131 引用 • 1114 回帖 • 150 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 24 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    476 引用 • 899 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    90 引用 • 383 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 1 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 426 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1425 引用 • 10043 回帖 • 469 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 41 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 1 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    261 引用 • 662 回帖
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖 • 1 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖 • 1 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    131 引用 • 3644 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    333 引用 • 323 回帖 • 67 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 499 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    85 引用 • 1201 回帖 • 449 关注
  • CodeMirror
    1 引用 • 2 回帖 • 121 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 590 关注