Zabbix

Zabbix

zabbix是一种开源监控软件,能实现各种强大监控功能(数据采集,展示,报警)等功能。

监控的过程

数据采集—>数据存储—>数据显示

时间序列数据(趋式,陡式),采集点连成线会生成数据趋式图

报警:采集到的数据超出阈值(如系统应用指标,文件变化,应用状态)

Zabbix监控实现

zabbix可使用Zabbix-Agent,ICMP,SNMP,HTTP,JMX,IPMI来监控客户端

IPMI(interlligent platform management interface)智慧平台管理接口,原本是一种inter架构企业系统的周边设备采用的一种工业标准

IPMI也是一个开放免费标准,使用者无需支付额外费用就可以使用

通常一些服务器如DELL,IBM支持这种接口

Zabbix可监控对象

设备/软件:

设备:服务器,路由交换设备,IO设备

网络设备:snmp,ssh,ipmi

软件:操作系统,网络,应用

支持操作系统有:linux,windows,freebsd,aix,solaris,hp-unix

偶发现故障:

主机down机,服务不可用,主机不可达

严重事件:

数据节点宕机,磁盘满等

主机性能指标:

趋势数据(时间序列):

SNMP协议
架构:

C/S架构:被监控端(Agent),监控端(NMS),

udp协议:Agent:161端口,NMS:162端口

工作模式:

NMS向Agent采集数据

Agent向NMS报告数据

NMS请求Agent修改配置

组件:

MIB(管理信息库)management information base

OID(object id)

SMI(MIB表示符)

NMP协议

SNMP说明

​ NMS可发起对Agent操作有:GET,GETNEXT,SET,TRAP

​ SNMP中的MIB定义被管理对象的一系列信息,每个Agent都有本地MIB库

​ Agent操作:Response

​ SNMP仅仅实现数据采集功能

SNMP协议版本

snmp版本有v1,v2,v3

V1:无验证

V2C:社区,NMS->Agent 双方共享一个秘钥,认证过程明文

V3:实现认证加密和解密功能,但是用的少

Linux实现snmp是net-snmp程序包

Windows实现snmp是在控制面板中找到程序SNMP

开源监控工具对比
Cacti

php实现利用SNMP收集数据即使绘图展示,报警功能不够理想

cacti仅关注数据收集,数据展示,但是对报警功能较弱

cacti利用RRD库(round robin database)环状数据库,只能保存固定时长

Nagios

仅关注是否超出阈值,监控功能强大(短信,网关等),可以报警升级,也可以维护时间暂停报警,定义各组件依赖关系,不适合大规模监控

nagios只是关注超出阈值状态转换,完成报警

如果需要增加图标显示需要安装pnp4nagios插件,如果需要存数据库需要NDOUtils,如果需要分布式需要NSCA

icinga是Nagios变种

Zabbix

能够实现各种强大监控功能(数据采集,展示,报警等)

支持MySQL,PgSQL,Oracle,DB2,SQLite

其他监控软件

OpenNMS

ZenOS

GangLia 强大的集合绘图,将多个主机组成一个趋势图

Open-Falcon 小米开源监控系统

Zabbix监控功能

zabbix agent,snmp,ping,ssh,ipmi,web监控,数据库监控,内部监控,内部支持复杂计算,自定义命令监控

zabbix agent,snmp,ipmi可以监控CPU、内存、网络、磁盘、服务、日志、文件监控

web监控可以监控到 响应时间、下载速度、响应代码、获取特定要求内容、支持http/https

报警方式:email、sms、jabber、chat message、自定义命令

Zabbix组件

zabbix-server:(C)

zabbix-agent:(C)

zabbix-web:GUI接口设定展示zabbix(php)

zabbix-proxy:分布式监控环境中专用组件(大规模才能用到)

Zabbix安装

配置需求
版本 平台 cpu/内存 数据库 监控主机
Small ubuntu linux PII 350MHz 256M SQLite 20
Medium ubuntu linux64 bit AMD Athlon 3200+ 2G MySQL InnoDB 500
Large ubuntu linux64 bit Inter Dual Core6400 4G RAID10 MySQL InnoDB or PostgreSQL >1000
Very large RedHat Enterprise Inter Xeon 2*CPU 8G Fatst RAID10 MySQL or PostgreSQL >10000
zabbix数据

