40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

时间:2022-12-29 07:57:32

Zabbix 利用 Grafana 进行图形展示

Grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库

使用 Grafana 显示Zabbix的监控数据过程

  • 安装 grafana
  • 安装 zabbix 插件
  • 创建 zabbix 数据源
  • 导入 dashboard 模板

安装 Grafana 包

包下载链接:
https://grafana.com/grafana/download
https://mirrors.tuna.tsinghua.edu.cn/grafana/

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

#Ubuntu安装
[root@ubuntu2204 ~]#sudo apt-get install -y adduser libfontconfig1
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
adduser 已经是最新版 (3.118ubuntu5)。
adduser 已设置为手动安装。
libfontconfig1 已经是最新版 (2.13.1-4.2ubuntu5)。
libfontconfig1 已设置为手动安装。
升级了 0 个软件包,新安装了 0 个软件包, 要卸载 0 个软件包,有 46 个软件包未被升级。
[root@ubuntu2204 ~]#wget https://mirrors.tuna.tsinghua.edu.cn/grafana/apt/pool/main/g/grafana/grafana_9.3.2_amd64.deb
--2022-12-28 21:19:15-- https://mirrors.tuna.tsinghua.edu.cn/grafana/apt/pool/main/g/grafana/grafana_9.3.2_amd64.deb
正在解析主机 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.15.130, 2402:f000:1:400::2
正在连接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.15.130|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 89172340 (85M) [application/octet-stream]
正在保存至: ‘grafana_9.3.2_amd64.deb’

grafana_9.3.2_amd64.deb 100%[===================================================================================================================================>] 85.04M 5.38MB/s 用时 20s

2022-12-28 21:19:36 (4.30 MB/s) - 已保存 ‘grafana_9.3.2_amd64.deb’ [89172340/89172340])
[root@ubuntu2204 ~]#sudo dpkg -i grafana_9.3.2_amd64.deb
正在选中未选择的软件包 grafana。
(正在读取数据库 ... 系统当前共安装有 106640 个文件和目录。)
准备解压 grafana_9.3.2_amd64.deb ...
正在解压 grafana (9.3.2) ...
正在设置 grafana (9.3.2) ...
正在添加系统用户"grafana" (UID 112)...
正在将新用户"grafana" (UID 112)添加到组"grafana"...
...

开启 Grafana 服务

[root@ubuntu2204 ~]#systemctl enable --now grafana-server.service
Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable grafana-server
Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /lib/systemd/system/grafana-server.service.
[root@ubuntu2204 ~]#ss -ntlp|grep 3000
LISTEN 0 4096 *:3000 *:* users:(("grafana-server",pid=2127,fd=12))

首次登录 Grafana 的 Web 界面

http://grafana-server:3000/
*使用默认用户名和密码都是admin登录

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

登录用户等信息保存在下面数据文件中

[root@ubuntu2204 ~]#file /var/lib/grafana/grafana.db
/var/lib/grafana/grafana.db: SQLite 3.x database, last written using SQLite version 3039004, file counter 478, database pages 222, 1st free page 221, free pages 1, cookie 0x17f, schema 4, UTF-8, version-valid-for 478

在 Grafana 安装 Zabbix 插件

关于zabbix的插件官网地址
https://grafana.com/grafana/plugins
#zabbix插件官方安装说明
https://alexanderzobnin.github.io/grafana-zabbix/installation/

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

案例: 使用 grafana-cli 命令管理工具安装插件
#列出远程的可用插件
[root@ubuntu2204 ~]#grafana-cli plugins list-remote | grep zabbix
id: alexanderzobnin-zabbix-app version: 4.2.10
#列出插件的版本
[root@ubuntu2204 ~]#grafana-cli plugins list-versions alexanderzobnin-zabbix-app
4.2.10
4.2.9
4.2.8
4.2.7
...
#安装zabbix插件,可指定版本,下载安装插件至/var/lib/grafana/plugins/目录
[root@ubuntu2204 ~]#grafana-cli plugins install alexanderzobnin-zabbix-app 4.2.10
✔ Downloaded and extracted alexanderzobnin-zabbix-app v4.2.10 zip successfully to /var/lib/grafana/plugins/alexanderzobnin-zabbix-app

