ZABBIX5.0----部署详解
- 监控介绍
- 什么是监控,为什么需要监控
- 命令监控
- shell脚本监控
- 开源软件监控
- Zabbix工作原理
- Zabbix组件及进程
- Zabbix基本概念
- Zabbix监控架构
- zabbix生产环境部署
- 版本选择5.0
- 环境准备
- nginx+php7.2部署
- mariadb部署
- zabbix-server部署
- zabbix-web部署
- zabbix-agent部署
- 监控节点部署
- zabbix监控配置
- Zabbix 5.0新组件:agent 2
- 自定义监控项
- 自定义触发器
- 邮件报警
- 微信报警
- 自定义消息模板
- 持续发送邮件/微信
- 故障预处理和报警升级
- 中文乱码
- 性能调优
- 自定义监控项
- 自定义图形
- 优化
- 优化后
- grafana出图
- zabbix模板
- 自定义模板
- share模板
- 监控维度总结
- Matomo访问分析
- 环境准备
- 安装
- SNMP监控
- Linux配置SNMP监控
- Window7配置SNMP监控
- Window安装agents
- agent特性
- 自动发现和自动注册
- 环境准备
- 自动发现
- 自动注册
- 主动模式和被动模式
- 自动发现和自动注册
- proxy分布式
- 环境准备
- zabbix-server
- zabbix-proxy
- zabbix-agent
- zabbix-web
- 监控JVM
- 安装tomcat+jdk
- 配置jmx
- zabbix-server
- zabbix-web
- 低层发现
- 自定义监控项原型
- 自定义底层发现规则
- 正则和过滤器
- API(application interface)
- api调用脚本
- 获取Token(身份验证令牌)
- 获取主机列表
- 更新主机状态
- 创建主机
- 性能优化
- 高可用
- 环境准备
- zabbix-server01
- zabbix-agent
- zabbix-server02
- 验证测试
监控介绍
什么是监控,为什么需要监控
监控:监视,控制
保证服务7*24小时运行,高可用99.9%。
- 事后追责:jumpserver回放
- 事前预警:随着用户的增多,服务随时可能会被oom
- 及时报警:发现故障预处理
- 性能分析:优化前后数据,体现效果
命令监控
Linux常见监控命令
查看:
-
发行版本:lsb_release
-
系统信息:uname
-
内存使用:free
-
虚拟内存:vmstat
-
网络:netstat
-
系统资源统计:dstat
-
已打开文件:lsof
-
系统负载:uptime
-
任务:jobs
-
历史命令:history
监控:
shell脚本监控
shell+cron
开源软件监控
-
open-falcon:添加自定义监控项难,适合有开发基础的用
-
promethues:
-
cacti是一款数据采集,数据存储,外加web界面展示的工具,它负责阈值范围内的实时变化,但是对超过阈值的告警功能很薄弱
- 优点:实时监控数据变化,以web页面的方式呈现,更直观。
- 缺点:告警不及时,基于PHP开发,添加自定义监控项很难。
-
nagios不关心阈值范围内的变化,只关心状态变化(超过阈值),然后报警。报警方式通过邮件,短信等。添加自定义监控项容易
- 优点:告警反映迅速。
- 缺点:监控主机数量有限,承载低,没有数据库,不能存储历史数据
-
zabbix = cacti + nagios
- 优点:基于两款工具优点于一身并更强大,实现企业级分布式监控。有数据库,配置简单,模板,支持广泛,agent,snmp,jmx,ipmi,ssh,telnet,mysql,...
- 缺点:2.4版本后更节省带宽资源,其它再无发现。
Zabbix工作原理
安装zabbix-agent到被监控的主机上,它负责定期收集各项数据,并发送到zabbix-server端,zabbix-server将数据存储到数据库中,zabbix-web根据数据在前端进行展现和绘图。
agent收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
【主动监测】通信过程:
zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。zabbix获取active items根据配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。过程分两个部分:
获取ACTIVE ITEMS列表:
- Agent打开TCP连接(主动检测变成Agent打开)
- Agent请求items检测列表
- Server返回items列表
- Agent 处理响应
- 关闭TCP连接
- Agent开始收集数据
主动检测提交数据:
- Agent建立TCP连接
- Agent提交items列表收集的数据
- Server处理数据,并返回响应状态
- 关闭TCP连接
【被动监测】通信过程:
- Server打开一个TCP连接
- Server发送请求agent.ping\n
- Agent接收到请求并且响应1
- Server处理接收到的数据1
- 关闭TCP连接
被动模式每次都需要打开一个tcp连接,当监控项越来越多时,server端性能会出现问题。
监控实际应用:
-
新建监控项目时,选择的是zabbix代理(被动式)还是zabbix端点代理程式(主动式)。
-
agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。
- 定义一个template模板,里面包括多个items,trigger,graphs套用给host或者hostgroups。
- server监控项目items通过zabbix poller进程(可以有多个进程实现并发处理)包括snmp,agent协议收集被监控主机信息。
- 如果阈值超过triggers触发器规定,就是形成一个events事件,然后actions处理动作(包括运行预先定制的脚本,不成功发送email或SMS)。
- 在服务器升级的时候提前设定maintenance维护模式不对服务器产生告警通知。
Zabbix组件及进程
常见组件:
-
Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行;
-
Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据;
-
Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;
-
Proxy:可选组件,常用于分布监控环境中,代理Server收集部分被监控端的监控数据并统一发往Server端;
-
Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端;
注:zabbix node也是 zabbix server的一种 。
常见进程:
-
zabbix_agentd:客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。
-
zabbix_get:zabbix工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令。通常用户排错。例如在server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内容的方式来做故障排查。
-
zabbix_sender:zabbix工具,用于发送数据给server或者proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致zabbix超时。在脚本执行完毕之后,使用sender主动提交数据。
-
zabbix_server:zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server。
当然不是数据都是主动提交给zabbix_server,也有的是server主动去取数据。
- zabbix_proxy:zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里。为什么要用代理?代理是做什么的?卖个关子,请继续关注运维生存时间zabbix教程系列。
- zabbix_java_gateway:zabbix2.0之后引入的一个功能。Java网关,类似agentd,但是只用于Java方面。注意,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。
Zabbix基本概念
-
主机(host):要监控的网络设备,可由IP或DNS名称指定;
-
主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组织内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用;
-
监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由"key"标识;
-
触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据再次恢复到合理范围,又转变为"OK";
-
事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等;
-
动作(action):指对于特定事件事先定义的处理方法,如发送通知,何时执行操作;
-
报警升级(escalation):发送警报或者执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等;
-
媒介(media):发送通知的手段或者通道,如Email、Jabber或者SMS等;
-
通知(notification):通过选定的媒介向用户发送的有关某事件的信息;
-
远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下时自动执行;
-
模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至某个主机;
-
应用(application):一组item的集合;
-
web场景(web scennario):用于检测web站点可用性的一个活多个HTTP请求;
-
前端(frontend):Zabbix的web接口;
Zabbix监控架构
agent:主机通过安装agent方式采集数据。
server:通过收集agent发送的数据,写入数据库(MySQL,ORACLE等),再通过php+apache在web前端展示.
zabbix根据网络环境、监控规模等分为三种架构:
server-client
zabbix最简单的架构,监控机和被监控机之间不经过任何代理 ,直接由zabbix server和zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境 。
server-proxy-client
其中proxy是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后再提交给server 。该架构经常是和master-node-client架构做比较的架构 ,一般适用于跨机房、跨网络的中型网络架构的监控,有效的减轻server端的压力。
master-node-client
zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境 。每个node同时也是一个server端,node下面可以接proxy,也可以直接接client 。node有自已的配置文件和数据库,其要做的是将配置信息和监控数据向master同步,master的故障或损坏对node其下架构的完整性。
zabbix生产环境部署
版本选择5.0
| 版本名称 | 发布日期 | 全面支持期限 | 最低限度支持期限 |
|---|---|---|---|
| Zabbix 5.2 | Oct 27, 2020 | Apr 30, 2021 | May 31, 2021 |
| Zabbix 5.0 LTS | May 12, 2020 | May 31, 2023 | May 31, 2025 |
| Zabbix 4.0 LTS | October 1, 2018 | October 31, 2021 | October 31, 2023 |
| Zabbix 3.0 LTS | February 16, 2016 | February 28, 2019 | February 28, 2021 |
LTS代表“长期支持版本”。Zabbix LTS版本每一年半发布一次,且为Zabbix客户提供五年的支持服务
- 3年全面支持 - 支持修复基础的、紧急的以及安全性上的问题
- 2年最低限度支持 - 仅限支持修复紧急的和安全性上的问题
Zabbix LTS 特点:
- 支持期限更长,例如:为潜在的安全问题及bug迭代更新
- 令人期待的高质量更新以及全新的功能点
- 快速更新,可适用于多变的复杂环境
- 在版本升级方面,更容易规划管理
Zabbix前端支持的最小屏幕宽度为1200px。
| Software | Version | Comments |
|---|---|---|
| MySQL | 5.5.62-8.0.x | MySQL必需InnoDB引擎。 MariaDB(10.0.37或更高版本)也可以与Zabbix一起使用。无论您使用MySQL还是MariaDB数据库服务器, 我们都建议使用MariaDB Connector / C库来构建服务器/代理。 |
| PHP | 7.2.0 or later | |
| PHP extensions: | ||
| gd | 2.0.28 or later | PHP GD extension must support PNG images (--with-png-dir), JPEG (--with-jpeg-dir) images and FreeType 2 (--with-freetype-dir). |
| bcmath | php-bcmath (--enable-bcmath) | |
| ctype | php-ctype (--enable-ctype) | |
| libXML | 2.6.15 or later | php-xml, if provided as a separate package by the distributor. |
| xmlreader | php-xmlreader, if provided as a separate package by the distributor. | |
| xmlwriter | php-xmlwriter, if provided as a separate package by the distributor. | |
| session | php-session, if provided as a separate package by the distributor. | |
| sockets | php-net-socket (--enable-sockets). Required for user script support. | |
| mbstring | php-mbstring (--enable-mbstring) | |
| gettext | php-gettext (--with-gettext). Required for translations to work. | |
| ldap | php-ldap. Required only if LDAP authentication is used in the frontend. | |
| openssl | php-openssl. Required only if SAML authentication is used in the frontend. | |
| mysqli | Required if MySQL is used as Zabbix backend database. | |
| oci8 | Required if Oracle is used as Zabbix backend database. | |
| pgsql | Required if PostgreSQL is used as Zabbix backend database. |
环境准备
| 主机名 | IP | 配置 |
|---|---|---|
| zabbix-server | 10.0.0.71 | 1C1G |
| web01 | 10.0.0.7 | 1C1G |
-
关闭:
selinux,firewalld和NetworkManager,postfix(非必须) -
修改IP地址、主机名
nginx+php7.2部署
- 配置yum源
- 安装nginx和php72
- 查看安装模块,和官方文档对比
- 修改php-fpm启动用户
- 修改nginx配置文件:使用php
- 创建代码目录并授权
- 启动php-fpm和nginx并加入开机自动
mariadb部署
- 安装mariadb
- 启动mariadb并加入开机自动
- 安全初始化
- 创建数据库并授权
zabbix-server部署
- 配置yum源
- 安装zabbix-server
- 导入初始化表
- 修改配置文件
- 启动zabbix-server并加入开机自动
- 验证:查看端口10051
zabbix-web部署
- 移动web源码并授权
- 调整php.ini参数,重启生效
- 浏览器访问:http://10.0.0.71/
- 配置数据库连接:端口3306,密码123456
- 生成配置文件:
/html/conf/zabbix.conf.php
- 完成,登录zabbix-web,用户名/密码:Aadmin/zabbix
- 改为中文:User settings --> Language --> Chinese (zh_CN) --> Update
zabbix-agent部署
- 安装zabbix-agent
- 启动zabbix-agent并加入开机自动
- 验证:查看端口10050
监控节点部署
-
配置yum源,见zabbix-server部署,安装zabbix-agent
-
修改zabbix-agent配置,再启动
zabbix监控配置
- 配置 --> 主机 --> 创建主机
-
配置
-
主机名(唯一):使用IP地址
-
群组:web
-
客户端:IP
-
模板:Linux
-
-
zabbix-server默认每60s检测一次,添加完主机不会立即去数据库读取。
想快速检测到,可以重启zabbix-server。
Zabbix 5.0新组件:agent 2
zabbix-agent2是新一代的Zabbix代理,agent 2用Go编写(重用了zabbix-agent的某些C代码),可以代替zabbix-agent使用:
- 减少TCP连接数
- 具有更大的支票并发
- 易于通过插件扩展。插件应该能够:
- 提供仅由几行简单代码组成的琐碎检查
- 提供由长期运行的脚本和独立的数据收集组成的复杂检查,并定期发送回数据
- 替代zabbix-agent(因为它支持所有以前的功能)
- 注意:zabbix_agentd2不能和zabbix_agentd同时启动
- 安装zabbix-agent2
- 修改zabbix-agent2配置
- 启动zabbix-agent2并加入开机自动
- 验证:查看端口10050
自定义监控项
安装nginx
- 新增自定义监控项(zabbix_agent2.conf),重启生效
- web界面添加自定义监控项
- 名称:(唯一)面板上显示
- 键值:配置文件中的
<key> - 应用集:筛选标签
- 查看最新数据-->筛选应用集:nginx
如果使用
netstat -lntup会报错:服务端安装测试工具zabbix-get
zabbix-get测试自定义监控项
zabbix-agent执行shell命令时,使用zabbix用户:执行netstat
-p参数需要root权限解决方式一:给netstat命令增加SUID权限
解决方式二:使用root用户运行zabbix_agent2
- Include加载监控项
- 复制监控项
注意:复制的监控项,没有应用集,需要手动添加。
自定义触发器
- 配置 --> 主机 --> 触发器 --> 创建触发器
- 配置
- 名称
- 严重性
- 表达式:添加
- 停止nginx
- 查看仪表盘,触发报警
- 确认报警
- 监控项/触发器红色,不支持,刷新不支持的项目:默认10m
邮件报警
- 禁用其他报警类型,只保留Email
- 配置Email发送参数
- web测试
- 配置用户收件信息
- 启用发送消息动作
- 停止nginx测试
微信报警
属于自定义脚本报警
- 创建自定义脚本:微信报警
- 登录企业微信,获取:
- corpid:企业ID
- appsecret:Secret
- agentid:AgentId
- 创建应用
- 安装python依赖包
- 命令行测试脚本发送消息,清除日志
- 创建报警媒体类型
- 配置
-
名称:微信报警
- 类型:脚本
- 脚本名称:weixin.py
-
脚本参数:宏使用场景
- {ALERT.SENDTO}
- {ALERT.SUBJECT}
- {ALERT.MESSAGE}
- web测试:@all(所有人)
- 测试成功
- 配置消息模板:Message type
- 问题
- Problem recovery
- Problem update
- 配置用户 --> 报警媒介
- 停止nginx测试
- 查看报表 --> 动作日志
自定义消息模板
- 消息模板,参考宏使用
- 管理 --> 报警 --> 媒介类型 --> 微信报警 --> Message templates --> 编辑 --> 更新
- 停止nginx测试
持续发送邮件/微信
- 配置动作
- 修改操作 --> 步骤 1-0(无穷大)
- 停止nginx测试
故障预处理和报警升级
参考文档:zabbix故障预处理和报警升级
建议手动处理,预处理功能还不够完善,例如任意报警触发预处理。
中文乱码
- 监测 --> 主机 --> 图形:页面文字显示方块(默认字体不支持中文)
- 上传字体(黑体 常规),覆盖原字体文件
- 刷新页面,中文乱码解决
性能调优
自定义监控项
监控time_wait状态tcp数量
- web01创建监控项配置文件
- 添加监控项
- 配置监控项
- 名称:监控time_wait状态tcp数量
- 键值:tw_count
- 更新间隔:15s
- 新的应用集:tcp
- 用户设置 --> 每页行数:200
- 快速增加连接数:配置 --> 主机 --> 监控项 --> 全选监控项 --> 批量更新 --> 更新间隔:15s --> 更新

