「Zabbix 企业级分布式监控系统」- 读书笔记

第1部分 Zabbix基础部分

第1章 监控系统简介 2

1.1 为何需要监控系统 2

1.2 监控系统的实现 2

1.3 监控系统的开源软件现状 4

1.4 监控系统的原理探究 11

第2章 Zabbix简介 14

2.1 Zabbix的客户 14

2.2 使用Zabbix的准备 15

2.3 Zabbix为何物 15

2.4 选择Zabbix的理由 16

2.5 Zabbix的架构 17

2.6 Zabbix的运行流程 18

2.7 Zabbix的功能特性 19

第3章 安装部署 21

3.1 安装环境概述 21

3.2 Zabbix_Server服务端的安装 25

3.3 Zabbix_Agent客户端的安装 39

3.4 SNMP监控方式的安装配置 40

3.5 Windows上安装Zabbix-Agent 40

3.6 其他平台的安装 43

3.7 zabbix_get的使用 43

参考Zabbix手册中的说明。

示例命令:zabbix_get -s 127.0.0.1 -p 10050 -k “system.cpu.load[all,avg1]”

3.8 Zabbix相关术语(命令) 44

3.9 Zabbix Server对数据的存储 45

3.10 Zabbix init脚本解释 55

3.11 高可用和安全 56

3.12 Zabbix数据库的备份 57

第4章 快速配置使用 59

