zabbix组件: zabbix-server zabbix-database zabbix-web zabbix-agent zabbix-proxy zabbix逻辑组件: 主机组、主机 item(监控项)、application(应用) graph(图像) trigger(触发器) event(事件) action(操作) notice command media users(meida) 监控系统: 数据采集、数据存储、报警、数据可视化 zabbix: database --> zabbix-server (zabbix_server.conf)--> zabbix-web(LAMP) --> http://zabbix-web-server/zabbix zabbix-agent (zabbix-agent.conf) 添加主机:
agent:161 nms:162(trap)
历史数据:采样生成的数据 历史趋势数据:每小时的最大值、最小值、平均值、统计
As is:不做任何处理 Delta(speed per second):(value - prev_value)/(time - pre_time) Delta(simple change):(value - prev_value)
Trigger: 名称中可以使用宏; {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.CONN}, {HOST.DNS}
Action有两类: send message command
监控项(item) "监控项(item)"是Zabbix服务器用于监控一个特定对象上的一个特定指标,并负载针对其收集相关的监控数据 比如CPU每分钟的平均负载可以时一个item,每5分钟的平均负载是一个item,某特定网络接口接收报文的速率又是一个item等 每一个Item都拥有相应的"类型(Type)" 例如"Zabbix agent"、"SNMP"、"External check"、"IPMI agent"、"SSH agent"、"JMX agent"等 Zabbix服务器会使用相应类型的协议或机制同被监控端通信 item key 每一个item都有其专用的"Key" Zabbix服务器在与被监控端通信时就使用相应的协议或机制去询问被监控端这个Key的值,被监控端则调用与此Key对应的监控脚本获取数据并返回给服务器端 Key的命名只能使用"0-9a-zA-Z_-."(引号中的内容)等字符,且可以接受参数,其命令习惯如system.cpu.load[<cpu>,<mode>],其中,中括号中的内容为参数,且分别可以按次序使用$1、$、...进行引用,此示例中仅有两个参数 若要使用不定数目的参数,则可以使用"*"表示 zabbix有许多预定义的key,详细信息的获取地址: https://www.zabbix.com/documentation/2.0/manual/config/items/itemtypes/zabbix_agent 对于每一个item,Zabbix服务器还定义了怎么存储这个item的数据以、数据采集的频率及历史数据的保存时长等 多个item还可归类为一个由"application"定义的逻辑组
创建监控项(item) Configuration --> Hosts
创建触发器(trigger) "监控项"仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,"触发器"正是用于为监控项所收集的数据定义阀值 每一个触发器仅能关联至一个监控项,但可以为一个监控项同时使用多个触发器 事实上,为一个监控项定义多个具有不同阀值的触发器,可以实现不同级别的报警功能 一个触发器由一个表达式构成,它定义了监控项所采取的数据的一个阀值 一旦某次采集的数据超出了此触发器定义的阀值,触发器状态将会转换为"Problem";而当采取的数据再次回归至合理范围内时,其状态将重新返回到"OK"
触发器表达式 触发器表达式高度灵活,可以以之创建出非常复杂的测试条件 基本的触发器表达式格式如下所示 {<server>:<key>.<function>(<parameter>)}<operator><constant> server:主机名称; key:主机上关系的相关监控项的key; function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采取的数据、当前时间及其其它因素进行; 目前,触发器所支持的函数有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等 parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用"#"做为前缀,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和; 此外,avg、count、last、min和max还支持使用第二个参数,用于完成时间限定;例如,max(1h,7d)将返回一周之前的最大值; operator:表达式所支持的运算符及其功能如下表所示
触发器表达式的例子 一个例子 {www.smoke.com:system.cpu.load[all,avg1].last(0)}>3 表示主机www.smoke.com上所有CPU的过去1分钟内的平均负载的最后一次取值大于3时将触发状态变换 对last函数来说,last(0)相当于last(#1)
触发器间的依赖关系 在一个网络中,主机的可用性之间可能存在依赖关系 例如,当某网关主机不可用时,其背后的所有主机都将无法正常访问 如果所有主机都配置了触发器并定义了相关的通知功能,相关人员将会接收到许多告警信息,这即不利于快速定位问题,也会浪费资源 正常定义的触发器依赖关系可以避免类似情况的发生,它将使用通知机制仅发送最根本问题相关的告警 注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义
触发器等级 触发器等级用于标示事件的严重性 zabbix支持以如下表所示的等级
创建触发器 Configuration --> Hosts Trigger --> Create Trigger
创建主机组: 点击Configuration -- Host groups -- Create host group,填写主机组名称,可以关联模板,点击Add;
删除主机: 点击Configuration -- Hosts,在主机前面打勾,选择Delete selected,点击Go;
node2:linux-agent
[root@node2 ~]# yum -y install net-snmp
[root@node2 ~]# vim /etc/snmp/snmpd.conf
[root@node2 ~]# service snmpd start
添加主机: 点击Configuration -- Hosts -- Create Host,填写完成,点击Add; Host: Host name:node2.smoke.com Visible name:node2 Groups in groups:test servers,可以New group创建新主机组; Agent interfaces:172.16.100.8,可以添加多个网卡 SNMP interface:172.16.100.8,可以添加多个网卡
可以看到添加的主机,点击主机名称,进去点击Templates,选择模板,选择Template OS Linux,点击Add,再点击Update;
node1:zabbix-server
[root@node1 zabbix-2.4]# mysql
MariaDB [zabbix]> select * from items;
MariaDB [zabbix]> select * from items\G
MariaDB [zabbix]> select key_,type FROM items;
[root@node1 ~]# zabbix_get -s 172.16.100.8 -k "system.uname"
Linux node2.smoke.com 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64
[root@node1 ~]# zabbix_get -s 172.16.100.8 -k "net.if.out[eth0]"
1328059
[root@node1 ~]# zabbix_get -s 172.16.100.8 -k "net.if.in[eth0]"
11766901
创建item: 点击Configuration -- node2 -- Templates,点击Uplink and clear(拆除并清除模板数据),点击Update;
node1:zabbix-server
MariaDB [zabbix]> SELECT key_,type FROM items WHERE key_ LIKE 'cpu%';
MariaDB [zabbix]> SELECT key_,type FROM items WHERE key_ LIKE 'system.cpu%';
[root@node1 ~]# zabbix_get -s 172.16.100.8 -k "system.cpu.intr"
6419077
点击主机node2 -- Items -- Create Item,填写完成,点击Add; Name:cpu interrupts Type:Zabbix agent Key:system.cpu.intr Host Interface:172.16.100.8:10050 Type of information:Numeric(unsigned) Data type:Decimal Units:单位; Use custom Multiplier:做运算; Update interval(in sec):采样间隔; New flexible interval Interval(in sec):定义时间间隔; History storage period(in days):历史数据存放天数; Trend storage period(in days):保留历史趋势数据天数; Store value:数据怎么存下来,Delta(speed per second); Show value:数据显示结果,As is; New application:cpu stats; Applications: Populates host inventory field:资产管理清单;
node1:zabbix-server
MariaDB [zabbix]> SHOW TABLES;
点击主机Configuration -- Hosts -- node2 -- Graphs -- Create graph,填写完成,点击Add; Name:cpu interrupts Width:宽度 Height:高度 Graph type:类型, Show legend: Show working time: Show triggers: Percentile line(left): Percentile line(right): Y axis MIN value:最小值 Y axis MAX value:最大值 Items:cpu interrupts Preview:预览
点击Monitoring -- Graphs,Group选择test servers,Host选择node2,Graph选择cpuintrrupts;
node1:zabbix-server
[root@node1 ~]# zabbix_get -s 172.16.100.8 -k "system.cpu.switches"
5288758
点击Configuration -- Items -- Create item,填写完成点击Add; Name:cpu context switches Key:system.cpu.switches Host interface:172.16.100.8:10050 Store value:Delta(speed per second) Applications:cpu stats
点击Configuration -- Hosts,node2主机上面点击Graphs,点击cpu interrupts图形名称,点击Update; Name:cpu stats; Items:点击Add,选择cpu context switches;
点击Monitoring -- Graphs,Group选择test servers,Host选择node2,Graph选择cpu stats
点击Configuration -- Hosts,在node2上面点击Triggers,点击Create trigger; Trigger: Name:too many interrupts Expression:{node2.smoke.com:system.cpu.intr.last(0)}>50, 填写完成,点击Add; Item:点击select,{node2.smoke.com:system.cpu.intr.last()}>0选择cpu.interrupts; Function:Last (most recent) T value is > N, N:50,点击Insert; Multiple PROBLEM events generation:一次可以产生多个事件; URL:可以在发送给管理员的报警信息中显示URL,大多数场景可以使用宏trigger.id表示这个trigger是从哪发来的; Severity:报警级别,High; 填写完成点击Add;
点击Monitoring -- Graphs,Group选择test servers,Host选择node2,Graph选择cpu stats;
node1:zabbix-server
[root@node1 ~]# yum -y install hping3 #可以模拟ddos***
[root@node1 ~]# hping3 172.16.100.8 --faster
点击Configuration -- Hosts,在node2上面点击Triggers,点击too many interrupts; 修改 Expression:{node2.smoke.com:system.cpu.intr.last(0)}>5000 完成,点击Update;
点击Monitoring -- Graphs,Group选择test servers,Host选择node2,Graph选择cpu stats;
点击Monitoring -- Events,Group选择test servers,Host选择node2,Source选择Trigger;
点击Administration -- Media types,点击Email,填写完成点击Update; 默认报警方式有三种 Email:邮寄 Jabber:即时通信工具; SMS:手机
创建新邮寄方式,点击Create media type,填写完成点击Add;
点击Administration -- Users,选择Users,点击Create user; Alias:zabbix_user Name:zbxuser Groups:Zabbix administratos Password:zbxpass
点击Media,点击Add, Type:local_mail_service Send to:root@localhost 填写完成,点击Add,再点Add;
点击Configuration -- Actions --Create action, Name:interrupts problem Default subject:{TRIGGER.STATUS}: {TRIGGER.NAME} Default message: Trigger: {TRIGGER.NAME} Trigger status: {TRIGGER.STATUS} Trigger severity: {TRIGGER.SEVERITY} Trigger URL: {TRIGGER.URL}
Item values:
- {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
- {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
- {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): {ITEM.VALUE3}
Original event ID: {EVENT.ID}
FROM:mail.smoke.com Recovery message:重新恢复时也发邮件; Recovery subject:{TRIGGER.STATUS}: {TRIGGER.NAME} Recovery message: Trigger: {TRIGGER.NAME} Trigger status: {TRIGGER.STATUS} Trigger severity: {TRIGGER.SEVERITY} Trigger URL: {TRIGGER.URL}
Item values:
- {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
- {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
- {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): {ITEM.VALUE3}
Original event ID: {EVENT.ID}
点击Conditions(发送邮件条件);
点击Operations(怎么发),点New,完成点击Add;
点击Monitoring -- Graphs,Group选择test servers,Host选择node2,Graph选择cpu stats;
node1:zabbix-server
[root@node1 ~]# hping3 172.16.100.8 --faster
点击Monitoring -- Graphs,Group选择test servers,Host选择node2,Graph选择cpu stats;
node1:zabbix-server
[root@node1 ~]# tail /var/log/maillog