- 查看监测数据
自定义图形
- 配置 --> 主机 --> 图形 --> 创建图形
- 配置图形
- 名称:time_wait数量
- 图形类别:层积的
- 监控项:10.0.0.7:监控time_wait状态tcp数量
- 查看图形:检测 --> 主机 --> 图形 --> 过滤器 --> 选择图形 --> 应用
优化
重用回收Time_wait
net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。注意:不能给负载均衡优化该项,会导致SYN拒绝问题。
net.ipv4.tcp_fin_timeout 修改系統默认的TIMEOUT时间
优化后
刷新页面,查看图形,优化效果明显
grafana出图
- 安装grafana
- 启动并加入开机自启
-
安装zabbix插件
也可以直接下载插件文件,并解压
- 重启生效
- 配置 --> 参数选择 --> 开灯 --> 保存
- 选择插件

- 添加数据源:选择Zabbix
- URL:http://10.0.0.71/api_jsonrpc.php
- Username:Admin
- Password:zabbix
- 导入 Dashboards (仪表板)

- 查看刚导入的 Dashboards (仪表板)
- 查看三个面板图
- 导入模板:输入ID 8677
- 选择插件,导入
- 参考 Zabbix Template Linux Server 模板,修改Variables
zabbix模板
自定义模板
- 创建模板
- 配置
- 模板名称:tcp 11 status template
- 群组:network
- web01创建监控项配置文件
- 添加11个监控项,克隆
- 名称:ESTABLISHED状态的数量
- 键值:ESTABLISHED
- 应用集:tcp
- 验证:监测 --> 最新数据
- 选择11个监控项复制给模板
- 模板监控项批量更新应用集
- 创建触发器
- 名称:可能被DOS攻击
- 严重性:警告
- 表达式:
- 监控项:SYN_RECV状态的数量
- 功能:平均值avg()
- 结果:>5
- 主机链接模板
- 验证:监测 --> 最新数据
- 导出模板:zeb_export_template.xml
share模板
- web01下载redis监控项配置文件,重启agent生效
- 下载模板,导入http://10.0.0.71/(查看key的名称)检查模板兼容性
- web01安装redis,启动并加入开机自启,查看redis信息,本地取值测试
- zabbix_get远程取值测试
- 主机链接模板
- 模板 --> 宏
- 验证:监测 --> 最新数据
- web01部署Discuz LNMP,参考之前
- 开启redis缓存
- 刷新页面,验证:监测 --> 最新数据
监控维度总结
-
硬件层面:
- 服务器:温度,电压,功率,磁盘,风扇转速
- 网络设备:SNMP协议,UPS,防火墙,F5
-
系统层面:CPU,内存,磁盘,网卡,进程,安全
-
应用层面:nginx、tomcat、mysql、redis、...
-
业务层面:
Matomo访问分析
环境准备
| 主机名 | IP | 配置 |
|---|---|---|
| matomo | 10.0.0.8 | 1C1G |
- Matomo 4.x 需要PHP 7.2.5或更高版本(Matomo 4仅支持PHP 8)。
- MySQL 5.5或更高版本,或MariaDB
- (默认情况下启用)PHP扩展pdo和pdo_mysql,或mysqli扩展。
安装
- matomo搭建LNMP,参考之前
- 10.0.0.71创建数据库用户,并授权
- 设置网站
- 跟踪代码

