zabbix安装配置文档 2php
一 zabbix-server 安装配置(基础配置) 2前端
二 zabbix agent安装配置 5mysql
2.1 主动模式和被动模式 6linux
2.2 安装配置zabbix_agent 12web
2.3 配置zabbix-server 前端(active)模式 18正则表达式
2.4 自动发现 18sql
2.5 自动注册 21数据库
附录: 22json
1 自动发现(原理) 22vim
网络发现简介 22
2 自动发现(具体操做) 24
3 自动注册 33
4 zabbix low-level discover zabbix批量部署必备 38
1. 概述 38
2. Discovery之文件系统 38
3. 自定义LLD规则 44
5 zabbix自定义自动发现服务(low-level-discovery)监控系统服务 47
1 ) 概述 47
2 ) LLD脚本 48
3) 添加模板和自动发现规则 52
6 解决现实中文乱码: 65
7 zabbix_agent playbook 批量安装 66
zabbix安装配置文档
# 软件版本 4.0.4,172.20.50.11
# 参考地址 https://www.zabbix.com/download
# 导入repo包 rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm # 安装配置数据库 yum remove mariadb-libs -y # 上传mysql相关包 mysql-community-client-5.7.22-1.el7.x86_64.rpm mysql-community-devel-5.7.23-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.23-1.el7.x86_64.rpm mysql-community-common-5.7.22-1.el7.x86_64.rpm mysql-community-libs-5.7.22-1.el7.x86_64.rpm mysql-community-server-5.7.22-1.el7.x86_64.rpm
yum install * -y
vim /etc/my.cnf [mysqld] datadir=/data/mysql socket=/data/mysql/mysql.sock character_set_server = utf8 interactive_timeout = 120 wait_timeout = 120 symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [client] socket=/data/mysql/mysql.sock
# 在配置文件中[mysqld] 中添加skip-grant-tables 而且重启mysqld服务,跳过受权表 FLUSH PRIVILEGES; GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'JkW&$y42PL5&y#cx'; GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'JkW&$y42PL5&y#cx'; FLUSH PRIVILEGES; # 注释 数据库配置中skip-grant-tables 配置 # 建立zabbix库 create database zabbix character set utf8 collate utf8_bin;
# 安装zabbix相关包 yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent -y
# 初始化zabbix表结构 zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p JkW&$y42PL5&y#cx
[root@VM_4_84_centos mysql]# cat /etc/zabbix/zabbix_server.conf | egrep -v "^$|^#|#" LogFile=/var/log/zabbix/zabbix_server.log LogFileSize=0 PidFile=/var/run/zabbix/zabbix_server.pid SocketDir=/var/run/zabbix DBName=zabbix DBUser=zabbix DBPassword=JkW&$y42PL5&y#cx DBSocket=/data/mysql/mysql.sock SNMPTrapperFile=/var/log/snmptrap/snmptrap.log Timeout=4 AlertScriptsPath=/usr/lib/zabbix/alertscripts ExternalScripts=/usr/lib/zabbix/externalscripts LogSlowQueries=3000
# 修改时区 vim /etc/httpd/conf.d/zabbix.conf php_value date.timezone Asia/Shanghai
# 启动服务 systemctl restart zabbix-server zabbix-agent httpd systemctl enable zabbix-server zabbix-agent httpd
# 配置前端 http://172.20.50.11/zabbix
# 生成的配置信息 Database type MySQL Database server 172.20.50.11 Database port 3306 Database name zabbix Database user zabbix Database password ****************
Zabbix server 172.20.50.11 Zabbix server port 10051 Zabbix server name zabbix_server
# 配置信息路径 Configuration file "/etc/zabbix/web/zabbix.conf.php" created.
# 初始帐号 Admin/zabbix
|
主动模式的流程:
客户端每隔一段时间主动向服务端发起链接请求–>服务端收到请求,查询客户端须要取的item信息,发送给客户端–>客户端收集数据发送服务端–>结束。
被动模式的流程:
客户端开一个端口默认10050,等待服务端来取数据,而后客户端收集数据发送到服务端,而后结束。
zabbix agent检测分为主动(agent active)和被动(agent)两种形式,主动与被动的说法均是相对于agent来讨论的。
简单说明一下主动与被动的区别以下:
主动:agent请求server获取主动的监控项列表,并主动将监控项内须要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
zabbix agent通讯过程当中的协议均基于json格式,格式以下:
- "ZBXD\x01" (5 bytes) - data length (8 bytes). 1 will be formatted as 01/00/00/00/00/00/00/00 (eight bytes in HEX, 64 bit number) |
备注:为了不内存耗尽,server限制每一个通讯链接最多使用128MB内存。
被动检测:
server发起以下请求
<item key>\n
Aegent返回以下响应数据
<HEADER><DATALEN><DATA>[\0<ERROR>]
supported items通讯过程:
1) Server打开一个TCP链接
2) Server发送请求agent.ping\n
3) Agent接收到请求而且响应<HEADER><DATALEN>1
4) Server处理接收到的数据
关闭TCP链接:
not supported items通讯过程:
1) Server打开一个TCP链接
2) Server发送请求vfs.fs.size[/nono]\n
3) Agent接收请求而且返回响应数据 <HEADER><DATALEN>ZBX_NOTSUPPORTED\0Cannot obtain filesystem information: [2] No such file or directory
4) Server接收并处理数据, 将item的状态改成“ not supported ”
5) 关闭TCP链接
主动检测:
zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。zabbix多久获取一次active items?它会根据配置文件中的RefreshActiveChecks的频率进行,若是获取失败,那么将会在60秒以后重试获取ACTIVE ITEMS列表。
Agent请求:
<HEADER><DATALEN>{
"request":"active checks",
"host":"<hostname>"
}
Server响应列表:
<HEADER><DATALEN>{
"response":"success",
"data":[
{
"key":"log[/home/zabbix/logs/zabbix_agentd.log]",
"delay":30,
"lastlogsize":0,
"mtime":0
},
{
"key":"agent.version",
"delay":600,
"lastlogsize":0,
"mtime":0
},
{
"key":"vfs.fs.size[/nono]",
"delay":600,
"lastlogsize":0,
"mtime":0
}
]
}
|
|
备注:获取到的items列表中的全部item属性key, delay, lastlogsize ,mtime都必须存在,获取列表的通讯过程以下:
1) Agent打开TCP链接(主动检测变成Agent打开)
2) Agent请求items检测列表
3) Server返回items列表
4) Agent 处理响应
5) 关闭TCP链接
6) Agent开始收集数据
7) 提交active items数据
Agent发送请求:
<HEADER><DATALEN>{ "request":"agent data", "data":[ { "host":"<hostname>", "key":"agent.version", "value":"2.4.0", "clock":1400675595, "ns":76808644 }, { "host":"<hostname>", "key":"log[/home/zabbix/logs/zabbix_agentd.log]", "lastlogsize":112, "value":" 19845:20140621:141708.521 Starting Zabbix Agent [<hostname>]. Zabbix 2.4.0 (revision 50000).", "clock":1400675595, "ns":77053975 }, { "host":"<hostname>", "key":"vfs.fs.size[/nono]", "state":1, "value":"Cannot obtain filesystem information: [2] No such file or directory", "clock":1400675595, "ns":78154128 } ], "clock": 1400675595, "ns": 78211329 } |
Server响应数据
{
"response":"success",
"info":"processed: 3; failed: 0; total: 3; seconds spent: 0.003534"
}
备注:若是有些数据提交失败,好比host、item被删除或者禁用,agent不会尝试从新提交
主动检测提交数据过程以下:
1) Agent创建TCP链接
2) Agent提交items列表收集的数据
3) Server处理数据,并返回响应状态
4) 关闭TCP链接
被动模式agent配置:
[root@zabbix_client ]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
StartAgents=3
Server=172.20.50.11
ServerActive=172.20.50.11
Hostname=zabbix_client
HostMetadataItem=system.uname
systemctl restart zabbix-agent
由于zabbix监控模板默认使用的就是被动模式,因此zabbix-server端直接添加hosts默认使用的就是被动模式。
主动模式配置:
[root@zabbix_master zabbix-server-mysql-3.2.7]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
StartAgents=0
Server=172.20.50.11 # 注意,这里虽然没啥用,可是获取能够解决前端能够搜集数据可是显示状态为红色的bug
ServerActive=172.20.50.11
Hostname=172.20.50.11
Include=/etc/zabbix/zabbix_agentd.d/*.conf
客户端agent模式,StartAgents=0设置为0表示关闭被动模式,被监控端的 zabbix_agentd 不监听本地端口,因此没法在 netstat -tunpl 中查看到zabbix_agentd进程
取值范围:0-100
默认值:3
zabbix启动以后开启被动监控的进程数量,若是设置为0,那么zabbix被动监控被禁用,而且不会监听相应端口,也就是说10050端口不会开启。
# 手动安装zabbix_agent
tar xf zabbix_agents-4.0.0-centos7-amd64-openssl.tar.gz -C /opt/
mv /opt/zabbix_agents-4.0.0-centos7-amd64-openssl /opt/zabbix_agent
cd /opt/zabbix_agent
mkdir pids
mkdir log
useradd zabbix
chown -R zabbix.zabbix /opt/zabbix_agent
vim /etc/init.d/zabbix_agentd
#!/bin/bash
#
# chkconfig: - 90 10
# description: Starts and stops Zabbix Agent using chkconfig
# Tested on Fedora Core 2 - 5
# Should work on all Fedora Core versions
#
# @name: zabbix_agentd
# @author: Alexander Hagenah <hagenah@topconcepts.com>
# @created: 18.04.2006
#
# Modified for Zabbix 2.0.0
# May 2012, Zabbix SIA
#
# Source function library.
. /etc/init.d/functions
# Variables
# Edit these to match your system settings
# Zabbix-Directory
BASEDIR=/opt/zabbix_agent
# Binary File
BINARY_NAME=zabbix_agentd
# Full Binary File Call
FULLPATH=$BASEDIR/sbin/$BINARY_NAME
# config file
CONFIG=$BASEDIR/conf/zabbix_agentd.conf
# PID file
PIDFILE=/opt/zabbix_agent/pids/$BINARY_NAME.pid
# Establish args
ERROR=0
STOPPING=0
#
# No need to edit the things below
#
# application checking status
if [ -f $PIDFILE ] && [ -s $PIDFILE ]
then
PID=`cat $PIDFILE`
if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null && [ $BINARY_NAME == `ps -e | grep $PID | awk '{print $4}'` ]
then
STATUS="$BINARY_NAME (pid `pidof $APP`) running.."
RUNNING=1
else
rm -f $PIDFILE
STATUS="$BINARY_NAME (pid file existed ($PID) and now removed) not running.."
RUNNING=0
fi
else
if [ `ps -e | grep $BINARY_NAME | head -1 | awk '{ print $1 }'` ]
then
STATUS="$BINARY_NAME (pid `pidof $APP`, but no pid file) running.."
else
STATUS="$BINARY_NAME (no pid file) not running"
fi
RUNNING=0
fi
# functions
start() {
if [ $RUNNING -eq 1 ]
then
echo "$0 $ARG: $BINARY_NAME (pid $PID) already running"
else
action $"Starting $BINARY_NAME: " $FULLPATH -c $CONFIG
touch /var/lock/subsys/$BINARY_NAME
fi
}
stop() {
echo -n $"Shutting down $BINARY_NAME: "
killproc $BINARY_NAME
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$BINARY_NAME
RUNNING=0
}
# logic
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $BINARY_NAME
;;
restart)
stop
sleep 10
start
;;
help|*)
echo $"Usage: $0 {start|stop|status|restart|help}"
cat <<EOF
start - start $BINARY_NAME
stop - stop $BINARY_NAME
status - show current status of $BINARY_NAME
restart - restart $BINARY_NAME if running by sending a SIGHUP or start if not running
help - this screen
EOF
exit 1
;;
esac
exit 0
chmod +x /etc/init.d/zabbix_agentd
cd zabbix_agentd/
mv userparameter_examples.conf userparameter_examples.conf.bak
mv serparameter_mysql.conf serparameter_mysql.conf.bak
[root@vm_110_2_centos conf]# cat /opt/zabbix_agent/conf/zabbix_agentd.conf
PidFile=/opt/zabbix_agent/pids/zabbix_agentd.pid
LogFile=/opt/zabbix_agent/logs/zabbix_agentd.log
LogFileSize=0
StartAgents=0
ServerActive=172.20.50.11
Server=172.20.50.11
Hostname=本机IP地址
Include=/opt/zabbix_agent/conf/zabbix_agentd/*.conf
UnsafeUserParameters=1
/etc/init.d/zabbix_agentd start
chkconfig zabbix_agentd on
1) 建立模板
建立一个主动模式的模板:
克隆一个模板,把全部的类型改成Zabbix agent(Active)主动模式:
克隆模板:Configuration–》Template–》Template OS Linux(选择须要克隆的模板)–》Full clone(最下面)–》Template name:Template OS Linux Active–》Add
把这个模板软链接的模板remove掉,,添加一个新的克隆的类型为主动的。另外,克隆模板成功后,记得修改类型,改成主动模式。
zabbix自动发现主机,能够在ansible安装好zabbix客户端后,服务器能直接发现客户端
1)建立一个规则,名字自定义,ip范围是想要发现的主机范围。时间间隔,每多久发现一次。检查,建议用uptime,这样代表能用zabbix的自带的键值都能监控到,就能够添加该主机了。设置准则就不要用ip地址了,会出错的。而后更新就能够了。
2)接下来是操做,也就是你的动做主要要作什么,我添加了3点,在操做细节那里添加,分别是把发现的主机添加进来,第二点是发主机添加到Base Group组里,第三点是给主机与一个模板关联。最后点更新就能够了。
zabbix客户端搭建好后,自动注册到zabbix服务端,这样能够下降zabbix服务端的负载。
网络发现有什么用?网络发现怎么配置?咱们带着这两个问题开始咱们的网络发现之旅。好比小明有100台服务器,不想一台台主机去添加,能不能让zabbix自动添加主机呢,固然能够,网络发现即是这个功能,固然前提条件是全部服务器都已经安装了agent或者snmp(其实也能够不用,鉴于咱们大部分功能都用agent,因此请安装上agent),server扫描配置好的ip段,自动添加host,自动给host link模板,自动加到主机组里等等。网络发现功能让咱们能更快速的部署zabbix、简化zabbix管理、而且在常常变更的环境里面也不须要花太多的精力,毕竟网络发现也能随时变化。虽然网络发现能干不少事情,可是它没法发现网络拓扑。
zabbix网络发现基于以下信息
ip范围
可用的外部服务(FTP, SSH, WEB, POP3, IMAP, TCP, etc)
来自zabbix agent的信息
来自snmp agent的信息
网络发现由两个阶段组成:discovery和actions
Discovery发现
zabbix按期扫描网络发现规则中的ip范围,每一个规则中都定义了一组须要检测的服务,在这些ip范围内一一扫描
网络发现模块每次检测到service和host(ip)都会生成一个discovery事件,以下是事件
时间 |
条件 |
Service Up |
zabbix检测到可用的service |
Service Down |
zabbix没法检测到service |
Host Up |
某个ip上至少有一个service是up状态 |
Host Down |
全部service都无响应 |
Service Discovered |
一个service首次被发现或者在维护后重新归队 |
Service Lost |
service在up以后又丢失了 |
Host Discovered |
一个host首次被发现或者在维护后重新归队 |
Host Lost |
一个host在up以后又丢失了 |
Actions动做
zabbix全部action都是基于发现事件,例如:
发送通知
添加/移除主机
启用/禁用主机
添加主机到组
从组中移除主机
主机link模板/unlink模板
执行远程脚本命令
建立主机
discovery发现主机事件产生以后,接下来须要执行discovery action,在action中选择添加主机操做、而且将主机加入某个组以及link某个模板等等。更具体操做请关注下一篇文章。那么主机名怎么定义呢?首先监控端(server/proxy)经过ip泛解析主机名(若是失败了,不会从新尝试),若是解析成功了,那么zabbix将会使用这个主机名,不然直接使用ip地址。若是主机名相同怎么办?好比都叫ttlsa-server,那么第一台主机名会定义为ttlsa-server,第二台为ttlsa-server_2,第三台为ttlsa-server_3,以此类推。action配置里的条件包含设备类型、IP、状态、uptime/downtime等等。
添加主机接口
主机接口规则以下:
服务检测 - 例如,成功检测到一个SNMP服务,那么建立snmp接口
若是主机同时UIzabbix agent和snmp请求做出响应,那么会同时建立这两种接口
若是使用agent或者snmp做为惟一性指标,先经过哪一个接口发现主机,那么哪一个接口就做为默认接口,其余的做为附加接口。
若是一开始只响应zabbix agent的检测,那么他只会建立agent接口。若是后面响应了snmp检测,那么他又会增长snmp接口
若是有三台独立的主机A\B\C,一开始使用IP地址来做为惟一标识。能够看到discovery有三条记录。此时咱们修改发现规则,让他们有相同的惟一标识。例如自定义一个keysystem.dis,这个key统一输出值"ttlsa",这样A的接口成了默认的,B和C都变成了附加到A主机上。咱们能够发现一个很明显的变化。在discovery接口中依旧有3条记录,可是"discovered device"这列显示的A主机的接口,”monitored host“这列显示的都是A主机的名称,”Uptime/downtime“这列只有A主机有值,B和C都为空。从这里咱们能看到惟一标识是多重要,若是惟一标识不是惟一,那么有的主机会被认为是同一台
在了解了《网络发现规则》是什么以后,咱们开始配置。首先,咱们须要定义发现规则,用于扫描。步骤以下
第一步
Configuration >>Discovery>>Create rule,编辑网络发现规则
如上配置,zabbix每30秒会扫描10.9.7.88与10.9.32.106-107。会使用key:agent.uanme来判断客户端是否存在,而且以IP地址做为惟一性的标识。
规则属性
属性 |
描述 |
Name |
规则名称,惟一 |
Discovery by proxy |
谁执行当前发现规则: |
IP range |
发现规则中的ip范围,格式以下 |
Delay (in sec) |
规则执行完毕以后,要多久才执行下一次。 |
Checks |
支持的checks: SSH, LDAP, SMTP, FTP, HTTP, HTTPS, POP, NNTP, IMAP, TCP, Telnet, Zabbix agent, SNMPv1 agent, SNMPv2 agent, SNMPv3 agent, ICMP ping. |
Device uniqueness criteria |
设备惟一标识: |
Enabled |
是否启用当前规则 |
第二步
Monitorning>>Discovery,能够看到已经发现了两台主机,ip地址做为他们的惟一标识。确保这个标识的惟一性,不然zabbix会认为他们是一台主机。
第三步
目前仅仅是能够找到主机,并未自动添加到Host中,接下来完成几个步骤:
1. 加入到Linux Servers组
2.Linux link linux模板、windows link windows模板
3. 主机在线时长10分钟的主机添加到HOST中
4. 离线1天以上的主机从Host中移除
建立Action
咱们须要建立两个Action,一份正对windows,一份针对Linux。咱们下面演示一下Linux服务器
Action添加主机
configuration>>action>>Event source(选discover)>>create action
首先,配置名称,以及定义消息内容,这些使用默认的便可
Action
条件配置
操做
回到HOST中,咱们能够发现已经把主机加到列表里了,而且也Linux了模板以及加到了相应的组里
移除主机
configuration>>action>>Event source(选discover)>>create action
首先,配置名称,以及定义消息内容,这些使用默认的便可
移除主机
action
条件
动做
移除主机我就不演示了。
经过使用discovery,zabbix可以自动完成添加到host等等一系列动做,这一切都是基于这个规则来实现的。那么若是离开这个规则,我能完成这一系列动做吗?答案是确定的,请关注下一篇文章《Active agent自动注册》
1. 概述
上一篇内容《zabbix自动发现配置》,大概内容是zabbix server去扫描一个网段,把在线的主机添加到Host列表中(若是是使用zabbix agent去检测,适用于被动模式)。咱们本篇内容与上篇相反,此次是Active agent主动联系zabbix server,最后由zabbix server将这些agent加到host里。对于须要部署特别多服务器的人来讲,这功能至关给力。全部服务器批量装好zabbix agent,server配置好trigger,全部的服务器都配置好了,很是快速。
2. 配置
2.1配置文件修改
指定server ip
1 2 |
# cat /usr/local/zabbix-2.2.2/etc/zabbix_agentd.conf | grep -E ^ServerActive ServerActive=66.175.222.232 |
修改Hostname
1 2 |
# cat /usr/local/zabbix-2.2.1/etc/zabbix_agentd.conf | grep -E ^Hostname Hostname=auto-reg-for-ttlsa-01 |
关于主机名:若是zabbix_agentd.conf配置有定义Hostname,那么zabbix会使用这个Hostname命名,不然agent的主机名(hostname得来的)
修改metadataitem
1 2 |
cat /usr/local/zabbix-2.2.1/etc/zabbix_agentd.conf | grep HostMetadataItem= HostMetadataItem=system.uname |
2.2 配置action
步骤:configuration>>action>>Event source(选择Auto registration)>>Create Action,咱们按以下步骤来定义个action
2.2.1 action选项卡
定义Action名称,以及发送消息的主题和内容,使用默认的就好了
2.2.2 Conditions选项卡
Host metadata包含Linux字符的主机将会触发 2.2.3的操做,什么是metadata,文章的下半段会专门讲解。
2.2.3 operations选项卡
知足条件的active host发起请求,server会完成三个动做:
把agent加到host列表
把agent加入linux servers组
agent主机link模板Template OS linux
3. 查看结果
查看/tmp/zabbix_server.log咱们能看到以下内容:
1 |
16585:20150203:161110.910 enabling Zabbix agent checks on host "auto-reg-for-ttlsa-01": host became available |
看到如上内容,代表host增长成功,此时此刻的host列表以下:
4. HostMetadataItem与HostMetadata
做用:用于标示主机,经过该符号可以把主机区别开来。好比咱们常常用它来区分linux与windows系统,这样才能分别给他们设置组与template等等
4.1 HostMetadataItem用法
1 |
HostMetadataItem=system.uname |
它的值来之key
4.2 HostMetadata用法
1 |
HostMetadata: Linux hehehehehehehehe xxxxx |
他的值是直接定义的
经过使用各式各样的metadata咱们能够用于区分各个主机,来达到咱们各类需求。
本篇文章是zabbix发现的最后一篇,回顾一下前面几篇文章
《zabbix发现介绍》整个功能的介绍
《zabbix发现配置》server经过配置好的规则,自动添加host、group、template
《zabbix Active agent自动注册》与discovery相反,功能基本相同,active联系server,server自动添加host、group、template
以上目的都是发现host、添加host,本文的low-level discovery更底层点,用于发现item、trigger、graph等等。咱们最经常使用如:filesystem(如/、/home、/proc、C:、D:等),network(eth0,eth1等)
众多服务器,不免系统以及分区会有所不一样。通常存在linux和windows两种系统,linux下分区有/、/data、/proc等等,windows有C:D:E:等,A服务器有/data分区,B服务器可能有/site分区。他有什么分区,我便监控什么分区,这就是low-level discovery的功能。
2.1 建立模板
建立模板A_Template_For_Discovery,.....过程省略....
2.2 配置discovery规则
configuration>>templates>>找到模板“A_Template_For_Discovery”>>Discovery(0)>>Create discovery rule
属性说明:
Keep lost resources period(in days):数据保留天数,默认30天
Fileter:Macro为{#FSNAME},key “vfs.fs.discovery”返回json数据列表,里面内容为{#FSNAME}做为key,/、/data、C:等等做为value。regext可使用表达式,例如"^/data|/C:",若是想经过{#FSTYPE}来过滤,那么Macro写{#FSTYPE},regexp写^(ext2|ext3|swap)$,或者引入zabbix中定义好的的正则表达式,@表达式名称。关于《zabbix正则表达式》请继续关注ttlsa。
2.3 建立Item prototypes
其实就是一个建立一个item,configuration>>templates>>找到模板“A_Template_For_Discovery”>>Discovery(1)>>find file system>>Item prototypes (0)>>create Item prototypes
2.4 建立Trigger
当剩余量小于20%触发warnning
configuration>>templates>>找到模板“A_Template_For_Discovery”>>Discovery(1)>>find file system>>Trigger prototypes (0)>>Create trigger prototypes
与普通的trigger区别在{#FSNAME}
2.4 建立graph
绘制简单图表
configuration>>templates>>找到模板“A_Template_For_Discovery”>>Discovery(1)>>find file system>>Graph prototypes (0)>>Create Graph prototypes
系统已经内建了文件系统的{#FSNAME},网络的{#IFNAME},由于业务的特殊性,咱们如何定义咱们本身须要的名称呢?
编写脚本,脚本输出json数据,包含key和value
脚本加入zabbix_agentd.conf UserParameter
重启zabbix_agentd
使用定义好的名称配置low-level discovery
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/usr/bin/perl
$first = 1; print "{\n"; print "\t\"data\":[\n\n";
for (`cat /proc/mounts`) { ($fsname, $fstype) = m/\S+ (\S+) (\S+)/; $fsname =~ s!/!\\/!g;
print "\t,\n" if not $first; $first = 0;
print "\t{\n"; print "\t\t\"{#FSNAME}\":\"$fsname\",\n"; print "\t\t\"{#FSTYPE}\":\"$fstype\"\n"; print "\t}\n"; }
print "\n\t]\n"; print "}\n"; |
执行后获得以下数据,是json格式
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
{ "data":[
{ "{#FSNAME}":"\/", "{#FSTYPE}":"rootfs" } , { "{#FSNAME}":"\/proc", "{#FSTYPE}":"proc" } , { "{#FSNAME}":"\/sys", "{#FSTYPE}":"sysfs" } , { "{#FSNAME}":"\/dev", "{#FSTYPE}":"devtmpfs" } , { "{#FSNAME}":"\/dev\/pts", "{#FSTYPE}":"devpts" } , { "{#FSNAME}":"\/dev\/shm", "{#FSTYPE}":"tmpfs" } , { "{#FSNAME}":"\/", "{#FSTYPE}":"ext4" } , { "{#FSNAME}":"\/proc\/bus\/usb", "{#FSTYPE}":"usbfs" } , { "{#FSNAME}":"\/proc\/xen", "{#FSTYPE}":"xenfs" } , { "{#FSNAME}":"\/proc\/sys\/fs\/binfmt_misc", "{#FSTYPE}":"binfmt_misc" } ] } |
更多参考
http://blog.51cto.com/dyc2005/2178939
https://www.zabbix.com/documentation/3.4/zh/manual/discovery/low_level_discovery
因为工做关系好久没有更新博客了,本文基于生产配置,是zabbix系列的另外一补充;本次要讲的是zabbix Low-level discovery简称(LLD),咱们在配置items(监控项)时,有时须要对相似的Items进行添加,换句话说,多台机器上的某一监控具备相似的items,如系统开放的服务,再如磁盘分区,网卡名称等,后两种zabbix已经自带,今天咱们以自定义监控每一个系统开放的服务来讲明 LLD的使用逻辑;
和普通items获取不一样的是,LLD 脚本在获取返回时,格式必须是json形式;
和自动发现不一样的是,自动发现经过网络发现设备;而LLD是针对主机或模板中用来自动发现定义的items和添加触发器和图形的;
本次测试操做基于zabbix3.4.4 本文中的相关脚本和模板下载
1、获取开放的服务
任何获取items都要基于程序脚本,LLD发现也不例外,如下是获取系统开放服务脚本discovery_services.sh
# cat /usr/local/zabbix-3.4.4/scripts/discovery_services.sh
#!/bin/bash
proarray=($(find /var/run/ -name "*.pid" 2> /dev/null||egrep -v '(rpc|php_daemon|haldaemon|irqbalance|console-kit-daemon)' |awk -F'/' '{print $NF}'|awk -F'.' '{print $1}')) # 排除不监控的服务
length=${#proarray[@]}
printf "{\n"
printf '\t'"\"data\":["
printf "\t"
printf '\n\t\t{'
printf "\"{#PRO_NAME}\":\"iptables\"}" #必需要添加的iptables
printf ","
for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#PRO_NAME}\":\"${proarray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
说明:以上脚本基于 /var/run下的pid进行监控开放的服务,因此若是是公司运维人员自已经开发的管理脚本服务,pid文件请按默认的放到/var/run下 ,这样就不会漏掉,再说大部分系统或知名程序都遵照这一规定,你为何不能遵照呢?
在一台监控机器上执行以下:
记住这里的{#PRO_NAME} 这个就是自动发现规则中的宏变量;另外这个脚本返回的是json格式;
2、检查系统状态
对获取的服务进行检查
# cat /usr/local/zabbix-3.4.4/scripts/program_status.sh
#!/bin/bash
procjetName="${1:-NULL}"
LOCK_PATH="/var/lock/subsys"
RUN_PATH="/var/run"
ret_ok=1
ret_critical=3
ret_unknown=4
if [[ ${procjetName} == "NULL" ]] ; then
echo ${ret_unknown}
fi
if [ -f "${LOCK_PATH}/${procjetName}" ] || [ -f "${RUN_PATH}/${procjetName}.pid" ] || [ -f "${RUN_PATH}/${procjetName}/${procjetName}.pid" ] ; then
echo ${ret_ok}
else
echo ${ret_critical}
fi
以上脚本检查若是服务存在则返回1 不然返回 3 ,若是服务不存在则返回4
检查的原则就是在/var/run/下是否有和服务同名的pid文件存在,或/var/run/服务/服务.pid存在,对于像iptabls这种则检查 /var/run/subsys/服务.pid 三种状况知足一种便可;
运行效果以下:
对iptables服务检查 返回 1说明 iptables正常
关闭iptables 再次进行检查:
而对httpd服务进行检查,因为本机根本没有httpd服务,因此返回的是3
3、定义items
# cat /usr/local/zabbix-3.4.4/etc/zabbix_agentd.conf.d/LLD_Services.conf
UserParameter=services.scan,/bin/bash /usr/local/zabbix-3.4.4/scripts/discovery_services.sh
UserParameter=services.status[*],/bin/bash /usr/local/zabbix-3.4.4/scripts/program_status.sh $1
这里须要在web页上添加,和添加items很相似;
1、建立模板
进入web端;单击 配置--模板--配置模板--建立模板-- 这里模板名叫 “Ickey Services status” --建立应用集("Services_status") 如图:
2、建立自动发现规则(LLD)
如上图点自动发现规则在模板中建立 自动发现规则 -- 建立自动发现规则 如图:
这里须要注意的是 键值: servies.scan 即item 是在2.3小节的配置文件中定义的,不可乱写
再配置上图中的过滤器 配置变量(宏)如图:
此处的{#PRO_NAME}就是上面2.1节中脚本返回的变量; -- 保存
3、建立 配置 监控项原型
如图:
填写名称,等相关信息如图:
此处须要注意的$1 和键值 是 2.3 定义items中的$1 也便是服务名; 保存;
4、建立触发器类型
如图:
说明:触发器名称:便是 “服务名” is down
表达式的意思就是 当发现某服务返回的值不是 1时发出警告
保存 这个 模板中的自动发现规则 就完成啦
可是这里存在一个问题,当咱们机器上yum工具时,会在/var/run下生成yum.pid这样就会侦测到一个新服务,yum,但yum执行完后yum.pid会被删除,此时触发器就会报yum is down,为了解决这类问题,咱们能够修改触发器报警策略,修改为以下:
意思就是,最后状态不是1 同时一小时前的状态是1;这样那此在/var/run生成临时pid的程序就不会被触发;
接下来就是在主机上应用模板,能够批量添加;这里就忽略了;
5、测试
看下效果图:
能够看到此主机应用了模板后已经能够拿到监控项数据了,咱们来关闭这台主机的防火墙服务试试,看看触发器是否正常;
如图:
再把iptables服务启动
能够看到服务关闭和启动能够报警与恢复;至此自动发现服务已经能够正常使用啦!经过这个实例,但愿你们能理解自动发现规则的原理逻辑!本文基于生产故有些截图带有涂;主要用于备忘与分享,若有错误之处欢迎留言!
中文显示乱码 --> Windows 系统获取字体 --> 上传到zabbix服务器 --> 替换字体 --> 问题解决
windows --> 控制面板 --> 字体 --> simkai.ttf (这个字体看着顺眼一些)-->上传到zabbix_server 中
cd /usr/share/fonts/dejavu; mv DejaVuSans.ttf DejaVuSans.ttf.bak # 这个字体是zabbix正在使用的字体
cp /root/ simkai.ttf /usr/share/fonts/dejavu/DejaVuSans.ttf
使用playbook线上环境