一、zbx api

1.1 api概述

api Application Programming Interface 应用程序编程接口 (相当于是shell函数作用)

api接口应用场景: 发送企业微信消息,人脸识别,短信验证,身份验证 使用第3方功能即可.

使用与调用:

  • 自己写程序调用:直接通过程序代码进行调用(shell,python,golang,),需要参考对方的api接口文档(请求参数,要求的格式),api接口调试工具:apipost,postman

  • 官方写好的你来使用(SDK 一般指软件开发工具包): 通过sdk样例快速调用和使用即可

1.2 zabbix api

开源软件/商业软件的的api接口: 进行二次开发.

cmdb (存储与管理企业IT架构中设备的各种配置信息) : 自动化运维平台,web页面管理(Golang,Python)

1.3 zabbix api使用流程

api接口使用流程:

  • 根据zabbix用户名和密码,获取token(令牌)

  • 使用token,访问或调取zabbix资源

1.3.1 根据zabbix用户名和密码,获取token(令牌)

Zabbix 5.0版本

curl -s -v -X POST -H "Content-Type: application/json-rpc" 10.0.0.72/api_jsonrpc.php -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}'

Zabbix 6.0版本

1、第一次获取令牌

2、复制token

d26e22ed930f9eb2f8f7ef1ba740b4d70bc3f03df1395ded318ec70b9940b4b8

注意:新创建的token只出现一次

1.3.2 使用token,访问或调取zabbix资源

1、通过api获取主机列表

curl -s -v -X POST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["hostid", "host"],
"selectInterfaces": ["interfaceid", "ip"]
},
"id": 2,
"auth": "d26e22ed930f9eb2f8f7ef1ba740b4d70bc3f03df1395ded318ec70b9940b4b8"
}' http://zbx.local.cn/api_jsonrpc.php | jq

相关参数说明:

  • -X 指定请求方法

  • -H 修改请求头

  • -d 发出POST请求,要上传的内容。

2、查看结果

…
…
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
},
{
"hostid": "10598",
"host": "zabbix-client01",
"interfaces": [
{
"interfaceid": "31",
"ip": "172.16.1.41"
}
]
},
{
"hostid": "10601",
"host": "windows01",
"interfaces": [
{
"interfaceid": "33",
"ip": "192.168.1.116"
}
]
},
{
"hostid": "10602",
"host": "network-device",
"interfaces": [
{
"interfaceid": "34",
"ip": "192.168.1.10"
}
]
},
{
"hostid": "10607",
"host": "zabbix-client02",
"interfaces": [
{
"interfaceid": "39",
"ip": "172.16.1.42"
}
]
}
],
"id": 2
}

二、zbx 优化

2.1 硬件优化

硬件优化 : cpu,内存,磁盘,网卡(10G万兆网卡,光纤 ),raid

2.2 zabbix服务端配置优化

zabbix参数的配置: 缓存和进程数量

其中相关参数说明:

  • xxxxcache 用于zabbix服务端缓存获取的各类数据 (历史数据,趋势数据....)

  • poller zabbix用于数据采集进程 (接收agent的数据的进程 接收snmp 接收jmx 接收ipmi.....)

2.2.1 缓存配置优化

1、先查看没有进行缓存配置时的监控

依次点击【监测】-【主机】,在【名称】处填写cache进行过滤并查看相关数据

2、调整缓存配置

调整缓存配置文件内容

[root@zabbix-server01 ~]# vim /etc/zabbix/zabbix_server.conf
…
…
# 用于存储主机、监控项、触发器数据的共享内存大小,默认为32M,调整为64M
CacheSize=64M
# 历史数据缓存,默认16M,未来根据自己环境进行配置
HistoryCacheSize=16M
#历史数据索引的缓存,默认4M,未来根据自己环境进行配置
HistoryIndexCacheSize=4M
#趋势数据缓存,默认4M,未来根据自己环境进行配置
TrendCacheSize=4M
#值的缓存
ValueCacheSize=8M
…
…

重启zbx服务端

[root@zabbix-server01 ~]# systemctl restart zabbix-server.service

3、再次查看监控的缓存数据,最新数据下降为原来的一半

2.2.2 进程数量配置优化

1、先查看没有进行进程数量配置时的监控