- Discuz 添加跟踪代码
- 访问:http://10.0.0.7/,多浏览器多访问几个页面
- matomo查看报表面板:http://10.0.0.8/
SNMP监控
SNMP协议(simple netwoek manager protocol)简单网络管理协议:
支持window,linux,unix,打印机,路由交换,ups,... ...
OID:Object ID 一个监控指标
MIB:所有OID的集合
Linux配置SNMP监控
- matomo安装net-snmp服务
- matomo配置net-snmp服务
- 口令:community
- 版本:v2c
- matomo启动net-snmp服务并加入开机启动
- 验证查看UDP:161端口
- zabbix-server安装测试工具net-snmp-utils
- zabbix-server使用snmpwalk读取数据测试
- 浏览器访问zabbix:http://10.0.0.71/,配置 --> 主机 --> 创建主机
- 配置:移除客户端方式,添加SNMP
- IP地址:10.0.0.8
- 口令:community
- 添加模板
- 验证:监测 --> 主机

Window7配置SNMP监控
- 控制面板 --> 程序和功能 --> 启动或关闭windows功能 --> 简单网络管理协议(SNMP)
- 服务:SNMP Service 配置community和接受IP
- zabbix-server使用snmpwalk读取数据测试
-
浏览器访问zabbix:http://10.0.0.71/,配置 --> 主机 --> 创建主机,添加模板
-
win10没有SNMP服务,可以安装agents客户端。
Window安装agents
- 选择amd64-openssl.msi
- 安装客户端,浏览器访问zabbix:http://10.0.0.71/,配置 --> 主机 --> 创建主机,添加模板
agent特性
自动发现和自动注册
环境准备
- 浏览器访问zabbix:http://10.0.0.71/,删除主机
- matomo安装zabbix-agent2,配置启动并加入开机自启
自动发现
- 启用自动发现规则
- 配置自动发现规则
- 配置 --> 动作 --> 自动发现动作
- 启用自动发现动作
- 动作 --> 操作 --> 添加操作:添加主机 --> 更新
- 重启zabbix-server,不然要等很久
自动注册
-
停用自动发现规则和动作,删除主机
-
配置 --> 动作 --> Autoregistration actions --> 创建动作
- 配置自动注册规则:
- 动作
- 名称:自动添加web服务器
- 条件:A 主机元数据 包含 web
- 操作
- 添加主机
- 添加到主机群组:web
- 与模板关联:Template OS Linux by Zabbix agent
- 动作
- 修改zabbix-agent2配置
- 重启zabbix-agent2
- 浏览器访问zabbix:http://10.0.0.71/,zabbix立即注册成功
- ansible自动注册playbook(注意推监控项配置文件)
主动模式和被动模式
被动模式:
- 链接被动模板(默认)
- agent等待server索要,多个监控项,多个tcp链接
- server获取每个数据向agent请求一次
主动模式:
- 链接主动模板
- agent主动向server汇报,多个监控项,1个tcp链接
- agent收集所有数据打包一次性发给server,减轻server负担
-
关闭自动注册,10.0.0.7主机取消模板链接并清理
- 取消链接:保留监控项,变为自定义监控项
- 取消链接并清理:清理监控项
-
链接主动模板:Template OS Linux by Zabbix agent active
- 修改zabbix-agentd配置
- 调整zabbix-agentd日志级别
- 清空日志,关闭zabbix-agent2(不支持主动模式),启动zabbix-agent,监视日志
- 查看日志
- 验证:监测 --> 最新数据
主动模式最新数据时间一致:agent收集所有数据打包一次性发给server
被动模式最新数据时间不一致:server获取每个数据向agent请求一次
- ZBX可用性绿色:调整Template Module Zabbix agent active监控项为被动模式