Please restart Grafana after installing plugins. Refer to Grafana documentation for instructions if necessary.
[root@ubuntu2204 ~]#ll /var/lib/grafana/plugins
总用量 12
drwxr-xr-x 3 root root 4096 12月 28 21:39 ./
drwxr-xr-x 7 grafana grafana 4096 12月 28 21:39 ../
drwxr-xr-x 7 root root 4096 12月 28 21:39 alexanderzobnin-zabbix-app/
[root@ubuntu2204 ~]#ll /var/lib/grafana/plugins/alexanderzobnin-zabbix-app/
总用量 89032
drwxr-xr-x 7 root root 4096 12月 28 21:39 ./
drwxr-xr-x 3 root root 4096 12月 28 21:39 ../
drwxr-xr-x 2 root root 4096 12月 28 21:39 app_config_ctrl/
-rw-r--r-- 1 root root 34206 12月 28 21:39 CHANGELOG.md
drwxr-xr-x 2 root root 4096 12月 28 21:39 css/
drwxr-xr-x 5 root root 4096 12月 28 21:39 datasource-zabbix/
drwxr-xr-x 2 root root 4096 12月 28 21:39 img/
-rw-r--r-- 1 root root 5022 12月 28 21:39 MANIFEST.txt
-rw-r--r-- 1 root root 1640 12月 28 21:39 module.js
-rw-r--r-- 1 root root 5588 12月 28 21:39 module.js.map
drwxr-xr-x 4 root root 4096 12月 28 21:39 panel-triggers/
-rw-r--r-- 1 root root 1721 12月 28 21:39 plugin.json
-rw-r--r-- 1 root root 3783 12月 28 21:39 README.md
-rwxr-xr-x 1 root root 16303504 12月 28 21:39 zabbix-plugin_darwin_amd64*
-rwxr-xr-x 1 root root 16941250 12月 28 21:39 zabbix-plugin_darwin_arm64*
-rwxr-xr-x 1 root root 14856192 12月 28 21:39 zabbix-plugin_linux_amd64*
-rwxr-xr-x 1 root root 13107200 12月 28 21:39 zabbix-plugin_linux_arm*
-rwxr-xr-x 1 root root 14614528 12月 28 21:39 zabbix-plugin_linux_arm64*
-rwxr-xr-x 1 root root 15242240 12月 28 21:39 zabbix-plugin_windows_amd64.exe*
#重新启动服务生效
[root@ubuntu2204 ~]#systemctl status grafana-server
● grafana-server.service - Grafana instance
Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-12-28 21:41:46 CST; 27s ago
Docs: http://docs.grafana.org
Main PID: 2494 (grafana-server)
Tasks: 14 (limit: 2196)
Memory: 53.3M
CPU: 1.294s
CGroup: /system.slice/grafana-server.service
├─2494 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/run/grafana/grafana-server.pid --packaging=deb cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.p
aths.plugins=/var/lib/grafana/plugins cfg:default.paths.provisioning=/etc/grafana/provisioning
└─2501 /var/lib/grafana/plugins/alexanderzobnin-zabbix-app/zabbix-plugin_linux_amd64

12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=server t=2022-12-28T21:41:47.634270043+08:00 level=info msg="Writing PID file" path=/run/grafana/grafana-server.pid pid=2494
12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=provisioning.alerting t=2022-12-28T21:41:47.635070822+08:00 level=info msg="starting to provision alerting"
12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=provisioning.alerting t=2022-12-28T21:41:47.635185521+08:00 level=info msg="finished to provision alerting"
12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=http.server t=2022-12-28T21:41:47.6526367+08:00 level=info msg="HTTP Server Listen" address=[::]:3000 protocol=http subUrl= socket=
12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=ngalert.state.manager t=2022-12-28T21:41:47.650403635+08:00 level=info msg="Warming state cache for startup"
12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=ngalert.state.manager t=2022-12-28T21:41:47.652953238+08:00 level=info msg="State cache has been initialized" states=0 duration=2.548215ms
12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=ticker t=2022-12-28T21:41:47.653078859+08:00 level=info msg=starting first_tick=2022-12-28T21:41:50+08:00
12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=ngalert.multiorg.alertmanager t=2022-12-28T21:41:47.653245054+08:00 level=info msg="starting MultiOrg Alertmanager"
12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=grafanaStorageLogger t=2022-12-28T21:41:47.657592453+08:00 level=info msg="storage starting"
12月 28 21:41:47 ubuntu2204.wang.org grafana-server[2494]: logger=context userId=1 orgId=1 uname=admin t=2022-12-28T21:41:47.842196795+08:00 level=info msg="Request Completed" method=GET path=/api/live/ws status=-1 remote_addr=10.
0.0.1 time_ms=8 duration=8.760949ms size=0 referer= handler=/api/live/ws