配置数据:很小

历史数据:50bytes/1m

历史趋势数据:128bytes/1m

事件数据:130bytes/1m

通常五分钟采集一次,一个监控项目就是320bytes,一小时3.8KB,一年就是34M,一台机器34M

zabbix数据计算公式

假设,如果一个主机60个监控项,1k个主机就是6万个监控项目。zabbix database需要用到的空间,60000/60 = 1000条,默认90天,趋势图默认一年

历史数据

历史数据 = 天数 x 每秒处理数据量 x 24 x 3600 x 50Bytes

每个历史数据50bytes

90x1000x24x3600x50 三个月产生360G数据

趋势数据

趋势数据 = 天数 x 监控项数 x 24 x 128bytes

每个趋势数据大概128bytes,按小时保存,假设保存一年

365x6000x24x128 一年大概62G数据

事件数据

事件数据 = 天数 x 86400 X 130bytes

每个事件数据大概130bytes,假设保存一年

365 x 86400 x 130bytes 一年大约3G数据

每分钟取一次数据,每秒请求数据大概千次,数据库写压力巨大(建议,监控5分钟取一次)

Zabbix安装
yum安装
1
2
3
4
#需要实现安装mysql or PostreSQL
yum install mysql-server
rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-release-3.2-1.el6.noarch.rpm
yum install zabbix-agent zabbix-get zabbix-java-gateway zabbix-proxy-mysql zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql
源码安装

下载zabbix源码包

1
2
3
#需事先安装好LAMP平台,编译zabbix同时安装server和agent,并支持将数据放入mysql数据库中
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-ssh2
make && make install

安装Server端,

1
./configure --enable-server --with-mysql --with-net-snmp --with-libcurl

安装Agent端

1
./configure --enable-agent --with-ssh2

导入数据库

1
2
3
4
5
6
7
#导入数据库顺序(schema.sql,images.sql,data.sql)
CREATE DATABASE zabbix CHARACTER SET UTF8;
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbixpass'
USE zabbix;
source schema.sql
source images.sql
source data.sql
Zabbix配置文件
Zabbix-Server端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#/etc/zabbix/zabbix_server.conf
LogFile=/tmp/zabbix_server.log #日志文件
LogFileSize=0 #不做日志滚动
DBHost=127.0.0.1
DBName=zabbix
DBUser=zabbix
DBPassword=zabbixpass
DBPort=3306
StartPollers=5 #启动poller进程多少个,各agent拉取对应指标
StartIPMIPollers=0 #启动多少ipmi的poller进程,默认空闲
StartPollersUnreachable=1 #不可达的poller
StartTrappers=5 #如果经常拉取对zabbix性能又影响,agent可以自动发送数据到server端,这个Trapper就是捕获该数据
StartPingers=1 #icmp探测主机是否在线
StartDiscoverers=1 #启动多个自动发现进程(消耗带宽)
StartHTTPPoller=1 #启动web的拉取数据进程
StartTimers=1 #启动计时器
JavaGateway=127.0.0.1 #启动java网关连接jmx
JavaGatewayPort=10052 #使用10052端口
StartJavaPollers=5 #启动多少java的poller进程
StartVMwareCollectors=0 #监控vm的虚拟主机
VMwareFrequency=60 #监控vm的频率
AlertScriptsPath=/usr/local/zabbix/alertscripts #脚本报警路径
ExternalScripts=/usr/local/zabbix/externalscripts #外部脚本路径
FpingLocation=/usr/sbin/fping #fping程序路径需要事先安装,fping(并行ping)
Zabbix-Agent端
1
2
3
4
5
6
#/etc/zabbix/zabbix_agent.conf
Server=192.168.1.2 #服务端ip可用逗号分隔
ListenPort=10050
ListenIP=192.168.1.100
ServerActive=192.168.1.2 #自动推送数据到监控端(默认是被动监控)
Hostname=node1 #主机名,唯一
Zabbix Server Process
1
2
3
4
5
6
7
8
9
10
11
12
watchdog
howsekeeper
alerter
proller (拉取)
httppoller (web拉取)
discoverer (自动发现)
pinger (探测主机)
nodewatcher (监控各节点)
timer (计时器)
escalator (报警升级)
db_config_syncer(数据库配置同步)
db_data_syncer (数据库数据同步)

