zabbix进阶1
zabbix触发器、action及模板(01)_
zabbix宏和用户自定义监控(02)_
zabbix发现、自动注册和web监控(03)_
zabbix分布式监控(04)_
第一章:触发器,action及模板
zabbix:数据采集-->数据存储--->数据展示和分析--->报警
数据采集:
SNMP
agent
ICMP/SSH/IPMI等
数据存储:
cacti:rrd//轮转存储
nagios: ,可以将数据保存到mysql,默认nagios并不保存数据,也可以是无数据库的
//nagios的报警功能比较强悍
zabbix:mysql/pgsql/oracle 都支持
数据展示:大多数的展示都是基于web平台
php
java
移动app
//拿到数据进行显示而已
报警:通知给管理员,通过media//实现报警
media:短信,微信,msn,mail等,通知相关人员
使用相应的接口
zabbix:监控的实现
采集:
zabbix agent:
agent (active):agent通过sender主动发信息给server,
SNMP
SSH
保存:RDBMS,众多的都可以
展示:php,web gui
报警:报警升级机制
添加zabbix的监控对象:手动发现/自动发现
hosts,host group://
每一个监控对象:item
多个item:application,通过key来标记一个item,
//server通过agentd上的不同key来区分不同的监控项(item)
//有的item的采集时间是不同的,有的10s,有的5s等,
//在任何一个agent上key是不能重复的
graph,screen:将多个自定义图形,放在一起,放在一个大屏幕中
trigger,event //触发器:定义一个数据指标的阈值:上下限
trigger可以生成event,但是event的生成原因不一定都是trigger,例如discover也可以生成event
action:(notification,operation,condition) //满足一定条件后,触发action
//trigger只有在满足一定条件的状态时间才需要
创建触发器:
状态:problem | OK
{
server:主机名 //constant 常数
key:主机上关系的相应监控项的key;
function:评估采集到的数据是否在合理范围内时所使用的的函数,其评估过程可以根据采取的数据
、当前时间及其它因素进行
//常见的函数:
avg
count 计数
change 上一次和这次的差值
date
dayofweek 星期几
delta 计算二者的差值
diff 不同之处
iregexp 基于正则表达式做匹配
last最后几次采样,last[0],最后1次,last[2]后3次
max
min
nodata 没有采集到值
now
sum 求和
//函数是触发器的函数,是trigger对key做何种运算所调用的函数
parameter:函数参数,sum(10):10秒内所有取值之和
sum(#10):最近10次取值之和
此外:avg,count,last,min,max还支持第二个参数,用于完成时间限定
//max(1h,7d)返回一周之前的一个小时之内的最大值
触发器的运算符:
/,*,>,<,=,#{不等于},&,|
trigger举例:{www.magedu.com:system.cpu.load[all,avg1].last(0)}>3
主机:www.magedu.com
key : system.cpu.load[all,avg1]
函数:last(0) //0是参数
last(0)相当于last(#1) //
//表示主机www.magedu.com上所有的CPU的过去1分钟内的平均负载的最后一次取值大于3时
//将触发状态转换
trigger创建://trigger是item级别的
configuration-->hosts->trigger分为:
trigger:
dependencies:agent和server的中间路由器,
//假如中间路由器挂了,不会报警认为所有的agent都挂了
//zabbix只能基于触发器依赖,但是nagios可以基于nagios依赖
注意://zabbix_agentd:是工作在agent上的一个收集信息的工具
//zabbix_proxy:是代理zabbix_server收集信息的一个中继站
//pkill httpd:命令可以杀死进程
kill :对应的是PID
pkill :对应的是COMMAND //进程名
实验1:创建trigger:触发器//自定义trigger,监控network-流量
configuration-hosts—create trigers—
//先看以下自己网卡流量的取值---{我的是大于in:1500/ out:200}
name:网络入栈流量过大
trigger:
expression:
item:自己定义的network-in流量
function: {10.0.0.201:net.if.in[eno16777736].last()}>10000 //最后一次大于n
last of: 0
time shift: 1500 //最后一次,最大值大于1500
OK event generation //事件生成,当前触发器的“problem”事件生成其他事件
URL:在Screens的“status of triggers”中要显示的内容的链接
Severity:严重级别 ,当前触发器的严重级别
enabeld :是否启用触发器
//只需要定义name,expression,enabled即可
monitor—latest data---201-网络in---打开相关的//看到201网卡-in上会有
//中间的那条线,就是trigger的线
//这个触发器的表达式的意思是:定义一个阈值,看是否超过,然后,进行下一个操作
要实现zabbix的通知功能:一般需要两个步骤:
1. 定义所需的媒介:(media)//通常指发送消息的途径,如邮件,Jabber,和SMS短信群发系统
//先创建media type{自定义media},然后创建组,最后创建用户加入组,
//创建用户的时候需要定义好media为自定义的media,定义自己对哪些级别的信息接收
//创建组的时候,需要定义 user group 对host group具有什么权限
2. 配置一个动作(action):发送短信到“媒介” //动作由“条件”和“操作”组成,它的逻辑为当“条件”满足时,就应该执行相应的操作 //发通知和执行远程命令是两个最基本的操作
创建action:
正常工作中的某触发器状态发生改变,{从OK转为problem,problem转为OK},此时需要采取一定的指令:报警,执行远程命令等
zabbi的事件(event)
1. 触发器事件:触发器每次状态发生改变,都会生成相应时间
2. 发现类事件:zabbix会周期性地扫描“网络发现规则”中指定的IP范围,一旦发现主机或服务,就会生成一个或几个发现事件
发现类事件有8类:Service UP,Service Down,Host UP,Host Down,Service discoverd
Service Lost ,Host discoverd ,Host lost
{service,Host}.{UP,Donw,discoverd}
3. 主动agent自动发现事件,(也称作自动注册事件);当一个此前状态未知的agent发起检测请求,时会发生此类事件
//因此zabbix的通知机制,也称作基于事件的通知机制
zabbix的{media type}
常见类型:
E-mail电子邮件
SMS:短信
Jabber:能够实现基于Internet或LAN
自定义通知脚本://Zabbix可以调用位于其配置文件“AlertScriptsPath”变量所定义的脚本到目录中的脚本
AlertScriptsPath=/usr/lib/zabbix/alertscripts // /etc/zabbix/zabbix_server.conf定义的脚本位置
//试验2,先创建用户和组
//创建三个User group:zabbix_users,magagers,CTOs 用于实现在不同级别发送信息
//用户tom属于CTOs,
//administrator-users—create users
User:tom //属于CTOs组,tom只接受high和disaster级别的组
//admin 修改media
条件:condition/
//条件:1.不在维护期,2.trigger为problem,trigger的名字是 -//满足这三个条件的时候,就执行操作
实现步骤:
1. user group—--media type ----—user—trigger---action //需要定义这些数据
2. 定义trigger的时候需要定义级别,可以多定义几个,指定不同的级别
trigger级别:Not classified---information---Warning---Average---High---Disaster
未分类—消息---警告----平常的---高的---灾难的
Delta(speed per second):保存为(value-pre_value)/(time-prev_time) 的结果
//时间段的平均值
Delta (simple change) :保存为(value –pre_value)的计算结果:不计算时间段,只计算差值
实验:测试action的发生
ab 命令进行测试,agentd端,测试结果
media type怎么使用;
//zabbix自定义报警功能,未实现
可能因为,action的通知,到用户不对
实验:创建自定义模板:
步骤:创建template---创建item-创建graph---创建screen—trigger---action等
create template:
groups in groups:主机组
hosts templates in: 模板也有组,
macros:宏:{$NETINLIMIT}=100000
创建4个item,分别为net-in,net-out,cpu-intr,cpu-switch
另外新建一个host,然后,链接到新建的模板
//action是全局级别的,一个action可以为多个主机服务,报警的
问题1:server通过agentd的方式,从agentd获得不到数据
Received empty response from Zabbix Agent at [192.168.1.2]. Assuming that agent dropped connection because of access permission
大概意思是说没有权限访问agent端口10050,解决方法如下:
//方法一:
vim /etc/zabbix/zabbix_agentd.conf //在agent上只要配置这些就可以
Server = 192.168.1.1 //多个server使用逗号隔开
pkill zabbix_agentd
zabbix_agentd -c /etc/zabbix/zabbix_agentd //重启zabbix_agentd
//方法二:重装zabbix_agentd
//工作目录在 /usr/local/src
http://www.linuxidc.com/Linux/2016-04/130437.htm
1.#./configure --prefix=/usr/local/zabbix_agent --enable-agent && make && make install
在/usr/local/sbin目录下会生成zabbix_agent、zabbix_agentd、zabbix_get、zabbix_sender四个文件。
2.groupadd zabbix
useradd -g zabbix -s /sbin/nologin zabbix
3.mkdir /etc/zabbix
cp /usr/local/src/zabbix-2.4.5/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
//启动脚本
sed -i 's#BASEDIR=/usr/local#BASEDIR=/usr/local/zabbix_agent#' /etc/init.d/zabbix_agentd #
//修改 Agent 安装路径,告诉agentd的启动文件agentd的安装目录
4.修改配置文件/usr/local/zabbix_agentd
shell > grep -vP '^#|^$' /usr/local/zabbix_agent/etc/zabbix_agentd.conf # 调整配置文件
LogFile=/tmp/zabbix_agentd.log
Server=121.42.111.220 # Zabbix Server IP ( 被动模式,客户端被动 )
ServerActive=127.0.0.1 # 主动模式,如果使用也填 Zabbix Server IP ,不使用可以注释掉
Hostname=101.201.142.247 # 本身 IP ,Zabbix Server 添加主机时需要使用,不一定是 IP
Include=/usr/local/zabbix_agent/etc/zabbix_agentd.conf.d/*.conf # 加载自定义的监控配置文件
UnsafeUserParameters=1 # 允许自定义 Key
5.启动 :
service zabbix_agentd start
chkconfig --add zabbix_agentd
chkconfig --level 35 zabbix_agentd on
//iptables -A INPUT 'Zabbix Server IP' -p tcp --dport 10050 -j ACCEPT //客户端使用的是被动模式
实验:zabbixserver端实现报警发送邮件到指
1. send或者postfix只需要安装一个就可以,启动,并开机启动
2. 创建media type //创建自定义media type
3.
//zabbix mail报警没有实现
cat a.txt | grep loss | awk -F% '{print $1}'| cut -d' ' -f1 //获取丢包率
cat a.txt | grep loss | awk '{print $10}' | cut -dm -f1 //获取超时时间
pkloss=` cat /tmp/10.0.0.200.tmp | grep loss | awk -F, '{print $3}' |cut -d% -f1 `
restime=`cat $file | grep loss | awk '{print $10}' | cut -dm -f1 `