在 Grafana 中启用 Zabbix 插件

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

添加 Zabbix 数据源

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

在URL填写以下信息

根据Zabbix安装的服务器版本
#基于nginx
http://zabbix-server/api_jsonrpc.php
#基于apache
http://zabbix-server/zabbix/api_jsonrpc.php

案例:
[root@ubuntu2204 ~]#cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu2204

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters


10.0.0.200 zabbix.mooreyxia.org

填写的用户名和密码是zabbix服务上设置好的 这里默认Admin zabbix

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

测试连接

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

导入自带的 Grafana 模板

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

启用插件后点击查看数据

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

默认的监控项有问题,修改对应的监控项的名称(注意:不是监控项的key)

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

也可以根据需要自定义添加模板

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建


Zabbix 优化

如果主机和监控项众多, Zabbix Server 有可能会出现的性能问题,主要表现如下:

  • Web操作很卡,容易出现502错误
  • 监控图形中图层断裂
  • 监控告警不及时

可以查看队列了解 Zabbix 性能状态

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

优化方法

  • 数据库: 写多读少,数据采集比较频繁,可以考虑 PostgreSQL
PostgreSQL 性能要优于Mysql 可以考虑安装zabbix服务初期选择PostgreSQL
  • 使用主动模式,减轻Zabbix Server压力
通过对Zabbix-Agent设置主动模式,减轻Zabbix-Server压力
  • 如果需要监控远程主机,使用 Zabbix Proxy
通过使用Zabbix Proxy收集Agent数据给到Server,减轻Zabbix-Server压力
  • 删除无用监控项,建议使用自定义的模板和监控项
只关注需要关注的监控项,减少不必要的监控压力
  • 适当增加监控项的取值间隔,减少历史数据保存周期,此工作由housekeeper进程定时清理
直白点就是减少数据的读写操作
  • 针对 Zabbix历史数据和趋势图的数据表,进行周期性分表保存
对历史数据进行转存,或分库分表优化等等,涉及数据库性能调优
  • 对 Zabbix Server 进程调优,发现性能瓶颈的进程,加大它的进程数量
根据主机选择尽可能多的进程数处理监控任务
*将特定监控项的进程数量调高
  • 对 Zabbix Server 缓存调优,发现哪种缓存的剩余内存少,就加大它的缓存值
缓存默认只有8M,需要加大
*缓存不够连接数量过大会造成服务宕机

针对 Zabbix历史数据和趋势图的数据表,进行周期性分表保存

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

占用的数据库磁盘空间可能会很大,如何估算空间占用?官方给出相关的公式

官方公式:
https://www.zabbix.com/documentation/6.0/zh/manual/installation/requirements
https://www.zabbix.com/documentation/5.0/zh/manual/installation/requirements
根据使用 MySQL 后端数据库的实际统计数据中收集到的平均值,例如监控项为数值类型的值约 90 个字节,事件约 170 个字节。
因此,所需要的磁盘总空间按下列方法计算:
配置文件数据+ 历史数据+ 趋势数据+ 事件数据

案例:假设 100台主机,每个主机约有100个监控项,每个监控项每间隔60s获取一次数值
#历史数据:
days*(items/refresh rate)*24*3600*bytes
90*(10000/60)*24*3600*90=116173440000 字节 约共116GB
#趋势:
days*(items/3600)*24*3600*bytes
365*(10000/3600)*24*3600*90=5676480000 字节 约共5G
#事件:
days*events*24*3600*bytes
365*1*24*3600*170=5361120000 约5G
#合计:126GB

*根据占用磁盘空间大小选择合适的策略进行数据库性能调优

Zabbix Server 配置文件解析