Zabbix配置详解

Zabbix术语
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
主机(host)                要监控的网络设备,由ip或dns名称指定 

主机组(host group) 主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相链接,主机组通常在给用户和用户组指派监控权限时候使用

监控项(item) 一个特定监控指标的相关数据,这些数据来自于被监控对象,对于item是zabbix进行数据收集的核心,没有item将没有数据;相对某监控对象来说,每个item都是由"key"标识

触发器(trigger) 一个表达式,用于评估某监控对像的特定item内所接受到的数据是否在合理范围内,即阈值;接受到数据量大于阈值时,触发器状态将从"ok"转变成"problem",当数据量再次回归到合理范围内从"problem"转成"ok".

事件(even) 即发生的一个值得关注的事情,例如触发器的状态转变,新的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接口
Item 监控项

一个特定监控指标的相关数据,这些数据来自于被监控对象,对于item是zabbix进行数据收集的核心,没有item将没有数据;相对某监控对象来说,每个item都是由”key”标识

监控项

是zabbix服务器用于监控一个特定对象上的一个特定指标,并负载针对其收集相关监控数据

如CPU每分钟平均负载可以是一个item,每五分钟平均负载是一个item

在比如特定网口接受报文速率也是一个item

每一个item都拥有相应的的类型”type”

例如”zabbix_agent”,“snmp”,“external check”,“IPMI Agent”,“SSH Agent”,“JMX Agent”

Zabbix服务器会自动使用相应类型的协议或机制同时被监控端通讯

监控项Key

zabbix服务器在与被监控端通讯时就使用相应的协议或机制去询问被监控端这个key值,被监控端则调用与此key对应的监控脚本获取数据并返回给服务端

key的命名只能使用”0-9a-zA-Z_-.”等字符,且可以接受参数,其命令习惯如system.cpu.load[<cpi>,<mode>],其中括号中的内容为参数,且分别可按次序使用$1,$2,进行引用,此实例中仅有两个参数

若要使用不定数目的参数,则使用”*”表示

zabbix有需要预先定义的key,获取详细地址

https://www.zabbix.com/documentation/2.0/manual/items/itemtypes/zabbx_agent

对于每一个Item,zabbix服务器还定义了这么存储这个item数据以及数据采集频率及历史数据的保存时长等,

多个item还可归类为一个由”Application”定义逻辑组

数据库查看zabbix自定义的Key
1
2
USE zabbix;
SELECT keys_ FROM items;
如何获取Key
1
$ZABBIX/bin/zabbix_get -s IP -p PORT -k "system.uname"
创建Item过程
1
configuration- - > hosts - - >(选择对应主机的items) - - >create item
Item多类型

zabbix-agent:工作模式passive,active

网卡流量相关:

net.if.in[if,<mode>] 进入

net.if.out[if,<mode>] 流出

net.if.total[if,<mode>] 总流量

if:接口 如eth0

mode: bytes,packets,erros,dropped

实例:create items

key:net.if.in[eth0,bytes] 监控eth0网卡

store value:delta(speed per second),计算上一次和这一次

端口相关

net.tcp.listen[port] #监听的端口,布尔值float

net.tcp.port[<ip>,port]

net.tcp.service[service,<ip>,<port>]

net.upd.listen[port]

进程相关

kernel.maxfiles 最大文件数

kernel.maxproc 最大进程数

cpu相关

system.cpu.intr 中断次数

system.cpu.load[<cpu>,<mode>]负载

system.cpu.num[<type>] CPU颗数

system.cpu.switches CPU上下文切换次数

system.cpu.util[<cpu>,<type>,<mode>] CPU利用率

磁盘io或文件系统相关

