[toc]
zabbix 高级用法
zabbix 报警媒介
# 对于邮件报警接口,CentOS默认邮件服务就是启动的,但是,只能服务本地到本地发邮件;
# 如果需要往互联网上发邮件,需要把服务器配置成邮件服务器;
# 但一般来讲,自建邮件系统,付出的成本和技术都较高,因此,我们可以考虑网联上的邮件服务;
# 而对于报警的内容,一般是我们在zabbix服务端配置的宏所定义的内容;
# 没有item的配置,那么将意味着没有监控数据;
Zabbix术语与操作注意项
Item Key
命名求: 只能使用字母、数字、下划线、点号、连接符;
接受参数: system.cpu.load[<cpu>,<mode>], net.if.inbound[if,<mode>]
注意: 每一个key背后都应该有一个命令或者脚本来负责实现数据收集;命令或者脚本可以调用传递给key的参数,调用方式为$1,$2,...
在zabbix中定义item时调用某key,还需要额外定义数据采集频率(每30秒采集一次)、历史数据的保存时长等;
Trigger:
触发器表达式: {<Server>:<key>.<function>(<parameter>)}<operator><constant>
例: {api.transfereasy.com:net.tcp.listen[9991].last()}#1
<function>: 评估采集到的数据是否在合理范围内时所使用的函数,共评估过程可以根据采集到的数据、当前时间或其它因素;
avg:平均值;
count:指定时间内的统计;
change:返回最近返回的值,与之前一次的差值;
date:当天的值;
dayofweek:返回本周的第几天的值;
dayofmonth:返回本月的第几天的值;
delta:指定时间范围内最大值与最小值之差;
diff:当文件不一样时;
iregexp:忽略大小写它符的正则表达式;
last:最近一次采样;
max:最近采样的最大值;
min:最近采样的最小值;
nodata: 表示没有数据;
sum:最后一次采样数据之和;
regexp:检查最后一次采样的值是否能够被指定的模式所匹配: 1、表示匹配, 0表示不匹配;
now:返回自Unix元年至此刻经历的秒数;
prev:倒数第二个采样值:
str:从最后一次的采样中查找到此处指定的子串:
strlen: 做字符串的长度比较;
prev:倒数第二个采样值
<operator>:
>, <, =, #(表示不等于)事实上我们可以让表达式的值直接来做算术运算的;
/ ,* ,- ,+
&(与),|(或)
触发器之间的关系
Action:
message:
condition:
一般由event触发:
trigger
discover:
Service Up ,Srvice Down ,Host up ,Host down, Service Discovered,Service Lost,Host Discovered, Host Lost
auto-registration
operation:
send message
Medis Type
Email (常用),SMS ,Jabber, Scripts(常用), EZ Texting
Usser
remote command(远程命令)
运行zabbix进程的用户是zabix用户
所以这里要注意,zabbix未必有权限执行
(1) 给zabbix 定义sudo规则:
zabbix ALL=(ALL) ALL
(2) 不支持active模式的agent:
(3) 不支持代理模式:
(4) 命令长度不得超过255个字符:
(5) 可以使用宏:
(6) zabbix-server仅执行命令,而不关命令是否执行成功:
前提: zabbix-agent要配置为支持执行远程命令:
EanbleRemoteCommands =1
LogRemoteCammands =1 # 启用执行远程命令后记录
# vim /etc/sudoers 或者 visudo
zabbix ALL=(ALL) NOPASSWD:ALL
注: 以上服务器权限的是操作是非常用风限性的;
Actions --> Operations --> New
--> Operation type Remote Command:
--> Host 挑远出远程主机
--> Global script -->在方框中加入远程命令
Hosts --> Applications --> Create Applications --> Http
Hosts --> Items --> Create Items
--> Name http server
--> Type zabbix aggent
--> Key net.tcp.listen[80]
--> Applications http service
Add Items <--
Host --> Triger --> Create Triger
--> Name http service is on
Expresion --> add
-->Item node2: http service
--> Function: Previous value is =1
--> Last of(T) 1
--> N 0
--> 严重级别先Hight
Configuration --> Actions --> Create Action -->
Action Name http service
Conditions --> New condition Trigger == node1: httpd serivce is value
Operations --> 定义报警升级 --> 可以定义由第一步到第几步执行什么样的操作
注意:
(1) 如果用到以某它用户身份运行其它命令的话,要加 sudo 来运行;
sudo systemctl restart httpd
(2) 在各gent上的sudoers 文件中,要注释如下行,否则命令依旧无法正常运行;
# Default requiretty
Script: Alert Script
放置于特定目录中: AlertScriptsPath=/usr/lib/zabbix/alertscripts
zabbix_server.conf配置文件中的参数:
脚本中使用$1,$2,$3来调用Action先项卡中的收件人地址, Default Subject , Default Massage:
# vim alert_message.sh
#!/bin/bash
to=$1
subject="$2"
body="$3"
echo "$body" | mail -s "$subject" "$to"
# chmod +x alert_message.sh
当然这里是一个最简单的实现脚本,这里也可以使用python,bash,ruby,perl 等脚本
注意: 新放入此目录中的脚本,只有重启zabbix 方能被实别;
Administration --> Mdedia types -->
--> Name AlterScript
--> Type Script
--> Script name alert_message.sh
Administration --> Users --->
--> Media --> add
--> AlterScripts root@localhost
这样的话,通过两种方式都能收到邮件
Escalation
Template
Web Scennario
Zabbix服务器进程
housekeeper 用来清理过期数据的;
alter 专门用来发送警告的进程;
discoverer 实现主机发现的;
httppoller 对web服务器进行监控时;
Poller 主动去被监控节点去拉取数据;
Pinger 基于ping命令来探测主机是否在线;
db_config_syncer 服务器配置同步的;
timer 计时器;
escaltor 报警升级器;
zabbix 可视化
自定义图形属性
Name: 图形的独有名称;
Width: 图形的宽度,单位为像素;仅适用于"预览(perview)" 模式、饼图或分离型饼图;
Height: 图形的类型, 共有四种,即"线状图normal"、"堆叠面积图"、"饼图(pie)"、 分离型饼图(exploded);
Show legend: 是否显示图例,即图形数据序列说明;
Show working time: 是否高亮显示工作时间区域;选定时,非工作时间区间的背景为灰色;此功能不用于pie和exploded;
Show Triggers: 是否显示触发器;此功能不适用于pie和exploded;
多图形合并显示
Configuration --> Screen --> Create Screen
--> Name Test Screen
--> Columns 3 # 列
--> Row 2 # 行
--> Test Screen
--> change 这里就可以看到一个2行3列的表格,然后往里面添加图片;
多屏翻转
Slide shows
Name
Default delay(in seconds)
可视化: graph ,screen, slide shows,map
宏(macros)
# 宏其实说白了就是变量,类型通常为文本类型;
# 为了更强的灵活性,zabbix还支持在全局、模板或主机级别使用用户自定义宏(user macro);
# 用户自定义宏要使用"{$MACRO}"这种特殊的语法格式;
# 宏可以应用在item keys 和descriptions、 trigger 名称和表达式、主机接口IP/DNS及端口、 discovery机制的SNMP协议的相关信息等;
# 宏的名称只能使用大写字母、数字及下划线;
# 两类:
内建: {MACRO_NAME}
自定义:{$MACRO_NAME}
# 可以在三个级别使用:
Global, Template, Host
# 优先级: Host --> Template --> Global
在某级别找到后将直接使用: 将不再查找
全局宏:
Adminstration --> General --> Macrios(在先项卡中)
主机宏:
Configuration --> Hosts --> Macrios 主机级别的宏优先级最高;
Template:
Configuration --> Complation --> Macrios
模板(Templats)
一系列配置的集合,此些配置可以通过”链接”的方式应用于指定的主机:
application, item, trigger, graph, scree 及发现规则;
添加例行惯常的维护时间;
Configuration --> maintenance --> Maintenance
User Parameters:
# zabbix 内置了许多item key:
实现用户自定义 item key ,实现特有数据指标监控;
语法:
UserParameter=<key>,<command>
# vim /etc/zabbix/zabbix_agentd.d/os.conf
UserParameter=os.memory.used, free -m | awk '/^Mem/ {print $3}'
UserParameter=os.memory.used, free -m | awk '/^Mem/ {print $3}'
UserParameter=os.memory.used, free -m | awk '/^Mem/ {print $3}'
注: 需要重启zabbix-agent 才能使用
# systemctl restart zabbix-agent
这个时候定义的zabbix-agent key就可以使用了,在server web 接口中添加;
如果找不到key 则直接输入即可 os.memory.used
监控nginx status
nginx status 开启方法:
server {
...
location /status {
stub_status on;
access_log off;
allow 172.16.55.123; # 允许访问的IP
allow 127.0.0.1;
deny all;
}
}
状态页面各项数据的意义;
active connections - 当前Nginx 正处理的活动连接数;
serveraccepts handled requests - 总共处理了 233851个连接,成功创建 233851次握手(证明中间没有失败的)
总共处了 687942个请求(平均每次扬处理了 2.94 个数据请求)。
reading -nginx 读取到客户端的Header信息数;
writing -nginx 返回给客户端的Header 信息数;
waiting - 开启 keep-alive 的情况下,这个值等于 active- (reading +wrting) 意思就是Nginx 已经处理完正等候一次请求指令的驻留连接;
UserParameter=Mysql.dml[*], /usr/local/mysql/bin/mysql -h$1 -u$2 -p$3 -e 'SHOW GLOBAL STATUS' | awk '/Com_$4\>/{print $$2}' # 在/etc/init.d/zabbix_agentd.d/xx.conf中定义了以上项后;
在zabbix-server 终端
zabbix_get -s 172.16.55.124 -p 10050 -k "Mysql.dml[172.16.55.124,root,password,delete]" #注意mysql用户的授权
zabbix_get -s 172.16.55.124 -p 10050 -k "Mysql.dml[172.16.55.124]"
UserParameter=Nginx.active[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'
UserParameter=Nginx.reading[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Reading' | cut -d" " -f2
UserParameter=Nginx.writing[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Writing' | cut -d" " -f4
UserParameter=Nginx.waiting[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Waiting' | cut -d" " -f6
UserParameter=Nginx.accepted[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}'
UserParameter=Nginx.handled[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}'
UserParameter=Nginx.requests[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}'
UserParameter=nginx.access_countaccess, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog totalaccess
UserParameter=nginx.access_count200, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 200access
UserParameter=nginx.access_count202, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 202access
UserParameter=nginx.access_count4xx, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 4xxaccess
UserParameter=nginx.access_count3xx, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 3xxaccess
UserParameter=nginx.access_count5xx, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 5xxaccess
UserParameter=varnish.stat[*], /usr/lib/zabbix/externalscripts/varnishstatus varnish_stat $1
UserParameter=varnish.count[*], /usr/lib/zabbix/externalscripts/varnishstatus varnish_count $1
UserParameter=varnish.hitrate, /usr/lib/zabbix/externalscripts/varnishstatus varnish_hitrate
zabbix 自动发现功能
zabbix 提供网络发现功能: network discovery
基于HTTP、 ICMP、 SSH、 LDAP、 TCP、 SNMP、 Telnet、 Zabbix_agent扫描指定网内的主机;
一旦主机被发现,如何对其进行操作,将由action来决定;
LLD: low leverl Discovery (底级网络发现功能)
此二者的功能:
自动添加主机、链接至模板/移除链接、自动分组、自动添加监控项、定义触发器等、执行远程脚本;
Discovery中的事件:
Service Up, Service Down, Host Up, Host Down, Service Discovered, Service Lost, Host Discovererd, Host Lost
网络发现有两个步骤:
discovery --> action
actions:
Sending notifications
Adding/removting hosts
Enabling/disabling hosts
Adding hosts to a group
Removing hosts from a group
Linking hosts to/unlinking from a template
Executing remote scripts
自动发现功能的使用,首先要将server端和agentu端的时间自动同步;
# vim /etc/zabbix/zabbix_agentd.conf
Server = 172.16.55.124
ServerActive = 172.16.55.124
Hostname = test.xxxxxx.com
LogRemoteCommand = 1
# systectl start zabbix-agent
Configure --> Discovery --> Create discovery rule
--> Name Local Linux Servers
--> IP range 172.16.55.125-127
Delay(in sec) 3600
--> Checks Check type ICMP ping(最易于实现的方式) --> Add
--> Device uniqueness criteria IP address
--> Enabled
Add <--
# 当返回到Discovery 时,可以看到服务器已经被自动发现;
# 创建动作
Configuration --> Actions --> Discovery(和以往action不同,在选项卡中先择)
主机发现的条件
Conditions: New condition Host IP =
或者指定网络的发现规则来定义
Operations: 这里就可以定义对应的操作(添加到组中)
Configuration --> Templates -->
--> Template name Linux Server Memory Stats
--> Visible anme
--> Groups In groups test group
Add <--
# 另外需要自己定义好一个模板
Configuration --> Actions --> Create Action
--> Conditions --> Type of calculation And/Or
--> Conditions --> Host IP = 172.16.55.125-128
-->Discovery rule = Local Linux Servers
--> Discovery status = Discovered
--> Operations --> New
--> Add To host group (Test group) # 添加到组中
--> Link to template Linux Server Memory status add
ADD <--
在网络的自动发现中,我们可以使用zabbix-agent来发现
在网络的主动发现中,由于是zabbix主动扫描,因此这种模型是非常消耗性能的
在mariadb中查看支持的key
MariaDB> use zabbix;
MariaDB> SELECT key_ FROM items;
使用agent-ping 来做实现主机探测;
auto_registation 主动注册功能
Active Agent Auto-Registration
# 首先主机之间要时间同步;
# 安装zabbix-agent 端;
# vim /etc/zabbix/zabbix-agent.conf
# ServerActive=172.16.100.6
# Hostname=test.xxxxx.com
# ListenIp=172.16.55.126
# HostMetdata = test4 (只用于自动注册主机的唯一标识)
# systemctl restart zabbix-agent
# 添加自动注册的动作
Configuration --> Actions --> (Event source Autoregistration) --> Create Action
--> Actions: auto registration
--> Condition: Hostname like node4 (比如主机名中包中包涵node4) --> Add
--> Operations Add to Host groups --> Link with templates 链接至模板
# 支持使用agent(active)类型的item key:
# 配置过程:
(1)定义agent端:
ServerActive=
Server=
Hostname=
ListenIP= 设置为本机某特定IP:
ListenPort=
HostMetadata=
HostMetadataItem= item key, 一般使用system.uname
(2) 配置action,要求其事件一源为auto-registation
LLD: low Level Discovery
# 自动发现特定变更的名称
#IFNAME(接口名称) , #FSNAME(文件系统名称)
# 主要将本地的一些特殊数据发送到服务端,比如接口类的数据;
# 添加针对变理的Items:
# 返回值为JSON
Configurations -->Templates --> discovery rules --> create discovery rules
--> name if lld
--> Type zabbix agent
--> Key net.if.[#IFNAME,bytes]
# 登录 zabbix数据库查询对应的key
# use zabbix;
# SELECT key_ FROM iem WHERE key_ LIKE '%discovery%';
Web 监控
- Zabbix 还可以进行web 站点的可用性检测;
- 创建web监控需要定义一个web方案(scenarios);
- web方案包括一个或多个HTTP请求或”步骤(step)”;
- 步骤(step)的执行过程按照预先定义的顺序进行执行;
- 通过web监控可以实时获取以下信息;
# 整个web方案中所有的步骤的平均下载速度;
# 失败的步骤号;
# 失败的报错信息;
- 在web方案的具体步骤中,可以按需要使用如下信息
# 该步骤的下载速度;
# 回应时间;
# 回应状态码;
- Zabbix也可以检测获取到HTML页面中是否包含预设的字符串,也可以实现登录和页面点击;
# 首先需要定意一个application
# Configuration --> Hosts --> Web
--> Scenario Zabbix server
--> google charme
--> Steps
--> zabbix home
--> http://172.16.55.123/index.html
--> Require status code 200
zabbix的监控方式
# zabbix-web 所能够显示的且可指定为监控接口类型的监控方式:
Agent: passive active
SNMP: Simple Network Management Protocol
IPMI:
智慧平台管理接口(Interlligent-Platform Management Interface)原本是一种Inter架构的企业系统的周边
设备所采用的一种工业标准;
IPMI亦是一开放的免费标准,使用者无需支付额外的费即可使用此标准;
JMX: Java Manaement Extensions, 用于通过Java自己的接口对java程序进行监控;
zabbix-java-getway用于获取监控数据:
SNMP 监控方式
# 操作: Get, NetNext, Set , Resonse, Trap
MIB: 是被 管理对象的集合,而且还额外定义了被管理对象的名称、访问权限、数据类型等属性;
MIB视图: MIB的子集;
授权:将MIB视图与Community绑定来实现;
OID: Object ID 1.3.5.1.2.1
1: system
2: interface
4:ip
6: tcp
7: udp
# yum -y install net-snmp net-snmp-libs net-snmp-utils
# vim /etc/snmp/snmpd.conf
com2sec notConfigUser default public
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
view systemview include .1.3.6.1.2.1
view systemview include .1.3.6.1.2.1.25.1.1
access notConfigGroup "" any noauth exact systemview none none
# service smpd start
# 确定udp 的161端口已经启用;
# 此时可以使用icmp来收集数据了;
JMX监控方式:
(1) 安装zabbix-java-gateway:
配置文件: /etc/zabbix/zabbix_java_gateway.conf
Listen_IP =
Listen_PORT = 10052
zabbix server的配置文件 /etc/zabbix/zabbix_server.conf
JavaGateWay=
JavaGateWayPort= 10052
(2) Java应用程序开户JMX接口:
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port =10053 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremoe.ssl=false
监控Tomcat
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port =10053 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremoe.ssl=false"
zabbix 分布式监控概述
# Zabbix能高效地监控分布式IT架构;
# 在大型环境中Zabbix提供两种解决方案;
1、使用代理(proxy);
2、使用节点(node);
# 代理(proxy)用于本区域数据收集,并将数据发送给server;
# 节点(node) 提供完整的Zabbix server用以建立分布式监控中的层级;
# Server-Node-Client特性;
解决host过多时单台Server面临性能瓶颈的问题;
使用多个instance;
每个instance是独立的一套zabbix,有database和Frontend(optional);
支持热插拔,Node和Server的连接可以随时断开,但不影响Node的正常运行;
Node定时给Server发送configuration, history,event;
Server定时给Node发送configurations
所有配置变更只能在Node节点操作,不能再Server操作;
支持树状结构,Node又可以是多个Server;
# Proxy vs Node
Node本身是一台server,它有完整的web页面,完整的数据库,它将数据源源不断传送给Master;
Poxy是只有一个proxy的daemon进程,proxy也有自己的数据库,但它的数据库只会保存一定时间的数据;
它与Master通信是将一批信息打包后发送到Master, Master将这些数据merge入Mater数据库;
# Master-Proxy 相比Master-Node的优点有以下
Proxy压力小,数据库只存储一定时间数据;
Master压力变小,数据不是源源不断获取,减小IO压力;
架构更清晰,易维护;
# zabbix-proxy 也需要被监控
# yum -y install zabbix-proxy zabbix-proxy-mysql zabbix zabbix-agent
# mysql
CREATE DATABASE zabbix_proxy CHARACTER SET utf8;
GRANT ALL ON zabbix_proxy.* TO zbxuser@'172.16.%.%' IDENTIFIED BY 'xxxxxx';
FLUSH PREVILEGES;
# vim /etc/zabbix/zabbix_proxy.conf
Server=172.16.55.123
Hostname=test.xxxx.com
DBHost=172.16.55.123
DBName=zabbix_proxy
DBUser=zbxuser
DBPassword=xxxxxx
ConfigFrequency=600 #多久向服务器端拉取一次数据
# server zabbix-proxy start
Administration --> Proxies
Proxy name test.xxxx.com
Proxy mode Active
Hosts Proxy hosts
# 再添加被监控服务器时可以在创建主机时可以指明Monitored by proxy
zabbix database需要用到的空间:
60000/60 = 1000条
历史数据=天数x每秒钟处理的数据是x24x3600x50Bytes
90x1000x8600x50Bytes
趋势数据:
每一个趋势数据128Bytes,
大小=天数x监控项x24x128Bytes
事件数据:
每个占据130Bytes
大小:天数x86400x130