Zabbix:监控系统知识整理及优化


监控系统介绍

(1)Zabbix 是一个自由开放源代码的产品,用户可以对源代码进行任意修改和二次开发。Zabbix 采用GNU General Public License (GPL) version 2 开源协议。

(2)监控系统的数据采集可以分为两种:主动监控(客户端主动上报数据到服务器端)和被动监控(服务器端到客户端采集数据),被动模式对服务器’的开销较大,适合小规模的监控环境: 主动模式对服务器的开销较小,适合大规模的监控环境。在监控软件中,开源的解决方案有流量监控( MRTG 、Cacti 、SmokePing 、Graphite 等)和性能告警( Nagios 、Zabbix 、Zenoss Core 、Ganglia、OpenTSDB等〉可供选择,井且每种软件都有自己的特点和功能。

(3)zabbix报警流程

首先Item(监控项)收集数据,收集到数据后如果它和一个Trigger(触发器)绑定了(有关联),那么会检查Trigger(触发器)是否变为“异常”状态,然后生成一个事件,最后会检查action中的动作,如果符合触发条件,那么就会执行action动作(例如邮件报警)。

安装

  • 下载

可以到https://www.zabbix.com/cn/download获取安装包及相关的安装教程,有更为简单的在线安装方法。这里只介绍源码编译安装方式。

  • 解压编译

(1)使用源码编译时,需要指定安装的是zabbix server还是zabbix代理,或是zabbix agent,还需要指定使用的数据库类型。此外zabbix还支持很多编译配置,具体可以用./configure --help来查看。

./configure --enable-server --with-mysql --enable-agent 
--with-net-snmp --with-libcurl --with-libxml2 --with-openipmi 
--with-unixodbc --prefix=/usr/local/zabbix

(2)出现这个表示编译成功

#注意:若出现如下图1-1和1-2中的提示“no package *** found”或者“***  no found”,请根据提示进行相关依赖软件安装:

图1-1
图1-2

 

  • 安装并启动服务

(1)安装执行:

make install

(2)修改配置文件

(3)启动:

/usr/local/zabbix/sbin/zabbix_server
  • 配置数据库

(1)安装数据库

(2)创建库及数据库登录账号密码

(3)导入初始化的表

在编译目录下的database目录中有对应各类型数据库的目录,在这些目录底下有三个数据库脚本。这里以mysql数据库为例,导入以下三个脚本。如果是使用zabbix proxy,只需要导入schema.sql就行了。

 

  • 安装zabbix web前端

(1)首先安装PHP和httpd

yum install php
yum install httpd

(2)将zabbix安装目录中的frontend/php目录下的内容复制到/var/www/html网站根目录下。之后启动http服务即可看到界面,根据界面向导进行下一步操作即可。

cp -r frontends/php/* /var/www/html/

#注意:可能会出现如下图php错误提示,这时候我们需要编辑/etc/php.ini配置文件参数或安装相关依赖软件,把图中关于PHP提示中,每一个不符合的修改掉,然后重启httpd即可。

可能还需要安装如下
yum install php-mysql
yum install php-bcmath
yum install php-mbstring
yum install php-gd
yum install php-xml

当 所有错误提示消除后,就可以继续安装了

  • 完成安装

       在web界面输入配置后,下载zabbix前端的配置文件,这个配置文件是根据前端输入的数据库参数、server参数生成的。下载后放在提示位置即可。

       完成安装后,默认的用户名密码是Admin/zabbix

配置文件详解

  • zabbix_server.conf

 

  • zabbix_agent.conf

Server :被动模式,允许哪台服务器连接Agent ;

ServerActive : 主动模式,向哪台服务器传送数据;

#一个Agent 是可以同时向多个服务器端发送数据的, 多个IP 用逗号分隔;

Hostname:这里配置的名称要和server端web界面中添加的主机名一致;

AllowRoot=0|1:是否允许agent以root用户身份运行;

User=username:配置以什么用户身份运行进程。若以root用户身份运行,需要先启用AllowRoot项;

说明部分

  • 服务端命令

(1)Zabbix-Get 是Zabbix 中的一个程序,用于Zabbix-Server 到Zabbix-Agent 的数据获取,通常可以用来检测验证Agent 的配置或配置的item项等是否正确。zabbix_get 命令可以很方便地知道key 是否能正常获取到数据。不能获取Simple Check、JDC 、SNMP 等其他监控方式的Key 类型的数据。

zabbix_get [-hV] -s <host name or IP> [-p <port>) [-I <IP address>) ] -k <key>

-s:远程Zabbix-Agent 的IP 地址或者是主机名。

-p:远程Zabbix-Agent 的端口。

-I: 本机出去的IP地址,用于一台机器中有多个网卡的情况。

-k: 获取远程Zabbix-Agent 数据所使用的Key 。

示例:

zabbix_get -s 192.168.0.240 -k system.uname

zabbix_get -s 192 .168. 0. 240 -p 10050 -I 127. 0. 0 .1 -k system.uname

(2)宏

也可以理解为变量,可以用在item、trigger,动作等地方。

3>SNMP监控

SNMP 协议在执行前四种操作时,使用UDP 协议,采用161 端口发送报文:执行Trap 操作时,设备使用UDP 协议,采用162 端口发送报文。

主要功能说明

  • 添加主机

配置==》主机==》创建主机==》配置主机名称、IP及关联模板

 

  • Template(模板)、Item(监控项)和trigger(触发器)之间的关系

Item(监控项):用于从被监控客户端中获取监控数据的一系列命令;

trigger(触发器):根据Item(监控项)获取到的值进行判断,并产生一个结果/事件(例如根据监控到值为0,判断该项异常);

Template(模板):就是包含一些Item(监控项)和trigger(触发器)的集合,不仅如此,还有根据Item(监控项)生成的图形等;

  • zabbix重要性能指标

VPS:意为每秒的监控数据,它可以比较直观地衡量zabbix承受的压力有多少。

队列(Queue):队列的相关数据反应zabbix server监控性能情况的重要指标。如下图,绿色背景的指标表示数据在正常范围之内,当有Item延迟时,就会显示其他颜色。有几个延迟是正常的,但是当有大量Item延迟时,需要检查zabbix server或zabbix agent。

  • 查看最新监控数据

在“最新数据”界面里,可以查看到某主机的最新的监控项(Item)数据,旁边的“更改”列的数据,其中的加号减号表示这次取到的数据相对于上一次的变化。

  • 批量更新主机配置

mass update,意为“批量更新”功能可以修改多台主机的群组、代理、启用|禁用、模板等

  • 主动模式被动模式区别

被动模式:server或者proxy向agent请求数据,然后agent将数据发送回server或proxy。

主动模式:agent会先从server获取需要发送的item列表,然后根据item去获取数据,再发送给server。

我们在配置监控项(Item)时,也可以指定监控类型(Type)。

  •  Agent配置多台server端同时监控

当需要agent客户端允许多台zabbix server同时监控,只要在zabbix_agent.conf配置文件中修改server/serveractive项,多个IP用逗号隔开即可。

  • 取消模板链接的区别

unlink(取消链接):移除template和主机的关联,但不会移除template上item与主机的关联;

unlink and clear(取消链接并清除):移除template、item与主机的关联;

  • 在监控项Item中引用变量

Item的名称中可以使用$1、$2等参数,$1指的是下面key里面括号中的第一个参数,如下图

  • 通过SSH远程执行命令/脚本

配置监控项(Item)时,选择“SSH客户端”类型,编写相应的命令,最好配置一定的返回值,比如配置命令执行结果的返回值,否则无法查看监控项数据,也就无法知道命令执行成功与否。

效果:

例1:

例2:

#注意,在配置有多条命令时,自己把握是否需要输出值,因为脚本中的命令输出结果也会做为数据返回给监控项,如下图

  • 值映射

接上一部分内容,如果我们想让监控项收集到的值(0或1)显示得更为人性化,比如返回0时对应显示“找到文件”,这时可以自定义值映射,所谓“值映射”就是将监控项监控到的返回值进行“数字<-->字符串”之间关联对应,提高数据可读性。

zabbix server中一些自带的“值映射”:

  • 报警信息认领处理

当公司有多个运维人员时,并且这时候zabbix平台发送报警异常,那么谁来处理呢?又怎么知道谁在处理呢?

可以借助zabbix报警确认功能,来查看异常处理认领情况。也可以借助该功能设置备注信息,方便日后追溯,例如需要晚上维护的时候再处理这个异常。

确认后,状态变为“是”,鼠标悬停可查看详细信息

  • 监控报警频率设置

        有没有想过,当人员处于下班、双休日或节假日时,这时候出现很多服务器或网络波动异常,但是过一会就自动恢复了,这期间会发送很多报警信息,假设有漏网之鱼,其中有一台服务器未能自动恢复,这时候运维人员可能会因为众多的报警信息覆盖而忽略处理,这是很严重的问题。所以需要设置假如在半小时内报警信息还未恢复,就再次发送报警消息提醒。

例1:如下图,当出现异常报警时,按步骤顺序执行,先发送两封邮件给test1用户对应的邮箱,间隔60秒,然后继续执行3~5步骤,发送三封邮件给admin用户对应的邮箱,间隔60秒,这样报警动作就完成了。

例2:当有两个操作要同时进行时,如下图配置,会同时发送同一步骤的邮件,如图二

#注意:当有重复的步骤时,时间间隔会以时间最少的为准,如下

  • 监控Linux重要文件更改

zabbix server有个自定义的监控文件变化或更改的键值(vfs.file.cksum),如下图,

  • 监控客户端时间 

利用zabbix自带的key键“system.localtime”,可以实现监控客户端时间同步问题。有时候时间问题是很重要的,严重的会影响到生产。

system.localtime获取到的时间可以按两种格式来显示,官网解释如下:

#配置示例

配置监控项==》配置触发器

  • Trigger依赖或报警依赖关系配置

       有时候,一个HOST的状态是依赖于其他的host的。比如一个交换机和它后面的一台服务器,当这台交换机出问题的时候,这台服务器自然而然的也是不可用的状态。如果对这两个host都配置了Trigger,那么当交换机出问题时,就会出现两个host的报警,但真实情况是交换机是问题源头。

       因为这种依赖性的存在,zabbix在Trigger上设计了依赖关系,配置依赖关系后,只会收到源头的报警,而不是整个相关链路上的报警。如果一个交换机下接着50台服务器,当交换机出现问题时,要是没有使用Trigger依赖,将会收到51个报警,这会有碍于运维工程师排查原因。

       在zabbix中,host之间是不能直接有依赖关系的,只能在Trigger之间有依赖关系,一个Trigger可以有多个Trigger依赖于它。

       例:吧交换机的hostname定义为switch-a,后面的两台服务器的hostname定义为host-a、host-b,然后在host-a和host-b的Trigger上设置依赖于switch-a的Trigger即可。这样只有在switch-a的Trigger变为problem状态时,host-a和host-b的响应Trigger才会变为problem,并且host-a和host-b不会触发任何action(动作)。

#依赖的配置如下图:

  • 聚合图形(screen)

传统图形展示只是单一项,聚合图形就是在单一图形的基础上将多个图形放在一起展示,效果如下图。可用于幻灯片展示。

对应配置: 

(1)创建==》编辑==》添加图形==》展示查看

 

 

  • 幻灯片展示

当屏幕较小,又需要将多个图形进行屏幕展示,可以通过配置多个聚合图形的幻灯片,进行间隔显示,例如隔10s显示一幅聚合图形,一次顺序显示。

配置:

首先配置多个聚合图形==》创建/编辑幻灯片==》选取聚合图形

  • 自定义监控项/key键

对于自定义监控点,只要提供一个可以输出值的脚本即可。假设我这里有一个test-tomcat.sh脚本,用于返回tomcat服务是否正常运行情况,返回值是0(故障)或1(正常)。步骤如下:

(1)假设脚本在/test/下,需要在“zabbix_agentd.conf”中添加如下配置。

格式为UserParameter=key_name[*],command 

UserParameter=test_tomcat,sh /test/test-tomcat.sh
#第一段的test_tomcat为key名称,这里定义后,可在server端引用。逗号后面为执行的命令。

 示例脚本内容如下:

#!/bin/bash
#
netstat -tunlp|grep 8080 &>/dev/null && ps -ef|grep tomcat &>/dev/null
if [ $? == 0 ];then
  echo 1      #返回值
else
  echo 0      #返回值
fi

#注意:脚本需要添加适当的权限才能执行。需要确认zabbix进程的所属用户/组是否和脚本的所属用户/组一样,否则脚本执行会有权限问题。

(2)重启agent服务后,进行测试

[root@localhost ~]#zabbix_get -s 127.0.0.1 -k test_tomcat
1               #返回的值

(3)在web界面添加监控项(Item)

(4)添加触发器(trigger)

(5)测试。当获取到1值时,tomcat服务状态正常;当获取到0值时,表示tomcat服务异常

#补充:window的自定义监控项也同上,这里简单举例:

这个例子是用来监控专线或VPN连接状态的,我是通ping来检测的

UserParameter=vpn-ping,C:\zabbix\script\VPN-ping.bat
#VPN-ping.bat内容如下
@echo off
ping -n 2 10.128.0.21 |findstr "TTL" >nul
if %errorlevel%==0 (echo 1) else (echo 0)

(6)扩展知识

1.当脚本需要传入参数时,比如监控远程服务器,需要将IP地址传入。这时格式是这样的,UserParameter=key[*],command,其中的*号意思是方括号中可以有任意多的参数,每个参数由逗号分隔,分别是$1,$2......,它们表示脚本命令行接收到的参数。例如UserParameter=ping[*],echo $1,UserParameter=wc[*],grep -c $2 $1。

2.可以将配置写入到某个文件中,再在zabbix_agentd.conf中用“Include”将文件包括进来。

3.参考zabbix自带的监控项(Item)的写法。

  • Windows服务监控

基于Windows服务发现,你可以创建一个监控项原型,如”service.info[{#SERVICE.NAME},<param>]“),其中param接受以下值:statedisplaynamepathuserstartup 或 description。例如,要获取服务的显示名称,您应该使用”service.info[{#SERVICE.NAME},displayname]“项目。如果没有指定param值(”service.info[{#SERVICE.NAME}]“),则使用默认参param态。

例:

1#自定义服务监控项。服务名称通过“服务”面板查看。

2#创建触发器

3#查看数据并测试

 

  • 分布式监控

zabbix proxy 可以代替 zabbix server 收集性能和可用性数据,然后把数据汇报给 zabbix server,并且在一定程度上分担了zabbix server 的压力。

zabbix proxy 仅仅需要一条 tcp 连接到 zabbix server,所以防火墙上仅仅需要加上一条规则即可。

zabbix proxy 数据库必须和 server 分开,否则数据会被破坏。

proxy 收集到数据之后,首先将数据缓存在本地,然后在一定得时间之后传递给 zabbix server,这样就不会因为服务器的任何临时通信问题而丢失数据。这个时间由 proxy配置文件中参数 ProxyLocalBuffer 和ProxyOfflineBuffer 决定。

zabbix proxy 是一个数据收集器,它不计算触发器、不处理事件、不发送报警。

  • 计算型监控型配置

例子:

计算eth0上的总带宽。

两个功能总和:

last("net.if.in[eth0,bytes]")+last("net.if.out[eth0,bytes]")

  • zabbix问题汇总

1> zabbix监控出现 first network error 错误

公司的zabbix server出现大量的不可达报警,但是agent机器和网络是正常的。查看server或代理服务器的日志看到如下报错:

解决:百度了一下,说是由于window机器超过497天未关闭时,会有大量的TIME_WAIT状态连接未释放。解决方法是打补丁或重启机器

#本博客内容大部分为<Zabbix监控系统深度实践>书籍的读书笔记及官网文档内容摘要。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值