vfs.dev.read[<device>,<type>,<mode>] 磁盘读

vfs.dev.write[<device>,<type>,<mode>] 磁盘写

vfs.fs.inode[fs,<mode>] 磁盘inode值

用户可定义item:

关键:选取一个唯一的key

命令:收集数据的命令或脚本

Trigger 触发器

监控项 仅负责收集收据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,该工作就是触发器来定义用于为监控项所收集的数据定义阈值,每一个触发器仅能关联至一个监控项,但可以为一个监控项同时使用多个触发器(一个trigger只能属于一个item,但一个item可以有多个trigger)

事实上为一个监控项定义多个具有不同阈值的触发器可以实现不同级别的报警功能

一个触发器由一个表达式构成,它定义了监控项所采取的数据的一个阈值

一旦某次采集的数据超出了此触发器定义的阈值,触发器状态会转换成”problem”;而采取的数据再次回归至合理规范内时,其状态将重新返回到”ok”

触发器表达式高度灵活,可以创建出非常复杂的测试条件

触发器格式
1
2
3
4
5
6
7
8
9
10
11
12
{<server>:<key>.<function>(<parameter>)}<operator><constant> 
server #主机名称
key #主机上关系的相应监控项的key
function #评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采集的数据,当前时间以及其他因素进行
#目前触发器所支持的函数avg,count,change,date,dayofweek,delta(增量),diff,iregexp,last,max,min,nodata,now,sum等
operator #表达式所支持的运算符及其功能如下表示
#/ * - + < > # = & |
例子:
{www.zhuxyid.com:system.cpu.load[all,avg1].last(0)}>3
#表示主机www.zhuxyid.com上所有cpu过去1分钟内的平均负载的最后一次取值大于3时,将触发状态变换
#对last函数来说,last(0)相当于last(#1)
{www.zhuxyid.com:system.cpu.load[all,avg1].last(0)} or {www.zhuxyid.com:system.cpu.load[all,avg5].last)(0)} or....
触发器依赖关系

在一个网络中,主机的可用性之间可能存在依赖关系

例如当某网关主机不可达时,其背后的所有主机都将无法正常访问

如果所有主机都配置触发器并设定了相关的通知功能,相关人员将会接受到许多告警信息,这既不利于快速定位,也会浪费资源

正确定义的触发器依赖关系可以避免类似情况发生,他将使用通知机制仅发送最根本的问题相关告警

目前zabbix不能直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义

触发器等级
SEVERITY DEFINITION COLOUR
Not Classified 未知级别 Grey
Infromation 一般信息 Light Green
Warning 警告信息 Yellow
Average 一般故障 Orange
Hight 高级别故障 Red
Disaster 致命故障 Bright Red
触发器状态

zabbix server每次接受到items的新数据时,对items当前采样值进行判断,即与trigger表达式进行比较

OK

PROPLEM

触发器创建过程

Configuration - - > Host - - > Triggers - - > Create trigger

Trigger名称使用宏

​ (HOST.HOST),{HOST.NAME},{HOST.IP},{HOST.CONN},{HOST.DNS}

触发条件一般为事件:

Trigger events: ok—>proplem

Discovery event: zabbix的network discovery工作时发现主机

Auto registration event:主动模式的agent注册时发生的时间

Internal event:item变成不在被支持,或者trigger变成未知状态

Operations的功能:

动作:

send message: 发送通知手段如下

​ EMAIL,SMS,Jabber,Scripts,EZ texting

Remote command:远程命令

配置send message

定义media

定义用户

配置要发送消息;action就已经定义好

配置Remote Command

前提:执行命令需要agent开启执行远程命令zabbix_agent.conf

EnableRemoteCommands=1 是否开启远程执行命令

LogRemoteCommands=1 是否将命令记录到日志中

给zabbix定义sudo规则/etc/sudoers

zabbix ALL=(ALL) ALL

特别注意:Remote Command不支持active模式的agent ,不支持代理模式 ,命令长度不得超过255个字符 ,远程命令可以使用宏定义 ,zabbix server仅执行命令,不关心命令是否执行成功

注意:

如果用到以其他用户身份执行命令的话,那么命令本身要以sudo方式运行

sudo /etc/rc.d/init.d/httpd restart

注释agent上的sudoers文件,需要注释(sudo模式下需要一个真实的tty)

Default requiretty

报警升级可以使用setp定义几次处理可以邮件升级。

Template 模板

用于快速定义被监控主机的预设定条目集合,通常包含item,trigger,graph,screen,application以及low-level discovery rule(自动发现);模板可以直接链接到单个主机

模板是一系列配置的集合,它可以方便地快速部署在某监控对象上,并支持重复应用,此配置可通过”链接”方式应用于指定的主机

items trggers graphs applications screens(since zabbix 2.0) low-level discovery rules(since zabbix 2.0)

将模板应用至某主机上时,其定义的所有条目都会自动添加

模板的另一个好处在于,必要时,修改了模板,应用的主机都会相应作出修改

创建模板

configuration –> templates

在模板上按需添加item,trigger,screen,graph,application以及发现规则

模板可以嵌套

macros 宏

宏是一种抽象(abstraction),它根据一系列预定义的规则替换一定文本模式,而解释器或者编译器在遇到宏时会自动进行这一模式的替换类似,zabbix基于宏保存预设文本模式,并且调用时将其替换为其中文本.

zabbix有许多内置宏

如{HOST.NAME} {HOST.IP} {TRIGGER.DESCRIPTION} {TRIGGER.NAME} {TRIGGER.EVENTS.ACK}等 ,详细信息参考文档

https://www.zabbix.com/documentation/3.0/manual/appendix/macros

为了更强的灵活性,zabbix还支持在全局,模板或者主机级别使用用户自定义宏(user macro)

用户自定义宏使用”${MACRO}”这种特殊的语法格式

宏可以应用在Item keys和descriptions,trigger名称和表达式,主机接口ip/dns以端口,discovery机制的snmp协议的相关信息中等

宏名称只能使用大写字母、数字、下划线

参考https://www.zabbix.com/documentation/3.0/manual/appendix/macros/supported_by_location

宏替换次序

首先是主机级别的宏

其次是当前主机上的上一级模板中(直接连接至主机的模板)的宏,多个一级模板按其ID号排序

再接着就是二级模板中的宏,而后以此类推

最后检查的是全局宏

zabbix如果无法查找某主机定义的宏,则不会对其进行替换操作,要使用用户自定义宏,有一下两种途径

全局宏:”administratorion” –> general —> macros macro:{$NGINX_PORT} value:80

主机或模板级别的宏:编辑相应主机或模板的属性即可,(只针对当前主机.主机级别最高)

总结:

宏分为两类:

内建:{MACRO_NAME}

自建:${MACRO_NAME}

三个级别使用:

global全局

template模板

host主机

优先级:host —> template—>global

在某级别找到后直接使用不会往后查找

Web Scennario web场景

用于检测web站定可用性一个或多个http请求

zabbix还可对web站点可用性的可用性检测

创建web监控需要先定义一个web方案(scenarios)

web方案包含一个或多个http请求或”步骤)step” ,步骤(step)的执行过程按照预先定义的顺序进行执行

通过web监控可实现获取如下信息

整个web方案中所有的步骤平均下载速度

失败的步骤号

失败的报错信息

在web方案的具体步骤中,可按需进行如下信息

该步骤的下载速度

回应时间

回应状态吗

zabbix可以检测获取到html页面中是否包含预设的字符串,可以实现登陆和页面点击

创建web方案

创建web方案前提需要创建一个使用的应用(application)

可以在”hosts”或者”templates”上创建应用

如果在”templates”上创建应用,则需要将此”templates”连接至要监控其web的主机上方能使此”application”

步骤:

configuration–>web(zabbix2.4)

configuration–>templates(host)–>web(zabbix3.0)

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
scenario 
name:zhuxyid.com
new application:zhuxyid.com
update interval:30s
agent:chrome3.8(windows)
其他默认

step
name:zhuxyid.index
url:http://www.zhuxyid.com
follow redirects:enable
timeout:10
required status codes:200
monitoring-->web-->zhuxyid.com即可出图
Zabbix自动发现

