Zabbix 监控系统

2017-09-10 linux monitor

Zabbix 能监视各种网络、系统参数,保证服务器系统的安全运行,同时提供了灵活的 API 接口,例如通知机制,可以让系统管理员及时通过或者当前的异常状态,支持 Agentd、SNMP、JMX 等多种监控方式。

同时,提供了一个 WEB 界面,可以作为分布式系统监控以及网络监控的企业级开源解决方案。

zabbix logo

安装

安装详细可以参考 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 的顺序依次解析宏定义,最后会解析全局的配置,如果仍然无法找到,那么就不会解析。

常见的使用场景有:

  1. item key 参数,如 item.key[server_{HOST.HOST}_local]
  2. trigger 表达式中。
  3. Low-Level-Discovery 中。

另外,需要注意的是,宏的名称只能使用 A-Z, 0-9, _, .,可以通过如下方式配置。

全局宏定义:
    Administrator-->General-->Macros(右上角选择框) 保存在globalmacro表中
主机/模板宏定义,两者基本类似:
    Configuration-->[Hosts|Templates]-->Macros 保存在hosts以及hostmacro表中

图表展示 Graphs/Screens

Graphs 可用于将多个监控项展示在同一个图表中,然后一个 Screens 中可以用来展示多个 Graphs 。

自动发现

随着被监控的主机不断增加,如果纯手工配置,那么工作量将会非常大,这时就可以使用 Discovery rules 来配置。通过该模块,可以实现自动发现主机、自动将主机添加到主机组、自动加载模板、自动创建监控项、自动创建图像。