Zabbix 能监视各种网络、系统参数,保证服务器系统的安全运行,同时提供了灵活的 API 接口,例如通知机制,可以让系统管理员及时通过或者当前的异常状态,支持 Agentd、SNMP、JMX 等多种监控方式。
同时,提供了一个 WEB 界面,可以作为分布式系统监控以及网络监控的企业级开源解决方案。
安装
安装详细可以参考 zabbix manual install,二进制代码库下载地址可以参考 zabbix download,也可以参考 zabbix repos 。
源码编译
$ ./configure --prefix=/usr/local/zabbix \
--enable-server --enable-agent \
--with-mysql --with-net-snmp --with-libcurl
服务端安装配置
这里同样以 MySQL 作为后端存储为例。
----- 1. 安装依赖包,只列举的部分
# yum install fping OpenIPMI-libs iksemel php-mysql httpd php
----- 2. 安装服务和前端,需要安装一堆的依赖
# rpm -ivh zabbix-server-mysql-3.0.5-1.el7.x86_64.rpm
# rpm -ivh zabbix-web-mysql-3.0.5-1.el7.noarch.rpm
----- 3. 配置MySQL数据库,并创建表
shell> mysql -uroot -p<root_password>
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'YOUR_PASSWORD';
mysql> quit;
shell> zcat /usr/share/doc/zabbix-server-mysql-3.0.*/create.sql.gz | mysql -uzabbix -p zabbix
----- 4. 服务端配置
# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=YOUR_PASSWORD
----- 5. 启动服务
# systemctl start zabbix-server
----- 6. 设置时区为某个地区
# vim /etc/php.ini
date.timezone = Asia/Shanghai
其中服务器使用 httpd,此时需要修改配置文件 /etc/httpd/conf.d/zabbix.conf
。
接着需要配置界面,完成后会保存在 /etc/zabbix/web/zabbix.conf.php
文件中,默认的登陆帐号可以使用 Admin/zabbix
。
客户端安装
这里同样以 RPM 包安装为例。
----- 1. 安装客户端
# rpm -ivh zabbix-agent-3.0.5-1.el7.x86_64.rpm
----- 2. 启动客户端
# systemctl start zabbix-agent
----- 3. 可以查看其启动日志内容
# less /var/log/zabbix/zabbix_agentd.log
----- 4. 修改配置文件
# vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1 被动服务IP,允许这个IP来我这里取数据
ServerActive=127.0.0.1 主动提交数据给这个IP
Hostname=10.120.185.240 需要保证和Zabbix Web中的配置保持相同
特性
监控项 Items
也就是添加一个主机监控项,Configration->Hosts->Items
,一般会从模板中继承一部分内容。
一般 item 通过 Key 定义,然后其中包括了具体的参数,通常是两个,例如 system.cpu.load[percpu,avg1]
;在 agent 端包括了很多常用的 key,可以参考 Zabbix agent。
对于自定义的 key 需要在客户端的配置文件 zabbix_agentd.conf
中启用 UnsafeUserParameters=1
参数,然后在配置文件的最下面来定义 key,如:
UnsafeUserParameters=1 # 并去掉前面的注释符
UserParameter=foo.bar[*], /usr/local/script/monitor.sh $1 $2
其中,foo.bar[*]
定义了 key ,而后面对应了监控程序的绝对路径,通常使用的是通用脚本,然后根据具体的参数决定输出内容,通常参数顺序为 $1~$9
。
触发器 Triggers
一般用于告警,当 Items 监控项采集值满足 triggers 指定的触发条件时,就会产生 actions 。
同样在 Configuration->Hosts->Triggers
中进行配置,在修改时有几条规则:1) template 中的触发值不能单独修改,必须在 template 中修改;2) 可以复制一个同样 trigger 再修改,再禁用模板中的 trigger;3) 也可以通过右上角的 Create trigger 创建一个。
关于 Trigger 的表达式语法信息可以查看 Zabbix Trigger Expression 。
常见示例:
---- 主机宕机检测,持续3min没有ping数据时报警
{test-01:agent.ping.nodata(3m)}=1
---- 连续3分钟的平均值大于80%,或者用max表示一直大于80%
{test-01:system.cpu.util[,idle].avg(3m)}<20
宏定义 Macro
包括了系统内置的宏,一般格式为 {MACRO}
,可以通过类似 {HOST.NAME}
的方式进行引用,例如告警中,详细可以参考 Macros supported by location 。
自定义宏通过 {$MACRO}
类似方式表示,也就是需要加 $
才能引用;注意 在调用和定义时都需要加 $
,而且 zabbix 还支持在全局、模板或主机级别使用用户自定义宏。
解析时的顺序,首先解析主机,然后按照模板 ID 的顺序依次解析宏定义,最后会解析全局的配置,如果仍然无法找到,那么就不会解析。
常见的使用场景有:
item key
参数,如item.key[server_{HOST.HOST}_local]
。trigger
表达式中。Low-Level-Discovery
中。
另外,需要注意的是,宏的名称只能使用 A-Z, 0-9, _, .
,可以通过如下方式配置。
全局宏定义:
Administrator-->General-->Macros(右上角选择框) 保存在globalmacro表中
主机/模板宏定义,两者基本类似:
Configuration-->[Hosts|Templates]-->Macros 保存在hosts以及hostmacro表中
图表展示 Graphs/Screens
Graphs 可用于将多个监控项展示在同一个图表中,然后一个 Screens 中可以用来展示多个 Graphs 。
自动发现
随着被监控的主机不断增加,如果纯手工配置,那么工作量将会非常大,这时就可以使用 Discovery rules
来配置。通过该模块,可以实现自动发现主机、自动将主机添加到主机组、自动加载模板、自动创建监控项、自动创建图像。