zabbix提供网络发现(network discovery),低级发现(low level discovery)

Network Discovery网络发现

HTTP,ICMP,LDAP,SSH,TCP,SNMP,Telnet,Zabbix_agent 扫描指定网络内的主机

一旦主机被发现,如果对其进行操作,由action来决定

LLD:low level discovery 低级发现

自动添加或者移除主机,链接至模板或删除链接,添加监控项,将主机添加至分组,定义触发器

执行远程脚本

Network Discovery

网络发现是zabbix最具特色功能,他能够根据用户实现定义的规则自动添加监控的主机或服务

发现中的事件有如下两种:

服务:service discovered,service lost,service up,service down

主机:host discovered,host lost,host up,host down

zabbix的网络发现功能可基于如下信息进行

1
2
3
4
IP rang
ftp,ssh,web,pop3,imap,tcp,etc
zabbix agent
snmp agent

网络发现通常包含:discovery和action

discovery中的事件:

service up service down

host up host down

service discovery service lost

host discovery host lost

action中网络发现中事件可以触发action,从而自动执行指定的操作

sending notifications

adding/remove hosts

enabling/disabling host

adding hosts to a group

remove hosts from a group

linking hosts to/unlinking from a template

executing remote scripts

这些事件的配置还可以基于设备类型,ip,状态、上线/离线等进行配置

接口添加

网络发现中添加主机时会自动创建interface

the service detected,如果基于snmp检测成功,会创建snmp接口

如果某服务同时响应给了agent和snmp则两种接口都会创建

如果同一种机制(如agent)返回非唯一数据,则第一个接口被识别为默认,其他的为额外接口

即便是某主机开始时只有agent接口,后来通过snmp发现他,同样会添加额外snmp接口

不同主机如果返回了相同数据,则第一个主机将被添加,余下的主机会被当作第一个主机额外的接口

Auto Registation

自动注册配置 需要修改agnet配置

1
2
3
4
5
6
7
8
> ListenIP=192.168.0.100        #192.168.0.100是agent的地址,最好指定本地地址不要使用0.0.0.0
> ListenPort=10050
> Server=192.168.0.1
> ServerActive=192.168.0.1 #192.168.0.1是zabbixserver的ip,重要
> Hostname=iis
> HostMetadata=ariis #用于唯一标识主机,只能用于自动注册,最多255个字符
> #HostMetadateItem= #也可以使用item获取数据,通常使用systen.uname 发给服务端自动注册
>

配置自动注册

configuration—>actions–>Event source(Auto registration)–>create action

action:

name: auto_reg

new condition: host metadata like ariis #主机元数据

operations:

default subject 自动注册

default Message 主机名称{HOST.HOST} 主机地址:{HOST.IP} 主机端口:{HOST.PORT}

Operations: send message to user: 邮件通知用户

add to host groups 添加主机组

links to templates 连接模板

支持使用agent(active)类型的item key:

Low Level Discovery

LLD低级发现特定变量名称:区别不同主机应用使用items值不一样(如eth0跟em0)

1
2
3
4
> IFNAME
> #FSNAME #大多数针对网络接口,文件系统
> #自定义脚本实现相应功能
>

添加针对对应变量的items:

返回值是json格式,方便数据交换

查看zabbix agent内置的keys

1
2
3
> USE zabbix
> select key_ from items where key_ LIKE '%discovery%';
>

配置过程

configuration—>templates(host)—>discovery rules—>create discovery rule

1
2
3
4
5
discovery rule
name:if lld
type:zabbix agent
key:net.if.discovery
update interval: 30s

filters