AlertScriptsPath
默认值:/usr/local/share/zabbix/alertscripts
说明:告警脚本目录
AllowRoot
默认值:0 说明:是否允许使用root启动,0:不允许,1:允许,默认情况下她会使用zabbix用户来启动
zabbix进程,不推荐使用root
CacheSize
取值范围: 128K-8G
默认值:8M
说明:配置缓存,用于存储host,item,trigger数据,2.2.3版本之前最大支持2G,目前最大支持
8G,zabbix5.0最大支持64G
CacheUpdateFrequency
取值范围:1-3600
默认值:60
说明:多少秒更新一次配置缓存
DBHost
默认值:localhost
说明:数据库主机地址
DBName
默认值:无
必填:是
DBPassword:
默认值:无
说明:数据库密码
DBPort
取值范围:1024-65535
默认值:3306
说明:SQLite作为DB,这个选项请忽略,如果使用socket链接,也请忽略。
DBSchema
说明:Schema名称. 用于 IBM DB2 、 PostgreSQL.
DBSocket
默认值:/tmp/mysql.sock
说明:mysql sock文件路径
DebugLevel
取值范围:0-5
默认值:3
说明: 指定debug级别
0 - 基本信息
1 - critical信息
2 - error信息
3 - warnings信息
4 - 调试日志,日志内容很多,慎重使用
5 - 用于调试web和vmware监控
ExternalScripts
默认值: /usr/local/share/zabbix/externalscripts
说明: 外部脚本目录
Fping6Location
默认值:/usr/sbin/fping6
说明:fping6路径,如果zabbix非root启动,请给fping6 SUID
FpingLocation
默认值:/usr/sbin/fping
说明:和上面的一样
HistoryCacheSize
取值范围:128K-2G
默认值:8M
说明:
历史记录缓存大小,用于存储历史记录
HistoryTextCacheSize
取值范围:128K-2G
默认值:16M
说明:文本类型历史记录的缓存大小,存储character, text 、log历史记录.
HousekeepingFrequency
取值范围:0-24
默认值:1
说明:housekeep执行频率,默认每小时回去删除一些过期数据。如果server重启,那么30分钟之后才执行一次,接下来,每隔一小时在执行一次。
Include
说明:include配置文件,可以使用正则表达式,例如:/usr/local/zabbix-
2.4.4/conf/ttlsa.com/*.conf
JavaGateway
说明:Zabbix Java gateway的主机名,需要启动Java pollers
JavaGatewayPort
取值范围:1024-32767
默认值:10052
Zabbix Java gateway监听端口
ListenIP
默认值:0.0.0.0
说明:监听地址,留空则会在所有的地址上监听,可以监听多个IP地址,ip之间使用逗号分隔,例如:
127.0.0.1,10.10.0.2
ListenPort
取值范围:1024-32767
默认值:10051
说明:监听端口
LoadModule
说明:加载模块,格式: LoadModule=,文件必须在指定的LoadModulePath目录下,如果需要加载多个模块,那么写多个即可。
LoadModulePath
模块目录,参考上面
LogFile
日志文件,例如:/data/logs/zabbix/zabbix-server.log
LogFileSize
取值范围:0-1024
默认值:1
0表示禁用日志自动rotation,如果日志达到了限制,并且rotation失败,老日志文件将会被清空掉,重新
生成一个新日志。
LogSlowQueries
取值范围:0-3600000
默认值:0
多慢的数据库查询将会被记录,单位:毫秒,0表示不记录慢查询。只有在DebugLevel=3时,这个配置才有
效。
MaxHousekeeperDelete
取值范围: 0-1000000
默认值:5000
housekeeping一次删除的数据不能大于MaxHousekeeperDelete
PidFile
默认值:/tmp/zabbix_server.pid
PID文件
ProxyConfigFrequency
取值范围:1-604800
默认值:3600
proxy被动模式下,server多少秒同步配置文件至proxy。
ProxyDataFrequency
取值范围:1-3600
默认值:1
被动模式下,zabbix server间隔多少秒向proxy请求历史数据
SenderFrequency
取值范围:5-3600
默认值:30
间隔多少秒,再尝试发送为发送的报警
SNMPTrapperFile
默认值:/tmp/zabbix_traps.tmp
SNMP trap发送到server的数据临时存放文件。
SourceIP
出口IP地址
SSHKeyLocation
SSH公钥私钥路径
SSLCertLocation
SSL证书目录,用于web监控
SSLKeyLocation
SSL认证私钥路径、用于web监控
SSLCALocation
SSL认证,CA路径,如果为空,将会使用系统默认的CA
StartDBSyncers
取值范围:1-100
默认值:4
预先foke DB Syncers的数量,1.8.5以前最大值为64
StartDiscoverers
取值范围:0-250
默认值:1
pre-forked discoverers的数量,1.8.5版本以前最大可为255
StartPollers
# Mandatory: no
取值范围:0-1000
默认值:5
Number of pre-forked instances of pollers.
StartHTTPPollers
取值范围:0-1000
默认值:1
pre-forked HTTP pollers的数量,1.8.5以前最大255
StartIPMIPollers
取值范围:0-1000
默认值:0
pre-forked IPMI pollers的数量,1.8.5之前,最大为255
StartPollersUnreachable
取值范围:0-1000
默认值:1
pre-forked instances of pollers for unreachable hosts (including IPMI and Java)
Timeout
取值范围:1-30
默认值:3
agent,snmp,external check的超时时间,单位为秒
TmpDir
默认值:/tmp
TrapperTimeout
取值范围:1-300
默认值:300
处理trapper数据的超时时间
TrendCacheSize
取值范围:128K-2G
默认值:4M
历史数据缓存大小
UnavailableDelay
取值范围:1-3600
默认值:60
间隔多少秒再次检测主机是否可用
UnreachableDelay
取值范围:1-3600
默认值:15
间隔多少秒再次检测主机是否可达。
UnreachablePeriod
取值范围:1-3600
默认值:45
检测到主机不可用,多久将它置为不可达
User
默认值:zabbix
启动zabbix server的用户,在配置禁止root启动,并且当前shell用户是root得情况下有效。如果当前用户是ttlsa,那么zabbix server的运行用户是ttlsa
ValueCacheSize
取值范围:0,128K-64G
默认值:8M
0表示禁用,history value缓存大小,当缓存超标了,将会每隔5分钟往server日志里面记录。养成看日志的好习惯。

案例:利用API添加几百台监控的主机,因为默认值8M太小 ,会造成Zabbix Server 不断的重启,可以看到如下日志信息
root@zabbix-server ~]#tail -f /var/log/zabbix/zabbix_server.log
......
8588:20220617:213218.764 syncing trend data done
8588:20220617:213218.764 Zabbix Server stopped. Zabbix 5.0.24 (revision
313ff6504e3).
8611:20220617:213228.800 Starting Zabbix Server. Zabbix 5.0.24 (revision
313ff6504e3).
8611:20220617:213228.800 ****** Enabled features ******
8611:20220617:213228.800 SNMP monitoring: YES
8611:20220617:213228.800 IPMI monitoring: YES
8611:20220617:213228.800 Web monitoring: YES
8611:20220617:213228.800 VMware monitoring: YES
8611:20220617:213228.800 SMTP authentication: YES
8611:20220617:213228.800 ODBC: YES
8611:20220617:213228.800 SSH support: YES
8611:20220617:213228.800 IPv6 support: YES
8611:20220617:213228.800 TLS support: YES
8636:20220617:213239.302 ******************************
8636:20220617:213239.302 using configuration file:
/etc/zabbix/zabbix_server.conf
8636:20220617:213239.306 current database version (mandatory/optional):
05000000/05000005
8636:20220617:213239.306 required mandatory version: 05000000
8636:20220617:213239.315 server #0 started [main process]
8637:20220617:213239.316 server #1 started [configuration syncer #1]
8637:20220617:213239.535 __mem_malloc: skipped 0 asked 72 skip_min
18446744073709551615 skip_max 0
8637:20220617:213239.535 [file:dbconfig.c,line:96] __zbx_mem_malloc(): out of
memory (requested 72 bytes)
8637:20220617:213239.535 [file:dbconfig.c,line:96] __zbx_mem_malloc(): please
increase CacheSize configuration parameter
8637:20220617:213239.535 === memory statistics for configuration cache ===
8637:20220617:213239.535 free chunks of size 24 bytes: 55
8637:20220617:213239.535 free chunks of size 32 bytes: 11
8637:20220617:213239.535 free chunks of size 40 bytes: 6
8637:20220617:213239.535 free chunks of size 48 bytes: 5
8637:20220617:213239.535 free chunks of size 56 bytes: 3
8637:20220617:213239.535 min chunk size: 24 bytes
8637:20220617:213239.535 max chunk size: 56 bytes
8637:20220617:213239.535 memory of total size 7264040 bytes fragmented into
70263 chunks
8637:20220617:213239.535 of those, 2320 bytes are in 80 free
chunks
8637:20220617:213239.535 of those, 7261720 bytes are in 70183 used
chunks
8637:20220617:213239.535 of those, 1124192 bytes are used by allocation
overhead
8637:20220617:213239.535 ================================
[root@zabbix-server ~]#cat /var/log/syslog
Jun 17 21:37:18 zabbix-server systemd[1]: zabbix-server.service: Scheduled
restart job, restart counter is at 31.
Jun 17 21:37:18 zabbix-server systemd[1]: Stopped Zabbix Server.
Jun 17 21:37:18 zabbix-server systemd[1]: Starting Zabbix Server...
Jun 17 21:37:18 zabbix-server systemd[1]: Started Zabbix Server.
Jun 17 21:37:18 zabbix-server kill[9306]: 用法:
Jun 17 21:37:18 zabbix-server kill[9306]: kill [options] <pid> [...]
Jun 17 21:37:18 zabbix-server kill[9306]: 选项:
Jun 17 21:37:18 zabbix-server kill[9306]: <pid> [...] send signal to
every <pid> listed
Jun 17 21:37:18 zabbix-server kill[9306]: -<signal>, -s, --signal <signal>
Jun 17 21:37:18 zabbix-server kill[9306]: specify the
<signal> to be sent
Jun 17 21:37:18 zabbix-server kill[9306]: -l, --list=[<signal>] list all
signal names, or convert one to a name
Jun 17 21:37:18 zabbix-server kill[9306]: -L, --table list all
signal names in a nice table
Jun 17 21:37:18 zabbix-server kill[9306]: -h, --help 显示此帮助然后离开
Jun 17 21:37:18 zabbix-server kill[9306]: -V, --version 显示程序版本然后离开
Jun 17 21:37:18 zabbix-server kill[9306]: 欲了解更多详细信息,请参见 kill(1)。
Jun 17 21:37:18 zabbix-server systemd[1]: zabbix-server.service: Control process
exited, code=exited, status=1/FAILURE
Jun 17 21:37:18 zabbix-server systemd[1]: zabbix-server.service: Failed with
result 'exit-code'.
[root@zabbix-server ~]#systemctl status zabbix-server.service
● zabbix-server.service - Zabbix Server
Loaded: loaded (/lib/systemd/system/zabbix-server.service; enabled; vendor
preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Fri 2021-06-17
21:38:51 CST; 8s ago
Process: 9509 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited,
status=0/SUCCESS)
Process: 9528 ExecStop=/bin/kill -SIGTERM $MAINPID (code=exited,
status=1/FAILURE)
Main PID: 9526 (code=exited, status=0/SUCCESS)
6月 17 21:38:51 zabbix-server.wang.org systemd[1]: zabbix-server.service: Control
process exited, code=exited, status=1/FAILURE
6月 17 21:38:51 zabbix-server.wang.org systemd[1]: zabbix-server.service: Failed
with result 'exit-code'.
#加大缓存
[root@zabbix-server ~]#vim /etc/zabbix/zabbix_server.conf
# CacheSize=8M
CacheSize=256M
#观察结果,发现Zabbix Server 服务启动成功
[root@zabbix-server ~]#systemctl is-active zabbix-server.service
active

Zabbix高可用集群

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

在前面的部署架构中,Zabbix Server 和MySQL都有只有一台主机,存在单点问题
可以使用Keepalived 实现 Zabbix Server的高可用
基础架构为LAMP或LNMP环境,采用keepalived实现zabbix服务器高可用,保证主服务器或者Httpd宕掉后能切换到从服务器
MySQL数据库做主主同步,保证两边服务器数据的一致性,实现数据库的高可用。
*注意: 从 Zabbix 6.0 官方提供了高可用解决方案
官方链接
https://www.zabbix.com/documentation/6.0/zh/manual/concepts/server/ha#implementation-details

启用官方版高可用集群【摘抄官网原文】

在server配置中需要两个参数来启动Zabbix server作为集群节点:

  • HANodeName 集群中每个zabbix server节点名称必须要有且唯一

这是将在agent和proxy配置中引用server的名称 (例如: zabbix-node-01 )。如果您没有指定HANodeName,那么服务器将以standalone模式启动。

  • NodeAddress 参数必须为每个节点指定。

NodeAddress参数(address:port)将被Zabbix前端用来连接到主server节点。NodeAddress必须匹配相应Zabbix server的IP或FQDN名称。
Zabbix HA解决方案由多个zabbix_server实例或节点组成。每个节点独立配置,但数据库是使用同一个实例。

Zabbix HA节点包括以下几种状态:

  • active(活动)
  • standby(备用)
  • unavailable(不可用)
  • stopped(停止)

在同一个Zabbix HA集群中,只有一个实例或节点处于active(活动)状态,standby(备用)节点不进行数据收集、处理或其他任务,并且不监听端口,并保持一个最少的数据库连接

案例:实现 Zabbix Server 6.0 的高可用

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

在MySQL创建用户并授权

#如果原有的数据库用户无远程连接权限,需要进行授权
[root@zabbix-server ~]#vi /etc/mysql/mysql.conf.d/mysqld.cnf
#注释下面两行
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
[root@zabbix-server ~]#systemctl restart mysql
[root@zabbix-server ~]#mysql
mysql> create user zabbix@'10.0.0.%' identified by '123456';
mysql> grant all on zabbix.* to zabbix@'10.0.0.%';

两个Zabbix Server 节点都修改配置文件

*注意:在没有配置集群时,不要同时启动多个Zabbix Server
#主节点配置
vim /etc/zabbix/zabbix_server.conf
DBHost=10.0.0.200
DBName=zabbix
DBUser=zabbix
DBPassword=123456
## 以下两个参数是HA配置的参数
# HANodeName设置为当前节点主机名或者IP地址,需保证同一集群中唯一
HANodeName=zabbix-master
# NodeAddress设置为节点IP:10051
NodeAddress=10.0.0.200:10051
systemctl restart zabbix-server.service
#备用节点安装Zabbix server,并修改配置,指向同一个数据库

vim /etc/zabbix/zabbix_server.conf
DBHost=10.0.0.200
DBName=zabbix
DBUser=zabbix
DBPassword=123456
## 以下两个参数是HA配置的参数
# HANodeName设置为当前节点主机名或者IP地址,需保证同一集群中唯一
HANodeName=zabbix-slave
# NodeAddress设置为节点IP:10051
NodeAddress=10.0.0.210:10051
#备用节点初始化配置,修改php配置指向原数据库
#初始化的的配置需要在所有Zabbix Server节点上完成,或者将已完成节点的配置文件
/etc/zabbix/web/zabbix.conf.php拷贝至其他节点

[root@ubuntu2204 ~]#vim /etc/zabbix/web/zabbix.conf.php
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = '10.0.0.200';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = '123456';

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建

修改所有Agent的配置指向主和备用Zabbix Server

#配置Agent,Zabbix HA的方案需要在agent配置文件中将所有的Server节点地址配置到Server和ServerActive中
[root@ubuntu2204 ~]#vim /etc/zabbix/zabbix_agent2.conf
Server=10.0.0.200,10.0.0.210
ServerActive=10.0.0.200,10.0.0.210
[root@ubuntu2204 ~]#systemctl restart zabbix-agent2.service

查看状态

*查看HA状态有两种方式,一种是通过Web页面查看,另外一种是通过Runtime运行时的命令行查看

#通过Runtime运行时的命令行查看
在Zabbix Server节点上执行命令zabbix_server -R ha_status,并在日志文件/var/log/zabbix/zabbix_server.log中查看HA状态
[root@zabbix-server ~]#zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address
Status Last Access
1. clc3bjuvi000145qn9dw080tx zabbix-master 10.0.0.200:10051
active 5s
2. clc3bk2xf0001hedflh3t72rh zabbix-slave 10.0.0.210:10051
standby 2s
#备用节节点执行如下提示
[root@ubuntu2204 ~]#zabbix_server -R ha_status
Runtime commands can be executed only in active mode
[root@ubuntu2204 ~]#systemctl is-active zabbix-server.service
active
#备用节点不监听端口
[root@ubuntu2204 ~]#ss -nlt |grep 10051

在Reports -> System infomation页面可以查看HA状态

40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建


我是moore,大家一起加油!明天开始更新云原生系列文章。