配置完成后,访问`http://hostnameOrIpAddress/zabbix’来访问。

4.1 配置流程 59

Host groups – Hosts – Applications – Items – Triggers – Event – Action – User groups – Users – Medias – Audit

其中,Item、Trigger、Graphs通常使用模板进行配置,无需逐个配置。

其中,Item用于获取数据;Graphs用于向用户展示Item获取的数据;

配置Trigger不是必须的。它主要用于条件判断,如果在不满足条件时触发事件,则需要配置触发器。

配置Screens可以将多个Graphs集中显示。

简单的逻辑图就是:

下面介绍配置。

4.2 主机组的添加 61

添加主机组,将一组主机存放在一起,也可以存放模板。

建议:同一属性的主机或者模板,应该归类到同一个分组中。

分组原则:

  • 以地理位置进行划分;
  • 以业务单位进行划分;
  • 以机器用途进行划分;
  • 以系统版本划分;
  • 以应用程序进行划分;

分组以后可以非常方便管理。

Configuration -> Host groups -> Create host group

数据表存储:zabbix.groups

4.3 模板的添加 63

Item、Trigger、Graph、Web、Discovery都是存在于主机之上的,很多主机又都会用到这些监控配置,因此可以将他们做成模板。

使用时,将主机添加指定模板即可。

添加模板:Configuration – Templates – Create template

继承模板:继承其他模板,从而继承其他模板中的Applications、Items、Triggers等等内容:Configuration – Templates – Create template – Linked templates

设置宏:还可以设置宏,用于在后面的Items、Triggers中引用。

4.4 添加主机 65

添加主机:Configuration – Hosts – Create Host

一般流程:设置主机信息 – 关联到模板

如果要取消关联模板,“Unlink”用于取消模板,而“Unlink and clear”取消关联并清除数据。

模板和主机都存在于zabbix.host表中。

4.5 Graphs的配置 68

用于将数据进行可视化。

在Hosts和Templates中设置Graphs:Configuration – Hosts – <Select Host> – Graphs – Create graph

各个参数的含义参考:2 Custom graphs

4.6 Screen的配置 74

集中显示多种信息,这信息可以是Graphs、Maps、Server info等等,几乎涵盖了所有的信息。

Configuration – Screens – Screens – Create screen

通过选择不同的“Resource”,可以添加多种类型的信息。参考 1 Screen elements 一文。

4.7 Slide shows的配置 78

以幻灯片的形式来显示多个Screen的内容。

同样,也是在:Configuration – Screens – Slide shows – Create slide show

4.8 Zatree的使用 79

https://github.com/spider4k/zatree

实现了cacti中树形显示主机的功能。

4.9 Map的配置 80

用网络拓扑图来展示各种设备。

Configuration – Maps – Create maps

还可以设置背景图

  1. 上传背景图:Administration – General – Images – Background – Create background
  2. 使用背景图:Monitoring – Maps – Create map – Background image
  3. 如果要编辑背景图:Monitoring – Maps – <Map name> / Action – Properties

添加设备

  1. Map element,用于添加设备
  2. 单击设备还编辑设备信息:
    1. 在Label中,可以使用宏来设置显示信息,参考 10 Macros 一文

还可以连接设备

  1. 按住Ctrl键,选中两个设备;
  2. 点击Link: Add来添加连接;
  3. 弹出窗口中Edit可以用来编辑连接,并这只宏

在Monitoring – Maps中查看这只的Maps信息

在设备上单机右键,可以对设备进行某些操作,例如ping、traceroute等等。

有关Maps的更多信息,可以参考 2 Network maps 一文

4.10 Web监控 85

监控Web程序,下载速度、返回码、响应时间,还可以监控一组连续的Web动作。

模拟用户访问,判断返回码、返回内容的状态来判断可用性。

源码安装时要指定–with-libcurl选项。

Configuration – Hosts – Web – Create scenario

可以配置重试、超时、参数、要求的状态、要求的返回值、用户代理、请求频率、HTTP代理、认证信息;同时可以添加多个URL地址。

4.11 IT服务 92

从宏观来度量和管理基础设施的总体情况的可用性。因为又是我们并不关心基础信息的情况,而是只关心总体情况。

可以显示服务的可用时间。

4.12 报表 95

用于显示Zabbix的一些信息,比如Zabbix的状态、可用性报告、前100的触发器等等

只能呈现一些基本的图形数据。

4.13 资产管理 97

资产管理功能有限,可以禁用、启动、自动获取资产参数。

资产的配置是在Hosts中的:Configuration – Hosts – <Select Host> – Host inventory

可以使用Zabbix自带的「key」来发现资产参数,然后导入CMDB中。

第5章 深入配置使用 99

自定义Item来获取数据。

5.1 Items的添加 99

Item就是监控项,制定了获取数据的方式,获取数据的类型,获取数据的时间间隔,历史数据保存的时间,趋势数据保存时间,监控Key的分组等等。

监控项存储在zabbix.item表中,检测周期的长短影响Zabbix Server的性能。

5.2 Items key的添加 105

Item可以添加到Template中,也可以添加Host中。其中Template可以复用,可以把Template中的所有Item添加到主机中。

— 添加ITEM —
如何向模板中添加Items:

  1. Configuration – Templates – <Template Name> – Items – Create item
  2. 填写Name
  3. 填写Key,可以使用「Select」进行选择。参考手册「2 Item types」手册。
  4. 通过zabbix_get命令测试Item添加是否成功。注意zabbix_get只能用于Agent取值。

关于Items中各个属性的含义参考「1 Creating an item」手册。

— 添加ITEM KEY —
用户可以自定义在ITEM的KEY,但只能在Zabbix Agent中使用。

通过在zabbix_agentd.conf中使用UserParameter=参数实现,具体格式为UserParameter=key,command或者UserParameter=key[*],command,第二种是有参数的形式。其中,key就是上面的key_name,如果key后跟[*]表示可以传递参数;command是命令,参数将以$1, $2, $3…的顺序传递给命令。

默认情况下,参数中不允许使用\'”`*?[]{}~$!&;()<>|#@这些特殊字符,如果要使用,就要在zabbix_agentd.conf中加入UnsafeUserParameters=1配置,并重启zabbix_agent服务。$是特殊字符,如果要使用,则要使用$$来表示,例如awk '{print $$2}

自定义参数可以返回文本(character、log、text)和空值,如果返回是无效值,则显示ZBX_NOTSUPPORTED。

如何自定义一个Key呢?具体步骤如下:

修改/etc/zabbix/zabbix_agentd.conf文件,加入UserParameter=wc[*],grep -c "$2" $1

重启zabbix_agentd服务,service zabbix_agentd restart

使用zabbix_get命令测试,zabbix_get -s 127.0.0.1 -k 'wc[/etc/passwd,root]

当然,为了可维护性,可以使用Include=/path/to/dir引入目录,在该目录中创建文件,存储自定义的KEY。但是,如果出现重复则会导致Zabbix Agent启动失败。

可以使用zabbix_agentd -p打印所有已知的key

Key的格式分为有参或无参两种:

  • key_name[parameters]
  • key_name

上述格式中的key_name的取值范围为:

  • 数字、大小写字母
  • 下划线(_)
  • 横线(-)
  • 点(.)

格式中的[parameters]是参数,是可选的。