1
2
Type of calculation 
Filters A {#IFNAME} matches em-xxx

item

1
key:net.if.in[#IFNAME,bytes]
Zabbix报警

定义发送机制(这里官方提示需要用tls/ssl认证发送,可以使用脚本发送邮件)

邮件方式:

administration—>media types

name:zabbix_mail

type:email

SMTP server:exmail.com.cn

SMTP helo:exmail.com.cn

SMTP email:zabbix@exmail.com.cn

enable:enable

脚本方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#tail -n10 /etc/mail.rc 
set from=zabbix@zhuxyid.com
set smtp=smtp.exmail.qq.com
set smtp-auth-user=admin@zhuxyid.com
set smtp-auth-password=12345
set smtp-auth=login

#vi /etc/zabbix/etc/zabbix_server.conf
AlertScriptsPath=/etc/zabbix/scripts

#more /etc/zabbix/scripts/sendmail.sh
#!/bin/bash
BODY=/var/zabbix/mailtmp
echo "$3" > $BODY
dos2unix $BODY #需要事先安装dos2unix转移,不然邮件会是附件形式
/bin/mail -s "$2" $1 < $BODY
创建用户以及发送报警级别邮件

administration—>users—>users–>create user

user

alias:SA_OPS

Name:zhuxy

last name:zhuxuyue

groups:zabbix administrators

password:

….

media

type:zabbix_mail

send to:admin@exmail.com.cn

when active:1-7,00:00-24:00 7*24

use if severity: 定义报警级别(什么级别发给什么用户)

status:enabled

定义发送内容

configuration –> actions–>create action

Action

Name:cpu problems

defalt subject: {TRIGGER.STATUS}:{TRIGGER.NAME} #标题:trigger状态和trigger名称

default message: #正文

recovery message: #如果状态从proplem转换成ok发送信息

enable:enable

conditions 发送条件

type of calculation:[and|or|custom expression] 类型条件,如果下列conditions都满足就发送邮件(and),满足其中一个就发邮件(or),可以自定义表达式

conditions:

A Maintenace status not in maintenance 维护状态不在维护中,如果状态在维护中应该不能发报警

B Trigger value = PROBLEM

C Trigger = node1:cpu too many interrupta

operations

default operation setp duration 300 #每次报警时长(默认1小时),最小60s

action operations

operation details: setp from 1

​ to 2 #从第一步到第二步就是10分钟(1步5分钟)

setp duration 0

operation type send message|remote command #如果10分钟后要么发送报警,要么执行远程命令

send to user groups #发个组

send to user #发给用户

send only to :email #仅通过email发送信息(可以使用all就是所有报警机制都发送),如果问题严重建议使用短信,电话,微信发送信息

default message #默认信息

conditions: #条件

action:

触发条件一般为时间:

trigger events: ok –> proplem

discovery event:zabbix的network discovery工作时发现主机

autho registration event:主动模式的agent注册时产生的时间

internal events:items变成不在被支持,或者trigger变成未知状态

用户参数

zabbix 内置了许多item keys:

user parameters实现自定义item key,实现特有数据指标监控

syntax语法:

UserParameter=<key>,<command>

UserParameter=key[*].command

需要重启agent才可以生效

实例:

1
UserParameter=Nginx.active[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'

实例:比如监控agent端的内存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#zabbix-agent端
#vi $zabbix_home/conf/zabbix_agentd.conf
include=/usr/local/zabbix_agents/conf/zabbix_agentd/userparameter_mem.conf

#more $zabbix_home/conf/zabbix_agentd/os_linux.conf
UserParameter=os.memory.used,free -m|awk '/^Mem/{print $3}'
UserParameter=os.memory.total,free -m|awk '/^Mem/{print $2}'
UserParameter=os.memory.free,free -m|awk '/^Mem/{print $4}'

#service zabbix-agent restart

#zabbix-server端
zabbix_get -s 'ip' -k "os.memory.free"
#看是否能获取数据

创建监控项目:
host --->items--->creat items
name:内存使用情况
key:os.memory.used #调用agent的key就是刚才定义好的
use custom multiplier:1024000 #之前以及转换成mb,如果直接在units填写mb,超出1G就会出现1kmb,所有不设置units,让计算的值乘以1024000,这里free -m显示多大默认是以b为单位

Zabbix分布式监控

分布式监控概述

proxy and node

Zabbix三种架构

server-agent

server-node-agent

server-proxy-agent

Zabbix分布式监控概述

zabbix能高效的监控分布式it架构

在大型环境中zabbix提供两种解决方案

使用代理(proxy)

使用节点(node)

Proxy or Node

代理(proxy)用于本区域数据收集,并将数据发送给server

节点(node)提供完整的zabbix server用于建立分布式监控中的层级

Proxy Node
Lightweight轻量级 YES NO
GUI图形接口 NO YES
Works idependently独立工作 YES YES
EASY maintenance 易维护 YES NO
Automatic DB create 数据库自动创建 YES NO
Local Administration 本地管理 NO YES
Ready for embedded hardware 嵌入式监控 YES NO
One way tcp connections 单向TCP连接 YES YES
Centralised configuration 集中配置 YES NO
Generates notifications 生成通知 NO YES

Proxy:高性能,可以独立工作,易于维护,支持自动创建数据库,支持嵌入式监控,只支持一路TCP连接,支持集中配置。

不支持GUI接口,不支持本地管理,不支持通知

Server-Node-Client:特性

解决host过多时单台server面临性能瓶颈问题

使用多个instance

每个instance是独立的一套zabbix,有database和frontend(optional)

支持热插拔,Node和Server的连接可以随时断开,不影响node正常运行

node定时给server发送configuration,history,event

server定时给node发送configuration

所有配置变更只能node节点操作,不能在server操作 (http://www.zabbix.com/forum/showthread.php?t=20863)

支持树状结构,Node可以是个server

Server-Proxy-Client工作特性

proxy不会向server同步configuration,只接受

proxy的数据库定时回将数据传送给server,proxy本地数据库只保存最近有没有发送的数据

Proxy 对比 Node

Node本身是一台server,有完整的Web页面,完整的数据库,他将数据源源不断的传送给Master

proxy只有一个proxy的daemon进程,proxy也有自己的数据库,但他的数据库智慧保存一定时间的数据,他与master通信是将一批信息打包后发送给master,master将这些数据merge入master数据库

master-proxy相比master-node优点有如下几点:

proxy压力小,数据库只存一定时间数据

master压力变小,数据不是源源不断获取,减小io压力

架构清晰,便于维护

Zabbix-proxy安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#需要安装mysql
#yum install zabbix-proxy zabbix-proxy-mysql
mysql> create database zabbix-proxy character set utf8;
mysql> grant all on zabbix_proxy.* to zabbix@'%' identified by 'admin123'
mysql> flush privileges;
mysql> use zabbix-proxy;
mysql> source schema.sql; 只需要导入一个库就可以

#vi /etc/zabbix-proxy/etc/zabbix_proxy.conf
Server=ZABBIX-SERVER-IP
Hostname=Zabbix-Proxy-NJYFXJ
HostnameItem=system.host #如果没有定义hostname,就定义item
DBHOST=localhost
DBName=zabbix-proxy
DBUser=zabbix
DBPassword=admin123
HeartbeatFrequency=60 #默认60s探测一次可用状态
ConfigFrequency=3600 #每隔1小时到服务端拉取数据
DataSenderFrequency=1 #每隔1s将数据发送给服务端

#server zabbix-proxy start

#netstat -anptl | grep 10050
Server端配置Proxy

administration–>proxies

proxy name:Zabbix-Proxy-NJYFXJ

proxy mode:active|passive (拉取|主动推送)

hosts proxy hosts

Create host

Monitored by proxy:Zabbix-Proxy-NJYFXJ

Zabbix常用模板

官方模板:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
zabbix常用模板
Redis
https://github.com/adubkov/zbx_redis_template

RabbitMQ
https://github.com/jasonmcintosh/rabbitmq-zabbix

nginx
https://share.zabbix.com/cat-app/web-servers/nginx-for-zabbix-3-2

IIS
https://share.zabbix.com/cat-app/web-servers/iis-sites-and-application-pool-state-monitoring

SSL证书
https://share.zabbix.com/cat-app/web-servers/ssl-certificates-check

MS sqlserver
https://share.zabbix.com/databases/microsoft-sql-server/template-ms-sql-2012

routeOS
https://share.zabbix.com/network_devices/mikrotik/mikrotik-routeros
看完了?赏个鸡腿钱,谢谢老板!