[toc]
zabbix 高级用法

zabbix 报警媒介
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; |
| 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}' |
| 在zabbix-server 终端 |
| |
| zabbix_get -s 172.16.55.124 -p 10050 -k "Mysql.dml[172.16.55.124,root,password,delete]" |
| 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 |
| 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 |
| |
| |
| Delay(in sec) 3600 |
| |
| |
| |
| Add < |
| # 当返回到Discovery 时,可以看到服务器已经被自动发现; |
| # 创建动作 |
| Configuration |
| 主机发现的条件 |
| Conditions: New condition Host IP = |
| 或者指定网络的发现规则来定义 |
| Operations: 这里就可以定义对应的操作(添加到组中) |
| Configuration |
| |
| |
| |
| Add < |
| # 另外需要自己定义好一个模板 |
| |
| Configuration |
| |
| |
| |
| |
| |
| |
| |
| 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 |
| |
| |
| |
| # 支持使用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.[ |
| # 登录 zabbix数据库查询对应的key |
| # use zabbix; |
| # SELECT key_ FROM iem WHERE key_ LIKE |
Web 监控
- Zabbix 还可以进行web 站点的可用性检测;
- 创建web监控需要定义一个web方案(scenarios);
- web方案包括一个或多个HTTP请求或”步骤(step)”;
- 步骤(step)的执行过程按照预先定义的顺序进行执行;
- 通过web监控可以实时获取以下信息;
- Zabbix也可以检测获取到HTML页面中是否包含预设的字符串,也可以实现登录和页面点击;
| # 首先需要定意一个application |
| # Configuration --> Hosts --> Web |
| --> Scenario Zabbix server |
| --> google charme |
| --> Steps |
| --> zabbix home |
| --> http: |
| --> Require status code 200 |
zabbix的监控方式
| |
| 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 监控方式
| |
| MIB: 是被 管理对象的集合,而且还额外定义了被管理对象的名称、访问权限、数据类型等属性; |
| MIB视图: MIB的子集; |
| 授权:将MIB视图与Community绑定来实现; |
| OID: Object ID 1.3.5.1.2.1 |
| 1: system |
| 2: interface |
| 4:ip |
| 6: tcp |
| 7: udp |
| |
| |
| 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 |
| |
| |
| |
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 分布式监控概述
| |
| |
| 1、使用代理(proxy); |
| 2、使用节点(node); |
| |
| |
| |
| 解决host过多时单台Server面临性能瓶颈的问题; |
| 使用多个instance; |
| 每个instance是独立的一套zabbix,有database和Frontend(optional); |
| 支持热插拔,Node和Server的连接可以随时断开,但不影响Node的正常运行; |
| Node定时给Server发送configuration, history,event; |
| Server定时给Node发送configurations |
| 所有配置变更只能在Node节点操作,不能再Server操作; |
| 支持树状结构,Node又可以是多个Server; |
| |
| Node本身是一台server,它有完整的web页面,完整的数据库,它将数据源源不断传送给Master; |
| Poxy是只有一个proxy的daemon进程,proxy也有自己的数据库,但它的数据库只会保存一定时间的数据; |
| 它与Master通信是将一批信息打包后发送到Master, Master将这些数据merge入Mater数据库; |
| |
| Proxy压力小,数据库只存储一定时间数据; |
| Master压力变小,数据不是源源不断获取,减小IO压力; |
| 架构更清晰,易维护; |
| |
| |
| |
| CREATE DATABASE zabbix_proxy CHARACTER SET utf8; |
| GRANT ALL ON zabbix_proxy.* TO zbxuser@'172.16.%.%' IDENTIFIED BY 'xxxxxx'; |
| FLUSH PREVILEGES; |
| |
| Server=172.16.55.123 |
| Hostname=test.xxxx.com |
| DBHost=172.16.55.123 |
| DBName=zabbix_proxy |
| DBUser=zbxuser |
| DBPassword=xxxxxx |
| ConfigFrequency=600 |
| |
| Administration --> Proxies |
| Proxy name test.xxxx.com |
| Proxy mode Active |
| Hosts Proxy hosts |
| |
zabbix database需要用到的空间:
| 60000/60 = 1000条 |
| 历史数据=天数x每秒钟处理的数据是x24x3600x50Bytes |
| 90x1000x8600x50Bytes |
| 趋势数据: |
| 每一个趋势数据128Bytes, |
| 大小=天数x监控项x24x128Bytes |
| 事件数据: |
| 每个占据130Bytes |
| 大小:天数x86400x130 |