可选参数[parameters]格式分为三种:

  • 带引号的参数。参数值可以是任意内容,但是双引号需要转义;
  • 不带引号的参数。参数值可以任意内容,但是除了逗号、右方括号;
  • 数组。如果参数是一个数组,则需要用逗号将各个参数隔开;

5.3 Items的类型 109

2 Item types

5.4 宏的配置 129

5.5 维护时间 131

5.6 事件确认 132

5.7 数据的导入/导出配置 134

第6章 告警的配置 135

这一部分介绍告警的设置,下面介绍Trigger、Action配置,重点介绍Trigger的正则表达式、告警、升级告警、自定义告警脚本。

6.1 告警概述 135

告警,达到某个阈值时通知用户。

告警流程:达到触发器的阈值,执行Action通知用户,并执行某些命令来处理。

告警流程:

到用户的告警流程:

告警的配置步骤:

  1. 配置Trigger
  2. 配置User
  3. 配置Media
  4. 配置Action

6.2 Trigger的配置 136

Item负责采集数据,而Trigger负责检查是否正常,如果不正常则会触发Event,并且触发Action:

Trigger的状态分为:OK和PROBLEM

每次通过Item获取到值以后,就会通过Trigger中的表达式进行判断

Trigger中的时间函数nodate()、date()等等每隔30s就会进行重新判断。

一个Trigger对应一个Item,一个Item可以对应多个Trigger。没有必要的Item可以不配置Trigger。

同一个Item,当返回值不同时,可以设置不同的安全级别(实际上是设置多个Trigger),以实现不同界别的告警。

Trigger的配置步骤:

Configuration – Hosts/template – Triggers – Create trigger

6.3 添加Actions 151

6.4 邮件告警配置实例 160

6.5 自定义脚本告警 163

6.6 邮件告警脚本的配置实例 165

6.7 告警升级的机制 169

6.8 告警配置故障排查 172

第2部分 Zabbix中级部分

第7章 监控方式剖析 176

7.1 Zabbix支持的监控方式 176

7.2 Zabbix监控方式的逻辑 177

7.3 Agent监控方式 177

7.4 Trapper监控方式 177

7.5 SNMP监控方式 180

7.6 IPMI监控方式 189

7.7 JMX监控方式 194

7.8 命令执行 201

第8章 分布式监控 202

8.1 代理架构 202

8.2 节点架构 205

8.3 被动模式和主动模式 206

第9章 Zabbix与自动化运维 211

9.1 监控自动化 211

9.2 网络发现 212

9.3 主动方式的自动注册 215

9.4 Low level discovery 221

9.5 Zabbix与自动化配置管理工具Saltstack 238

第10章 使用的经验技巧 242

10.1 如何有效地设置监控告警 242

10.2 监控项的使用技巧 246

10.3 触发器的使用技巧 246

10.4 触发器配置 247

10.5 谷歌浏览器告警插件 249

10.6 数据图断图的原因 250

第11章 监控案例 252

11.1 监控TCP连接数 252

11.2 监控Nginx 254

11.3 监控PHP-FPM 256

11.4 监控MySQL 260

11.6 监控DELL服务器 272

11.7 监控Cisco路由器 272

11.8 监控VMware 274

第3部分 Zabbix高级部分

第12章 性能优化 282

12.1 Zabbix性能优化概述 282

12.2 Zabbix性能优化的依据 283

12.3 配置文件的参数优化 285

12.4 Zabbix的架构优化 287

12.5 Zabbix的Items中工作模式以及Trigger的优化 287

12.6 Zabbix的数据库优化 287

12.7 其他方面 289

第13章 Zabbix API的使用 290

13.1 Zabbix API简介 290

13.2 JSON-RPC 290

13.3 Zabbix API的使用流程 293

13.4 第三方Zabbix API模块 302

第14章 使用Zabbix协议 304

14.1 Zabbix协议概述 304

14.2 Zabbix Sender协议 305

14.3 Zabbix Get协议 310

14.4 Zabbix Agent协议 310

第15章 定制Zabbix安装包 313

15.1 为什么要定制安装包 313

15.2 如何定制安装包 313

第16章 大型分布式监控案例 316

16.1 监控系统构建概述 316

16.2 监控环境架构图 317

16.3 架构实现的过程 317

16.4 业务相关的配置 335

16.5 其他需求 338

附录A 源码安装及相关配置 339