依次点击【监测】-【主机】,在【名称】处填写poller进行过滤并查看相关数据

2、调整进程数量配置

调整进程数量配置文件内容

[root@zabbix-server01 ~]# vim /etc/zabbix/zabbix_server.conf
…
…
# 收集数据进程的数量,默认5
StartPollers=5
# 客户端/主机 不可达 可达主机 (包括IPMI 和 Java)的轮询进程的初始实例数量,默认1
StartPollersUnreachable=2
#用于接收http客户端的数据,默认1
StartHTTPPollers=1
#用于收集客户端jmx的数据 (默认是0) java-gateway的时候使用
StartJavaPollers=5
#用于收集zabbix proxy代理的数据的进程数 默认是1
StartProxyPollers=1
#收集ipmi客户端数据
StartIPMIPollers=0
…
…

重启zbx服务端

[root@zabbix-server01 ~]# systemctl restart zabbix-server.service

3、再次查看监控的主机 不可达轮询进程数据,最新数据下降

2.3 zabbix客户端配置优化

调整zbx客户端的模式。默认是被动模式,改为主动模式。 zbx被动模式简单,zbx服务端压力大。zbx主动模式,适用于大量主机监控。

主动模式注意事项:

  • 改完配置后,主机客户端类型也要改(zbx客户端主动模式),web模板也要修改

  • 不绿了。如果监控中只有主动模式,不绿了;如果监控中除了主动模式还有被动模式仍然会绿

1、修改客户端配置文件,客户端主动模式配置如下:

[root@zabbix-client01 ~]# egrep -v '^$|^#' /etc/zabbix/zabbix_agent2.conf
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.40
ServerActive=172.16.1.40
HostnameItem=system.hostname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf

2、修改完成后重启客户端

[root@zabbix-client01 ~]# systemctl restart zabbix-agent2.service

3、设置主机关联主动模式zbx模板

模板处输入【zabbix agent active】字样即可选择对应的模板

4、查看web页面,因为是主动模式,所以不会绿

2.4 Zabbix键值与监控项优化

zabbix 键值与监控项处理:

  • 增加更新间隔时间5m 10m

  • 推荐使用自定义模板,控制功能全面监控,监控项少,精简监控项 (精简)

  • 历史数据保留时长减少 设置为30d或7d, 增加趋势存储时间保留时间 365d

zabbix网站架构容量评估.

zabbix占用磁盘空间的计算

(1) 关于历史数据的管家设置

Zabbix 将接收到的值保存一段固定的时间,通常为几周或几个月。每个新值都需要一定量的磁盘空间用于数据和索引。

所以,如果我们每秒收到 50 个值,且希望保留 30 天的历史数据,值的总数将大约在 (30*24*3600)* 50 = 129,60 0,000,即大约130M 个值。

根据所使用的数据库引擎,接收值的类型(浮点数、整数、字符串、日志文件等),单个值的磁盘空间可能在 40 字节到数百字节之间变化。 通常,数值类型的每个值大约为 90 个字节。

在上面的例子中,这意味着 130M 个值需要占用 1 3000 0000 * 90 bytes = 10.9GB 磁盘空间。文本和日志类型的监控项值的大小是无法确定的,但可以以每个值大约500 字节来计算。

(2) 趋势数据的管家设置

Zabbix 为表 trends 中的每个项目保留1小时的最大值 / 最小值/ 平均值 / 统计值。 该数据用于趋势图形和历史数据图形。 这一个小时的时间段是无法自定义。

Zabbix数据库,根据数据库类型,每个值总共需要大约90个字节

假设我们希望将趋势数据保持5年。 3000 个监控项的值每年需要占用3000*24*365* 90 = 2.2GB 空间,或者5年需要占用 11GB 空间。

zabbix 触发器

  • 尽量使用 .last() (最新数据) .nodata() (是否有数据)

  • 避免使用需要计算函数 .max() .min() .avg()

  • 整体目标:不要让zabbix服务端进行计算/数据库进行计数,需要计算的内容放在客户端(自定义监控项)

2.5 zabbix数据库优化

根据业务类型调整:读少写多

  • zabbix是一个写多读少的业务,优化数据库的写入性能,建议使用InnoDB存储引擎或tokudb存储引擎

  • 数据库分离或数据库拆分

三、zbx 高可用和升级