0%

无监控,不运维! ZABBIX 超实用配置指南

logo

一、了解 zabbix 监控系统

监控系统的四大核心任务:采集、存储、告警、展示。

zabbix 的组件:

  • zabbix-server:从数据库读取要采集什么样的数据,并执行采集动作;
  • zabbix-database:保存着配置信息;
  • zabbix-web-GUI:定义要采集什么数据,把配置信息存放至数据库;
  • zabbix-proxy:代理 server 收集数据;
  • zabix-agent:客户端程序,对数据进行采集。

数据采集的信道:

  • zabbix;
  • SNMP;
  • IPMI;
  • JMX;
  • ssh/telnet;

tuopu

其他的监控工具:

  • Open-falcon 是小米二次研发并开源的;
  • Prometheus 是容器的监控系统,被 CNCF 收录,但是展示界面不好看,后期可以结合 Grafana 来展示强大的图形界面。

二、安装 zabbix

安装 Server 端

首先安装好 Mariadb 数据库,然后按照官方文档中的步骤安装就可以了,这里使用的版本是 4.0 LTS

官方文档 https://www.zabbix.com/download

注意一点,启动服务前,要编辑 http 的配置文件 /etc/httpd/conf.d/zabbix.conf,把关于时区的配置给启用,默认是注释的。

1
2
3
4
5
6
vim /etc/httpd/conf.d/zabbix.conf

...
# 改成中国的时区
php_value date.timezone Asia/Shanghai
...

安装好后就可以登录 Web 管理界面,默认用户名为 Admin,密码为 zabbix

安装 agent 端

在需要被监控的主机上安装 agent 客户端。

1
yum install zabbix-agent

agent 端的配置文件在 /etc/zabbix/zabbix_agentd.conf

被动监控的相关配置段在 ##### Passive checks related

  • Server:允许哪个 Server 来读取监控数据;
  • ListenPort:自己监听哪个套接字;
  • ListenIP:自己监听哪个端口;
  • StartAgents:启动几个子进程;

主动监控的相关配置段在 ##### Actice checks related

  • ServerActive:把监控数据发给哪个 Server;
  • 注意:为了让 Server 能够识别当前主机,要发送自己的标识信息,有 4 中方式:
    • Hostname:直接发送主机名称;
    • HostnameItem:发送采集到的与主机名相关的数据(建议);
    • HostMetadata:发送元数据信息;
    • HostMetadataItem:发送采集到的与主机名元数据相关的数据;
  • BufferSend:定义使用启用发送缓冲;
  • BufferSiza:定义发送缓冲区的大小;

三、ZABBIX 功能配置

Items 监控项

监控数据需要 agent 来执行命令或通过调用系统库来获得,agent 程序的内部内键了一些通用的获取指标数据的操作,如果不能满足自己的需求,就需要自己定义操作,而 items 就是用来自定义以何种方式采集指标数据的。

如果使用内键的操作,就直接调用对应的 key 即可,但如果使用自定义的操作,就需要在配置文件中事先定义 key 对应的操作是什么。

这里可以查看支持的内键 key 的详细信息。
https://www.zabbix.com/documentation/4.0/zh/manual/config/items/itemtypes/zabbix_agent

内键的 key 有两种:

  • 不可以传参数的,例如:
    • system.cpu.switches:统计上下文交换的数量。
  • 需要传参数的,例如:
    • net.if.in[if,<mode>]:网卡流入量统计,中括号内指定参数。
      • if:定义要监控的网卡名;
      • mode 可用的值:
        • bytes:字节数(默认);
        • packets:包数量;
        • errors:错误数量;
        • dropped:丢包数量;

添加 item 时可在 Preprocessing 选项卡中定义对数据进行预处理。

  • Change 变化量:
    • Simple change:这次数据减去前一次;
    • Change per second:这次减去前一次再除以时长;

Triggers 触发器

zabbix 支持的触发器有很多,关于触发器的介绍可以查看官网

官方文档中也有对触发器表达式的详细介绍。

触发器中使用的表达式是非常灵活的,一个简单有效的表达式如下:

1
{<server>:<key>.<function>(<parameter>)}<operator><constant>
  • server:主机名称;
  • key:主机上关系的响应监控项的 key;
  • function:评估采集到的数据是否在合理范围内时所使用的函数,支持的 完整函数列表
  • parameter:函数的参数;大多为数字型的函数接受秒数来作为参数,可以使用前缀 # 来指定参数具有不同的含义,如 sum(600) 代表 600 秒内所有值的总和,sum(#5) 就代表最后 5 个值的总和;另外,一些函数支持额外的第二个参数时间偏移量,这个参数允许从过去一段时间内引用数据。例如,avg(1h,1d) 将会返回一天前 1 小时的平均值。
  • operator:运算符;
  • constant:常量;

触发器示例

www.zabbix.com 站点的处理器负载过高的触发判断:

1
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5

解析:它指定了服务器是 www.zabbix.com,监控项的键值是 system.cpu.load[all,avg1]。通过使用函数 last() 获取最新的值。最后,>5 意味着当 www.zabbix.com 最新获取的处理器负载值大于 5 时触发器就会处于异常状态。

触发器的严重等级

触发器严重性定义了触发器的重要程度,Zabbix 支持下列触发器的严重程度:

严重性 定义 颜色
未分类 未知严重性 灰色
信息 提示 浅蓝色
警告 警告 黄色
一般严重 一般问题 橙色
严重 发生重要的事情 浅红色
灾难 灾难,财务损失等 红色

触发器严重性用于:

  • 触发器的直观表示,不同的颜色代表不同的严重程度;
  • 全局报警音频。不同的音频代表不同的严重程度;
  • 用户媒介,不同的用户媒介(通知渠道)代表不同的严重程度。例如,SMS - 高严重性,email - 其他;
  • 通过触发器严重程度的条件来限制动作。

触发器等级的名称和颜色可以自定义。

Actions 动作

Action 中可定义触发器被触发后要做的行动。

比如可以自动报警,这里介绍两种报警方式:

1. 直接通过 Email 发送报警邮件

  • Administrator 中添加 一个 media type,这里使用 Email 的方式,以后发送报警信息时通过这个媒介发送。
  • 因为 所有报警信息的接收者,必须是 zabbix 账号,所以在 AdministratorUsers 选项中,给要接收报警信息的 zabbix 账号,在 Media 中定义此账号接收报警信息的邮箱地址,并可以定义通过哪个 media 发送。
  • Configuration 中新建一个 ActionsEvent source 使用 Tiggers 类型,在内部添加一个 Operations,选择 Send message 可以定义如何发送报警信息。

2. 使用 Python 脚本发邮件

如果因为邮箱不支持等其他原因不能直接使用 Email,也可以通过触发脚本来发送 Email,在配置文件 /etc/zabbix/zabbix_server 中的 AlertScriptsPath=/usr/lib/zabbix/alertscripts 定义脚本的放置路径。

(1). 新建一个用于发送邮件的 python 脚本 EmailScript.py,放在脚本路径下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/python
# coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys

# configure your own parameters here
# 下面邮件地址的smtp地址
mail_host = 'smtp.mail.qq.com'
# 用来发邮件的邮箱,在发件人抬头显示(不然你的邮件会被当成是垃圾邮件)
mail_user = 'XXXX@qq.com'
# 上面邮箱的密码
mail_pass = 'XXXX!'
# 上面smtp地址的主网站地址
mail_postfix = 'mail.qq.com'


def send_mail(to_list, subject, content):
me = mail_user + "<" + mail_user + "@" + mail_postfix + ">"
msg = MIMEText(content, 'plain', 'utf-8')
# 必须使用'utf-8'参数,否则默认为us-ascii, 在部分邮件客户端中文会显示为乱码
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user, mail_pass)
s.sendmail(me, to_list, msg.as_string())
s.close()
return True
except Exception as e:
print(str(e))
return False


if __name__ == '__main__':
send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

(2). 上面脚本中的最后一行会接收 3 个参数,我们要把以下 3 个 zabbix 的内部宏传给脚本,分别代表了:

  • {ALERT.SENDTO}:接收告警信息的接收地址;
  • {ALERT.SUBJECT}:接收告警信息的主体;
  • {ALERT.MESSAGE}:告警信息的正文;

Administrator 中添加 Media types,选择 TypeScript,并把上面 3 个内部宏直接写在 Script parameters 中。

后面和 email 的配置方式就一样了。

Remote command 远程命令