- 验证:配置 --> 主机 --> ZBX可用性绿色
- 新增主动模式模板:克隆被动模式模板 --> 批量更新所有监控项的类型为(主动式)
proxy分布式
环境准备
| 主机 | eth0 | eth1 |
|---|---|---|
| zabbix-server | 10.0.0.71 | 关闭 |
| zabbix-proxy | 10.0.0.8 | 172.16.1.8 |
| zabbix-agent | 关闭 | 172.16.1.7 |
zabbix-server
- 准备:关闭eth1
zabbix-proxy
- 准备:修改主机名,停止zabbix_agent2
- 安装zabbix-proxy和mariadb
- 启动mariadb并加入开机自动
- 创建数据库并授权
- 导入初始化表
- 配置zabbix-proxy
- 启动zabbix-proxy并加入开机自动
- 验证:查看端口10051
zabbix-agent
- 准备:关闭eth0
- 修改zabbix-agentd配置,重启生效
zabbix-web
- 删除主机
- 管理 --> agent代理程序 --> 创建代理
- 配置代理
- agent代理程序名称:Hostname=shenzhen-proxy
- 代理地址:10.0.0.8
- 验证agent代理:刷新,可以重启服务加速发现
- 配置 --> 主机 --> 创建主机
- 配置主机,模板
- 主机名称:172.16.1.7
- 群组:web
- 客户端:172.16.1.7
- 代理:shenzhen-proxy
-
默认:zabbix-server刷新频率:60s+zabbix-proxy配置发现频率:3600s
重启服务加速

