Zabbix 自动化监控
本篇介绍 Zabbix 监控系统的完整部署与使用,包括服务端安装、数据库初始化、Web 界面配置、Agent 监控本机与远程 Linux、监控项/触发器/图形/模板/Web 监测、自动发现、聚合检测、邮件告警、代理分布式监控,以及主动/被动监控模式。实验环境为 CentOS 7.3,Zabbix 版本为 3.2。
一、监控概述
监控的一般流程:
- 收集信息:对监控主机、服务等进行检测,记录相关信息。
- 图形表现:将数据以图形方式展现给用户。
- 报警通知:通过邮件、短信、微信等方式通知用户。
- 开发接口:开源产品仅提供基本功能,需要编写程序自定义监控。
常见开源监控软件
| 软件 | 说明 |
|---|---|
| mrtg | 老牌产品 |
| ntop | 老牌产品 |
| cacti | 图形表现好,www.cacti.net,常与 Nagios 结合使用 |
| nagios | 多年流行,报警功能强 |
| zabbix | 目前最流行 |
| Ganglia | —— |
| centreon | Nagios 的整合版本 |
| 监控宝 | www.jiankongbao.com |
| 360 监控 | 云市场监控软件 |
| 阿里云监控 | 云市场监控软件 |
Zabbix 架构
zabbix server ----> zabbix agent (被监控端)
192.168.224.10 192.168.224.11
二、服务端安装
2.1 环境准备(CentOS 7.3)
- 设置主机名:
hostnamectl set-hostname --static zabbixserver.cluster.com
vim /etc/hosts
在 /etc/hosts 中添加:
192.168.224.10 zabbixserver.cluster.com
- 时间同步。
- 关闭 iptables 和 SELinux。
- 配置 YUM 源(本地镜像源 + 163 源,可不用 EPEL 源):
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
- 配置 Zabbix 官方 YUM 源(版本 3.2):
wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
共需要三个 YUM 仓库:本地 ISO、163、Zabbix 官方。
2.2 安装 Zabbix 和 MariaDB
yum install zabbix-server-mysql zabbix-web-mysql mariadb-server -y
2.3 创建数据库并授权
systemctl restart mariadb.service
systemctl status mariadb.service
systemctl enable mariadb.service
mysql
MariaDB [(none)]> create database zabbix default charset utf8;
MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by '123';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> use zabbix;
MariaDB [(none)]> show tables;
MariaDB [(none)]> quit
2.4 导入表数据
zcat /usr/share/doc/zabbix-server-mysql-3.2.7/create.sql.gz | mysql -u zabbix -p123 zabbix
2.5 配置 Zabbix 主配置文件
vim /etc/zabbix/zabbix_server.conf
确认或修改以下参数:
| 参数 | 值 | 说明 |
|---|---|---|
| ListenPort | 10051 | 服务端监听端口 |
| DBHost | localhost | 数据库地址 |
| DBName | zabbix | 数据库名 |
| DBUser | zabbix | 数据库用户 |
| DBPassword | 123 | 数据库密码,需与授权一致 |
| DBSocket | /var/lib/mysql/mysql.sock | 需改为实际 socket 路径 |
| ListenIP | 0.0.0.0 | 监听地址 |
启动服务:
systemctl restart zabbix-server.service
systemctl status zabbix-server.service
systemctl enable zabbix-server.service
lsof -i:10051
注意:若不禁用 SELinux,zabbix-server 启动可能出现问题。
2.6 配置 HTTPD 子配置文件
vim /etc/httpd/conf.d/zabbix.conf
打开时区注释并修改为:
php_value date.timezone Asia/Shanghai
systemctl restart httpd.service
systemctl status httpd.service
systemctl enable httpd.service
2.7 Web 界面初始化
使用 Firefox 访问:
http://IP/zabbix
按向导完成安装:
- Welcome
- Check of pre-requisites
- Configure DB connection:数据库用户名填
zabbix,密码填123 - Zabbix server details:在 Name 选项填写 Zabbix 服务器的 IP 或主机名
- Pre-Installation summary
- Install
完成后登录:
- 用户名:
admin - 密码:
zabbix
三、基本配置示例
3.1 切换中文界面
右上角点击小人图标 → 语言选择「中文 zh-cn」→ 点击 Update。
3.2 使用 Agent 监控本机
在 Zabbix Server 上安装 Agent:
yum install zabbix-agent -y
编辑配置文件 /etc/zabbix/zabbix_agentd.conf,以下选项保持默认即可:
| 参数 | 默认值 | 说明 |
|---|---|---|
| Server | 127.0.0.1 | Zabbix 服务器 IP(被动监控) |
| ListenPort | 10050 | Agent 监听端口 |
被动是相对于客户端而言,即客户端被动接收服务器的监控请求。
systemctl restart zabbix-agent
systemctl status zabbix-agent
systemctl enable zabbix-agent
lsof -i:10050
在 Web 界面操作:配置 → 主机 → 默认可以看到名为「Zabbix server」的本机,状态为停用 → 点击启用。可用性中 ZBX 开始为灰色,等待几分钟变为绿色即正常。
3.3 图形中文乱码解决
Zabbix 基于 rrd-tool 开发,字体存在兼容性问题。解决方法是将图形字体替换为 ukai 字体。
wget 192.168.2.254/automation/zabbix/pack/ttf-arphic-ukai_0.2.20080216.1.orig.tar.gz
tar xf ttf-arphic-ukai_0.2.20080216.1.orig.tar.gz -C /usr/share/zabbix/fonts/
mv /usr/share/zabbix/fonts/ukai.ttc /usr/share/zabbix/fonts/ukai.ttf
编辑 /usr/share/zabbix/include/defines.inc.php 第 45 行:
define('ZBX_GRAPH_FONT_NAME','ukai');
无需重启服务,刷新 Web 界面即可。
3.4 监控远程 Linux 主机
zabbix server zabbix agent
192.168.224.10 192.168.224.11
第一大步:被监控端配置(192.168.224.11)
- 配置主机名。
- 关闭 iptables、SELinux。
- 时间同步。
- 配置 YUM 源(需要 Zabbix 官方源)。
- 安装 Agent:
yum install -y zabbix-agent
编辑 /etc/zabbix/zabbix_agentd.conf:
| 参数 | 值 | 说明 |
|---|---|---|
| Server | 192.168.224.10 | Zabbix 服务器 IP(被动监控) |
| ListenPort | 10050 | 被动监控端口 |
| Hostname | agent1.cluster.com | 被监控端主机名 |
systemctl restart zabbix-agent
systemctl status zabbix-agent
systemctl enable zabbix-agent
lsof -i:10050
第二大步:Web 界面添加主机
配置 → 主机 → 创建主机:
| 选项 | 填写内容 |
|---|---|
| 主机名称 | agent1.cluster.com |
| 可见的名称 | agent1 |
| 群组 | Linux servers(或自建群组) |
| IP 地址 | 192.168.224.11 |
点击「模板」→ 选择 → 勾选 Template OS Linux → 选择 → 添加 → 最后点击右下角添加。
完成后即可看到监控了两台机器。
四、核心概念
4.1 用户与群组
- 用户(user)
- 用户群组(group)
操作路径:管理 → 用户;管理 → 用户群组。
练习:添加一个用户群组 usergroup1,再添加用户「张三」,加入 usergroup1 组和 Zabbix administrators 组。
4.2 主机和主机组
- 主机(hosts):被监控的一台机器。
- 主机组(hostgroups):被监控的一组机器,便于分组区分。
操作路径:配置 → 主机群组;配置 → 主机。
练习:把 agent1 换到新组 hostgroup1,再删除 linux servers 组。
4.3 监控项与应用集
- 监控项(items):收集数据或监控的最小单位。
- 应用集(applications):多个监控项组成的组。
操作路径:配置 → 主机 → 监控项 → 右上角「创建监控项」。
例如创建监控项 system.swap.size[,free],之后可以在该主机的监控项列表中找到。
图形创建路径:配置 → 主机 → 图形 → 右上角「创建图形」,选择图形名称并添加已定义好的监控项。
自定义监控项示例
自定义监控 agent1(192.168.224.11)上的用户登录数(默认有键值 system.users.num,这里使用自定义键值)。
- 在 agent1 上多打开几个终端,执行:
who | wc -l
- 在 agent1 上定义用户参数,编辑
/etc/zabbix/zabbix_agentd.conf,添加:
UserParameter=loginusers,who | wc -l
loginusers 为自定义键值名称,后面的 who | wc -l 为要监控的命令。
systemctl restart zabbix-agent
- 在服务器端命令行测试:
yum install zabbix-get
zabbix_get -s 192.168.224.11 -k loginusers
能返回结果则测试 OK。
-
Web 界面创建监控项:配置 → 主机 → 监控项(选择 agent1)→ 创建监控项,键值填写
loginusers。 -
为该监控项创建图形:配置 → 主机 → 图形 → 创建图形 → 添加监控项 → 预览。
自定义监控项练习
监控系统所有进程数量:
UserParameter=totalprocs,ps -ef | awk 'NR>1 {print $0}' |wc -l
说明:
NR>1:行号大于一。awk 'NR>1 {print $0}':输出行号大于一的内容。
监控 MariaDB 当前登录用户数:
yum install mariadb\*
systemctl restart mariadb
systemctl enable mariadb
UserParameter=mariadb_loginusers,echo $[`mysqladmin -u root processlist |wc -l`-4]
mysqladmin -u root processlist用于列出当前登录 MySQL 的用户列表。
4.4 可视化图形(Visualisation)
图形和图形中定义(高、宽、坐标、X/Y 单位、颜色)的综合。前面已通过监控项创建过相关图形。
4.5 触发器(Trigger)
定义监控项到达临界值或满足某个条件时发生状态变化。
示例:对 agent1 的登录用户数创建触发器,大于 20 个登录用户就警告。
配置 → 主机 → 触发器(选择 agent1)→ 创建触发器 → 填写名称 → 在表达式右边点添加:
- 选择监控 agent1 登录用户数的监控项。
- 设置最新的 T 值 > N(N 设为 20)。
添加表达式后即可添加触发器。将 agent1 用户数调整到大于 20,在「监测中 → 触发器」中可查看到触发。
练习:
- 监控系统所有进程数量,大于 250 警告,大于 400 一般严重。
- 监控 MariaDB 登录用户数,大于 50 警告,大于 100 一般严重。
4.6 Web 监测
类似一个监控项,可以对 URL 页面进行监测。
示例:监测 agent1 的主页
- 配置 → 主机 → Web 监测(选择 agent1)→ 创建 Web 场景 → 填写名称并加入应用集。
- 点「步骤」,填写名称、URL(监控页面路径)、要求的状态码(如 200)。
- 添加后可看到该 Web 监测场景。
- 监测中 → Web 监测,会看到有问题(因为 agent1 未安装 httpd)。
- 在 agent1 上安装并启动 httpd,做好主页,再查看即监测 OK。
练习:为此 Web 监测配置触发器。提示:检测项 web.test.rspcode[web检测,portal page] 不为 200 即错误。
表达式:
{client1.example.com:web.test.rspcode[web检测,portal page].last()}<>200
4.7 事件(Events)
各种需要管理员知悉或处理的事情,包括触发器事件、discovery 事件、网络事件等。
4.8 自动发现(Discovery)与动作(Action)
示例:通过 discovery + action 发现 agent2 并添加监控模板。
zabbix server
192.168.224.10
agent1 agent2
192.168.224.11 192.168.224.12
agent2 准备工作
hostnamectl set-hostname --static agent2.cluster.com
vim /etc/hosts
添加:
192.168.224.12 agent2.cluster.com
关闭 iptables、SELinux,时间同步,配置 YUM 源。
yum install zabbix-agent -y
编辑 /etc/zabbix/zabbix_agentd.conf:
| 参数 | 值 |
|---|---|
| Server | 192.168.224.10 |
| ListenPort | 10050 |
| Hostname | agent2.cluster.com |
systemctl restart zabbix-agent
systemctl status zabbix-agent
systemctl enable zabbix-agent
lsof -i:10050
Server 端 Web 操作
- 配置 → 自动发现,修改默认的
Local network规则:- 修改试验网段(原文为 10.1.1.0/24,按实际环境填写)。
- 勾选「已启用」。
- 点更新。
- 监测中 → 自动发现,查找已发现的设备(大网段如 172.16.0.0/16 速度较慢,可设置延迟为 5 秒)。
- 配置 → 动作 → 右上角事件源选「自动发现」,修改默认的
Auto discovery. Linux servers动作中的 IP 网段。 - 过一段时间在配置 → 主机中查看,发现的主机会自动加入配置。
4.9 聚合检测(Aggregate Checks)
监控 agent1 和 agent2 两台服务器登录用户数之和。
- 两台都配置登录用户数监控项:
vim /etc/zabbix/zabbix_agentd.conf
UserParameter=loginusers,who | wc -l
systemctl restart zabbix-agent
-
在 Client2 上创建
loginusers监控项。 -
在 Web 界面:配置 → 主机 → client1 → 监控项 → 右上角「创建监控项」:
- 类型选择「Zabbix 整合」
- 键值填写:
grpsum["hostgroup1","loginusers",last]
确保机器都在组
hostgroup1中。
4.10 通知(Notification)
出现报警事件或触发器触发时进行通知。默认通知类型有:email、jabber、短信(sms)。其他方式如微信需要接口(如企业公众号),也可以定义 shell 脚本报警。
配置步骤:
- 管理 → 报警媒介类型 → Email,配置邮件参数。
- 将报警类型分配给用户 admin:管理 → 用户 → admin → 报警媒介 → 添加。
4.11 模板(Templates)
模板代表监控项、应用集、触发器、图形、自动发现规则、Web 监测等的组合。例如 Template App HTTPS Service,可直接应用到被监控主机。
操作路径:配置 → 模板。
4.12 批量更新、导入导出
- 批量更新:配置 → 主机 → 勾选要批量更新的主机 → 选择「批量更新」→ 执行更新。
- 导出:配置 → 主机(或模板)→ 勾选 → 选择「导出」,默认导出到浏览器所在机器的
/root/Downloads/。
练习:删除本机一个模板,从同桌的 Zabbix 服务器导出 XML 文件,拷贝后导入(注意修改 IP 等参数)。
五、通过代理实现分布式监控
适用于多机房场景:
机房一 机房二
zabbix 核心服务器
机房三 机房四
拓扑:
zabbix server ------ zabbix proxy ---- zabbix agent
192.168.224.10 192.168.224.12 192.168.224.11
5.1 准备工作
将原来的 agent2 模拟为 zabbix_proxy:
- 在 zabbix_server 的 Web 界面删除 agent2 的配置,并禁用先前的自动发现规则。
- 主机名改为
zabbix_proxy.com。 - 停止 zabbix-agent:
systemctl stop zabbix-agent
5.2 Proxy 端配置(192.168.224.12)
需要本地 YUM 源和 Zabbix 源:
yum install mariadb\* zabbix-proxy zabbix-proxy-mysql zabbix-agent -y
systemctl restart mariadb
systemctl enable mariadb
mysql
MariaDB [(none)]> create database zabbix_proxy default charset utf8;
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to 'zabbix'@'localhost' identified by '123';
MariaDB [(none)]> flush privileges;
zcat /usr/share/doc/zabbix-proxy-mysql-3.2.7/schema.sql.gz | mysql zabbix_proxy -u zabbix -p123
编辑 /etc/zabbix/zabbix_proxy.conf:
| 参数 | 值 | 说明 |
|---|---|---|
| ProxyMode | 0 | 0 为主动模式(proxy 主动发数据给 server) |
| Server | 192.168.224.10 | zabbix_server 的 IP |
| Hostname | zabbix_proxy.cluster.com | 必须与主机名及 Web 界面配置一致 |
| DBHost | localhost | 数据库地址 |
| DBName | zabbix_proxy | 数据库名 |
| DBUser | zabbix | 数据库用户 |
| DBPassword | 123 | 数据库密码 |
| ConfigFrequency | 60 | 主动模式下多久接收一次配置 |
| DataSenderFrequency | 5 | 主动模式下多久发送一次收集数据 |
编辑 /etc/zabbix/zabbix_agentd.conf:
| 参数 | 值 |
|---|---|
| SourceIP | 192.168.224.12 |
| Server | 192.168.224.12 |
| ServerActive | 192.168.224.12 |
| Hostname | zabbix_proxy.cluster.com |
systemctl restart zabbix-proxy
systemctl restart zabbix-agent
systemctl enable zabbix-agent
systemctl enable zabbix-proxy
5.3 Agent 端配置(192.168.224.11)
编辑 /etc/zabbix/zabbix_agentd.conf,把服务器 IP 改为 proxy 的 IP:
| 参数 | 值 |
|---|---|
| Server | 192.168.224.12 |
| ServerActive | 192.168.224.12 |
| Hostname | agent1.cluster.com |
systemctl restart zabbix-agent
5.4 Server 端 Web 配置
- 将代理机器加入监控主机:配置 → 主机 → 创建主机
- 主机名称:
zabbix_proxy.cluster.com - 群组:随意
- IP 地址:
192.168.224.12,端口10050
- 主机名称:
- 添加代理程序:管理 → agent 代理程序 → 创建代理
- agent 代理程序名称:
zabbix_proxy.cluster.com(与配置中主机名一致) - 系统代理程序模式:主动式
- agent 代理程序的主机:
agent1、zabbix_proxy.cluster.com
- agent 代理程序名称:
添加完成后,agent1 和 zabbix_proxy.cluster.com 自动被代理。
5.5 测试
在 agent1(192.168.224.11)上改变某个监控项(如登录用户数),在 zabbix_server(192.168.224.10)的图形界面能看到变化即说明 proxy 成功。
六、主动监控与被动监控
zabbix_server ------ zabbix_proxy ---- zabbix_agent1
6.1 Agent 被动模式
相对于 agent 被动,即 server 或 proxy 主动去找 agent 拿数据。
编辑 /etc/zabbix/zabbix_agentd.conf:
Server=192.168.224.12
IP 为 zabbix_proxy 的 IP(没有 proxy 则为 zabbix_server 的 IP)。监控项类型配置为「Zabbix 客户端」即被动模式。
6.2 Agent 主动模式
相对于 agent 主动,即 agent 主动把数据传给 server 或 proxy。
编辑 /etc/zabbix/zabbix_agentd.conf:
ServerActive=192.168.224.12
监控项类型配置为「Zabbix 客户端(主动式)」即主动模式。
6.3 Proxy 主动模式
zabbix_proxy 主动发数据给 zabbix_server,适用于被监控主机没有公网 IP、Zabbix Server 无法直接访问的情况,由被监控机器直接发送数据。
编辑 /etc/zabbix/zabbix_proxy.conf:
ProxyMode=0
6.4 Proxy 被动模式
zabbix_server 找 zabbix_proxy 收集数据。
编辑 /etc/zabbix/zabbix_proxy.conf:
ProxyMode=1
此处评论已关闭