一旦发现目标出现故障时,可以先自动采取一些处理措施,而不是直接发邮件。在添加 Actions 时,不选择 Send message,而选择 Remote command,可以使用 SSHTelnet 等方式远程执行一段命令,也可以使用 Custom script 执行一个脚本,并可以指定是由 Zabbix agentZabbix server(proxy) 还是 Zabbix server 来执行。

  1. 添加一个 Nginx 的 item,使用内键 key net.tcp.listen[port] 来监控 Nginx 的 80 端口是否在正常监听。这个 key 检测的返回值为 1 正常,0 为不正常,用户看起来会不直观,所以可以在 Show value 中选择 Service state 将返回值自动转换为 updown
  2. 添加一个 Tigger,当目标 item 的值为 0 时则触发。
  3. 添加一个 Action,当 Tigger 触发时,第一步先使用 agent 执行脚本尝试重启 Nginx,选择 Remote command,在 Commands 中定义要执行的脚本或直接写语句 sudo systemctl restart nginx,并指定使用 Zabbix agent 执行。然后添加第二步操作,当第一步执行失败时,发送告警邮件,如果成功了,则不会发送。需要注意的是:agent 进程是由 zabbix 账户启动的,无法重启 Nginx 进程,需要 root 权限,所以需要在目标主机上使用 visudo 为 zabbix 用户添加一个权限,用来执行重启 Nginx 服务的命令。
  4. 为了安全,zabbix-agent 默认禁止了远程执行命令的操作,在目标主机的配置文件 /etc/zabbix/zabbix_agent.conf 中找到 EnableRemoteCommands=0 改成 EnableRemoteCommands=1 并重启服务来启用。

Macros 宏

宏可以理解为是一个文本替换模式:

级别:

  • 全局范围生效,在这里定义:Administrator -> General -> 右上角下拉选 Macros
  • 模板范围生效:在模板中定义;
  • 主机范围生效,在这里定义:Configuration -> Hosts -> 要定义的主机名 -> Macros

类型:

  • 内键宏引用格式为 {MACRO_NAME},必须使用全大写;官方也给了所有支持的内键宏完整列表。
  • 自定义宏无论是定义、赋值还是引用时,都必须加 ${$MACRO_NAME},命名使用大写字母、数字和下划线。

key 自定义

zabbix_agent.conf 的配置文件中使用 UserParameter=<key>,<command> 指令自定义 key