- 可以使用自动注册:删除主机,开启自动注册动作,依次重启服务加速,查看主机自动注册成功
监控JVM
JDK:Java Development Kit = JRE:Java Runtime Environment + 工具
Java语言web服务器:
-
开源:Tomcat
-
Oracle:WebLogic
-
RedH:Jboss
-
CAUCHO:Resin
安装tomcat+jdk
- yum安装java8
- 二进制安装tomcat
startup.sh实际上是调用catalina.sh
配置jmx
- zabbix-proxy开启tomcat的jmx功能:开启监控页面
- zabbix-proxy启动并验证
- windows使用jconsole.jar远程10.0.0.8:12346连接测试
C:\Java\jdk\bin\jconsole.exe
zabbix-server
- 安装zabbix-java-gateway
- 启动zabbix-java-gateway并加入开机自动,验证
- 配置zabbix-java-gateway
- 重启zabbix-server服务生效
zabbix-web
- 创建主机
- 主机名称:10.0.0.8
- 群组:web
- Interfaces:JMX
- 10.0.0.8
- 链接的模板:Template App Generic Java JMX
- 验证:
- 监控项详解
键值: jmx["java.lang:type=ClassLoading","LoadedClassCount"]
- 对象名:ObjectName:java.lang:type=ClassLoading
- 属性值名称:LoadedClassCount
- 自定义监控项: jmx["",""]
低层发现
-
自动发现:自动添加主机
-
低层发现(LLD):自动添加监控项,触发器,图形等
- 提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法。
- 适合有规律,又有变化的资源。
Zabbix支持多种类型的项发现:
-
Discovery of file systems;
-
Discovery of network interfaces;
-
Discovery of CPUs and CPU cores;
-
Discovery of multiple SNMP OIDs;
-
Discovery using SQL queries;
-
Discovery of Windows Services.
-
Discovery any type of Entities,例如,数据库服务器上的数据库。
自定义监控项原型
- 新增自定义监控项,重启生效,测试取值
- 配置 --> 主机 --> 自动发现
- 监控项原型 --> 创建监控项原型
- 配置监控项原型
- 名称:网卡{#IFNAME}的mac地址
- 键值:net_mac[{#IFNAME}]
- 信息类型:字符
- 更新间隔:15s
- 应用集原型:Interface {#IFNAME}
- 修改底层自动发现规则的更新间隔:15s
- 重启服务加速监控项发现
- 查看监控项最新数据

自定义底层发现规则
实际上是监控项,键值是特定的json格式。
- 部署mysql多实例
- 创建mysql多实例底层发现脚本
- 自定义监控项脚本,测试取值
可以参考源码包默认监控型脚本:
- 配置 --> 主机 --> 自动发现 --> 创建发现规则
- 配置底层自动发现规则
- 名称:底层自动发现mysql
- 键值:discover.mysql
- 更新间隔:15s
- 监控项原型 --> 创建监控项原型 --> 配置监控项原型
- 名称:mysql{#MYSQLPORT}的存活状态
- 键值:mysql_alive[{#MYSQLPORT}]
- 更新间隔:15s
- 新的应用程序原型:mysql
- 查看监控项已发现:配置 --> 主机 --> 监控项 --> 应用集:mysql
- 查看监控项最新数据:监测 --> 最新数据 --> 应用集:mysql
- 同理再添加两个监控项原型
- 名称:mysql{#MYSQLPORT}的查询数量
- 键值:mysql_status[{#MYSQLPORT},Queries]
- 更新间隔:15s
- 应用集原型:mysql
- 克隆,修改
- 名称:mysql{#MYSQLPORT}的启动时间
- 键值:mysql_status[{#MYSQLPORT},Uptime]
- 查看监控项最新数据:监测 --> 最新数据 --> 应用集:mysql
正则和过滤器
- 管理 --> 一般 --> 界面设置 --> 正则表达式
- 新的正则表达式
- 配置正则表达式
- 名字:mysql_port
- 表达式类型:结果为假
- 表达式:3307
- 测试正则表达式:3307结果为假,也就是会被过滤掉
- 配置 --> 主机 --> 自动发现 --> 选择一个自动发现规则 --> 过滤器
- 宏:{#MYSQLPORT}
- 正则表达式:@mysql_port
- 3307无法发现:监控项 --> 应用集:mysql
API(application interface)
api调用脚本
Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。
针对zabbix进行二次开发,公司,运维管理平台(把zabbix集成到自己的运维平台)
获取Token(身份验证令牌)
获取主机列表
更新主机状态
status: 1 停用
创建主机
- 批量创建主机脚本
- 批量删除主机脚本
性能优化
-
数据库优化:zabbix是一个写多读少的业务,优化数据库的写入性能。
- mysql版本5.7以上
- mysql的TokuDB数据引擎
- 定时任务,分库分表处理
-
功能上优化:
- 精简无用的监控项
- 适当增加取值间隔
- 减少数据的保留周期
-
进程优化:适当增加进程数量
-
缓存优化:适当增加缓存大小
高可用
zabbix不是核心业务,一般不做高可用,但也会有要求,银行等。
zabbix高可用架构:
-
zabbix-web:Keepalive,VIP
-
mysql:主主同步,PXC(Percona XtraDB Cluster)高可用
-
zabbix-server:Keepalive,VIP
- Keepalive切换脚本:切换时,开启VIP主机zabbix-server,关闭远程zabbix-server
- zabbix-server
- 指定收集数据时使用的源IP:SourceIP=VIP
环境准备
| 主机名 | IP | 服务 |
|---|---|---|
| zabbix-server01 | 10.0.0.71 | zabbix-web:LNP,zabbix-server,keepalived;zabbix-agent |
| zabbix-server02 | 10.0.0.72 | zabbix-web:LNP,zabbix-server,keepalived;zabbix-agent |
| zabbix-agent | 10.0.0.8 | mysql;zabbix-agent |
zabbix-server01
- 清除主机,导出数据库并推送给zabbix-agent,关闭服务
- 修改zabbix_server数据库连接地址
- 修改zabbix_web数据库连接地址
- 安装keepalived
- 配置keepalived
- 配置keepalived调用脚本,安装sshpass
SSH端口不默认:
- 加入开机启动
- zabbix_server指定收集数据时使用的源IP
- 配置zabbix-agent
- 关闭服务器,链接克隆一台zabbix-server02,再启动
zabbix-agent
- 关闭服务,删库,导库,授权
- 配置zabbix-agent2
- 重启zabbix-agent2生效
zabbix-server02
- zabbix-server01链接克隆zabbix-server02,开机,修改主机名和IP
- 配置keepalived
- 配置keepalived调用脚本
- 重启keepalived生效
验证测试
- 关闭一台server,VIP漂移,正常使用zabbix
- 查看数据历史间隔:会丢失个别监控项的一次监控数据




































































































































































浙公网安备 33010602011771号