建议将自定义配置集中写在 /etc/zabbix/zabbix.agentd.d/*.conf 中。

示例:从 Nginx 自带的状态页获取连接数

先启用 Nginx 的 STATUS 页面。

1
2
3
location /status {
stub_status on;
}

新建一个配置文件用来自定义 key。

1
2
3
vim /etc/zabbix_agentd.d/nginx_key.conf
// 语法:UserParameter=<key>,<command>
UserParameter=nginx.status,/usr/bin/curl -s http://127.0.0.1/status/ | awk '/^Actice/{print $3}`

使用 systemctl restart zabbix-agent 重启 agent 服务生效。

之后可使用 zabbix-get 工具可以测试自定义的 key 是否生效。

1
2
~]# yum install zabbix-get
~]# zabbix_get -s 192.168.50.13 -p 10050 -k "nginx.status"

示例:给自定义的 key 传递参数

使用自定义 key 时可以传入参数,那么在定义 key 时要使用 [*] 来开启传递参数的功能。

目标:定义一个 key,实现通过获取 /proc/meminfo 来显示内存的信息,并且可以通过传递的参数只显示指定的行和字段。

/proc/meminfo 中保存了各种内存信息,使用 awk 可以把期望显示的行过滤出来,并截取出第 2 段的数值。其中期望显示的行就可以使用参数中传递。

1
UserParameter=memory.info[*],awk '/^$1/{print $$2}' /proc/meminfo
  • memory.info 是 key 的名字;
  • [*] 代表此 key 可以接受多个参数;
  • $1 使用第 1 个传入的参数;
  • $$2 意思是取 awk 的第 2 段,本来应该写为 $2,但是这里如果还是这么写会被理解为使用第 2 个传入的参数,所以使用两个 $$ 来逃逸。

使用 zabbix-get 工具可以测试 key,通过传入一个参数 MemTotal,就可以只显示 MemTotal 这一行信息。

1
zabbix_get -s 192.168.50.13 -p 10050 -k "memory.info[MemTotal]"

Template 模板

配置模板需要首先通过定义一些参数来创建模板,然后添加实体(项目,触发器,图形等)。

使用模板时需要链接模板,链接模板的操作在 Host 中定义;而当不使用模板时,可以选择只拆除链接,或者拆除链接并删除过去的数据。

除了内键模板,zabbix 官方提供了一个站点,收集了互联网上其他人上传的模板。https://share.zabbix.com/

模板文件格式为 .xml,支持导出和导入,大部分模板有格式为 *.conf 的自定义 key 的配置文件,要放置在 agent 端的 zabbix.agentd.d 目录下,否则可以无法使用模板。

Discovery 自动发现

自动发现有两种:

  1. Hosts 中的 Discovery,代表总线发现,比如用来发现主机有几块硬盘,几个分区,每个分区的容量等等。
  2. Configuration -> Discovery 中的自动发现规则,是用来自动发现主机的。

自动发现主机的规则配置含义:

  • IP range:扫描的网络范围;
  • Checks:定义使用哪种方式探测,有 Zabbix agent pingICMP pingTCP ping 等等。
    • Zabbix agent ping 的方式是向目标主机中的 agent 发送一个 key 请求,比如 system.uname;如果正确收到主机名回应了,就代表可以添加,所以这种方式比 TCMP 的方式较稳妥。
  • Device uniqueness criteria:定义一个主机的唯一性以什么作为标准;
    • IP address:使用 IP 地址作为唯一标准;如果一个主机有多个 IP,会被作为不同的主机;
    • Zabbix agent "system.uname":使用 Zabbix agnet 中的 key system.uname 作为主机的唯一标准;
      • 使用条件:只有在使用 Zabbix agent ping 作为的探测条件时才能使用。

使用此规则发现的主机并不会添加到 zabbix 中,而只是触发了一个 Discovery event,而后续的添加主机或添加模板应该是使用 Actions 来完成。

自动添加主机的 Action

Configuration 中新建一个 Actions,注意 Event source 要使用 Discovery 类型;而后在 Action 中的 New condition 添加发现条件,比如可以结合以下几个条件使用:

  • Discovery rule:指定使用哪一条规则去检查,这里就可以选择刚刚创建的自动发现规则;
  • Dicsovert status:指定当主机为哪种状态时添加,比如 Up。主机的状态分为四种:UpDownDiscoverydLost
  • Uptime/Downtime:如果刚一发现就添加进来可能比较武断,可以定义 >= 一段时间后才加入,比如 >=120
  • Received value:如果返回字串中有指定的关键字则添加(返回的字符串就是在自动发现规则中定义的探测方式中 key 的返回结果,比如 system.uname),比如使用 like Linux,就可以判断操作系统为 Linux;

而后在 Operations 内选择期望的动作,比如添加主机、链接模板、发送信息等等。

配置主动监控模式

agent 向 Zabbix Server 请求与自己相关的监控项配置,并根据收到的配置采集好数据后主动发给 Server,而不是 Server 去 agent 抓取。

  1. 要在 agent 的配置文件中定义好关于主动模式的配置,至少包含 ServerActive=Hostname=HostnameItem=
  2. 在 Server 配置监控项时, Type 类型要选择 Zabbix agent (active)

Zabbix trapper 撒网监控

客户端可以结合 crontab,实现自己提交监控数据给 Server。

trapper 方式发送数据是以主机名处理,不是 IP 地址,所以 agent 配置文件中的主机名要唯一。

1、在配置 item 时 Type 类型选 zabbix trapper,然后自定义一个 key 值,假如是 memory.usage.free
2、在 agent 端使用 zabbix-sender 工具向 Server 端中刚刚定义的 key 发送数据。

1
2
3
4
5
zabbix_sender -z 192.168.50.11 -s "node2" -k "memory.usage.free" -o $(awk '/^MemFree/{print $2}' /proc/meminfo)
# -z: 指定 Server 地址
# -s: 本机的主机名
# -k: item 的 key
# -o: key 值

3、然后在 Latest data 中就可以看到数据了。

Web 监控

web 监控会从三个维度监控指定站点:

  • 资源下载速度;
  • 页面响应时间;
  • 响应码。

SNMP 监控

内容较长,在第 43 天 zabbix使用进阶(03).exe

JMX 监控

JMX 是一个 Java 管理扩展的类库,Tomcat 也支持 JMX 接口,只不过默认没有开启。

Tomcat 中开启 JMX 方法

先部署好 Tomcat

1
yum install -y tomcat tomcat-webapps tomcat-docs-webapp tomcat-admin-webapps

/etc/sysconfig/tomcat/etc/tomcat/tomcat.conf 配置文件中,添加:

1
2
3
4
5
CATALINA_OPTS="-Dcom.sun.management.jmxremote=true    /* 定义 JMX 是否支持远程管理 */
-Djava.rmi.server.hostname=TOMCAT_SERVER_IP /* 定义 JMX 监听的 IP */
-Dcom.sun.management.jmxremote.port=12345 /* 定义 JMX 监听的套接字,应大于 1024,否则运行 tomcat 的普通用户是没权限监听的 */
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"

在 zabbix server 连接 JMX

1、安装 java 网关

zabbix 默认是无法和 JMX 直接通信的,需要借助 zabbix-java-gateway 组件与 JMX 通信,可以直接在 zabbix server 主机上安装,也可以单独部署一台服务器上。

1
yum install zabbix-java-gateway

2、配置 zabbix-java-gateway

安装好后可以在配置文件 /etc/zabbix/zabbix_java_gateway.conf 中自定义端口,默认端口为 10052,如不需要修改可直接启动服务。

1
systemctl start zabbix-java-gateway

3、配置 zabbix-server

接下来告诉 zabbix server 如何连接 zabbix-java-gateway,编辑配置文件 zabbix_server.conf 中的如下配置:

1
2
3
JavaGateway=ZABBIX-JAVA-GATEWAY-IP
JavaGatewayPort=10052
StartJavaPollers=5 /* 定义启动几个进程去 zabbix-java-gateway 获取数据,默认为 0 */

重启 zabbix-server 服务后,zabbix 就可以连接至 zabbix-java-gateway 了。

此时 zabbix 就可以和 JMX 通信了,在添加主机时填写客户端的 IP 地址和端口即可。

4、最后,在 zabbix 中添加 JMX 主机监控

在目标主机中添加一个 JMX interfaces,地址为 JMX 的地址。模板使用 Template App Generic Java JMX

四、分布式监控(Proxy)

安装 zabbix-proxy 程序。

1
yum install zabbix-proxy zabbix-agent

proxy 可以有多个,每个 proxy 的数据应该存放在自己的库中,用来临时保存数据,可以和 Server 使用同一个主机,也可以独立使用一台主机。

安装数据库,并启动服务。

1
2
yum install mariadb-server
systemctl start mariadb

然后创建 proxy 的数据库并授权。

  • 注意:如果 Zabbix server 和 Zabbix proxy 安装在相同的主机,它们必须创建不同名字的数据库!
1
2
3
4
5
# mysql -uroot -p
password
mysql> create database zabbix-proxy character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix-proxy.* to zabbix-proxy@localhost identified by 'zabbix-proxy';
mysql> quit;

导入表结构。

1
`zcat /usr/share/doc/zabbix-proxy-mysql-4.0.12/schema.sql.gz | mysql -uzabbix-proxy -pzabbix-proxy zabbix_proxy`

编辑 proxy 配置文件 /etc/zabbix/zabbix_proxy.conf

1
2
3
4
5
6
7
8
9
10
11
12
ProxyMode=0          # 配置工作模式,0 为主动,1 为被动,默认为 0
Server=192.168.50.11 # 指定 Server 的 IP 地址,用于报告数据
ServerPort=10051
Hostname=node3.monster.com
DBHost=
DBName=
DBUser=
DBPassword=
ProxyLocalBuffer=0 # proxy 的缓冲池大小
Heartbeatfrequency=60 # Server 端多久来探测一次 Proxy 端是否存活
ConfigFrequency=3600 # Proxy 端多久去 Server 端拉取一次需要由自己监控的配置
DataSenderFrequency=1 # Proxy 端把采集到数据间隔多久向 Server 端发送

在 Server Web 中添加 Proxy 主机的步骤:

  • Administrator -> Proxies 中点 Create proxy
  • 其中 Proxy name 代表:Server 依靠此名字和 Proxy 主机通信,所以一定要确保和 Proxy 配置文件中 Hostname= 指定的名字一致,并且能够正确解析。

在自动发现的配置中也可以开启 proxy 功能,之后就可以通过 Proxy 发现主机了。

注意:要在每个 agent 端的配置文件 /etc/zabbix/zabbix_agent.conf 中,把允许哪些主机来抓取监控数据的配置中,加上 Proxy 主机的 IP,否则 Proxy 会没有权限监控 agent。

示例:

1
2
3
4
5
6
# 主机信息
# 192.168.50.11 zabbix server 的 IP
# 192.168.50.12 agent 的 IP
# 192.168.50.13 zabbix proxy 的 IP
Server=192.168.50.11,192.168.50.13 # 可以只写 1 个,也可以多个,用逗号分割。
ServerActive=192.168.50.13 # 主动发送时只能写 1 个,不然会重复发送

重启 agent 服务后,可以在 proxy 主机上使用 zabbix_get 工具进行测试,如果能采集到数据就为正常。

1
2
-> # zabbix_get -s 192.168.50.12 -k 'system.uname'
Linux node2.monster.com 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64

五、ZABBIX 性能优化

zabbix 子进程介绍

  • Poller: 向 agent 发起监控请求的子进程;
  • HTTPPoller: 监控 web 时用来请求页面资源去做探测的进程;
  • Preprocessor: 数据预处理器,在 item 中可以定义对数据进行一定处理后展示;
  • PollersUnreachable: 每次采集数据时,如果对方无法探测,使用此进程来检测对方存活与否;
  • Trapper: 在 trapper 模式时用来接收对方使用 zabbix_sender 发来的监控数据;
  • Discoverer: 作为主机发现功能的进程;
  • Pinger: 通过 tcp pingping 操作进行主机发现的进程;
  • Timer: 计时器;
  • Escalator: 报警升级器;
  • Alerter: 报警器,用来触发邮件等报警操作;
  • Housekeeper: 检查并清理过期的历史数据;
  • DB_Config_Syncer: 当 proxy 为被动模式时,负载把监控配置推送给 proxy;
  • DB_Data_Syncer: 当 proxy 为被动模式时,负载把监控数据从 proxy 拉回来;

每一个进程的工作项不同,需要的任务量也会不同。以 poller 为例,假如有 1000 个 agent 需要监控,但是默认的 poller 进程只有 5 个,这样每个 poller 被分配到的任务量就会过大,导致无法完成。

这时可以把 poller 进程的数量调大来解决问题,在监控场景较大时,必然需要调整这些进程的运行数量。在配置文件 /etc/zabbix/zabbix_server.conf 中的 ######ADVANCED PARAMETERS###### 配置段中可以调整。

设定合理的缓存大小

  • CacheSize=8M:缓存大小;
  • HisrotyCacheSize=16M:历史数据缓存大小;
  • HistoryIndexCacheSize=4M:趋势数据的缓存大小;
  • ValueCacheSize=8M:监控采用数据的值的缓存大小;

性能评估的标准 NVPS: new values per second
代表每秒钟向服务器中插入的数据量,数值越高,ZABBIX DATABASE 的压力越大。官方表示理想状态下,最大支持 15000/s 个采集项入站,也就是 100w/m 个。而实际上能达到 5000/s 个,压力已经很大了。

优化准则:

  • 数据库:
    • 历史数据不要保存太长时长,90 天已经足够了,如果允许可以只保留 30 天;
    • 趋势数据可以多保存一些时间,比如 2-3 年;
    • 尽量让数据缓存在数据库服务器的内存中,降低数据库查询时的压力;
  • 触发器表达式
    • 定义触发器表达式时,尽量减少使用 min()max()avg() 等,因为这 3 个是聚合计算,有大量的比较操作;而尽量使用 last()nodata();
  • 数据收集
    • 数据采集时,使用 polling 的方式较慢,所以应减少使用 SNMP、SSH、anent(被动) 的方式;而应该多使用 trapping、agent(主动) 的方式。
  • 数据类型
    • 文本型的数据处理速度较慢,尤其是还要使用正则表达进行匹配时,速度更慢。所以尽量减少采集 text 或 string 类型的数值,多使用 numeric 类型的数据。

常见的压力大部分是出现在数据库上,所以可以针对数据库进行分表优化。

如果想要绚丽的图形展示界面,可以使用 Grafana 展示 ZABBIX 的数据。