今日课程推荐

企业级运维监控平台Zabbix深度实践【2021年录制基于zabbix5】:https://edu.51cto.com/course/27633.html

开篇

有人说zabbix难点在配置,面对很多的配置项,不知道所以然了,其实我觉得这是没掌握好zabbix的学习方法,要掌握了zabbix的学习思路,可以在一个小时内快速掌握zabbix的各种配置,下面我将重点讲述下如何快速、高效的对zabbix进行配置,已完成zabbix灵活的监控功能。

zabbix的配置全部都在zabbix web上完成,这点我非常喜欢,登录到zabbix web平台后,默认是英文界面,不过可以切换为中文界面,选择导航栏中的“Administration”选项,然后选择二级标签“Users”选项,在“Users”选项下列出了当前zabbix的用户信息,默认只有一个管理员用户Admin可用于登录zabbix web,点开Admin用户,进入属性设置界面,然后在“Language”选项中找到“Chinese(zh_CN)”选中即可切换到中文界面,刷新浏览器即可看到效果。


下面就以zabbix的中文界面为主进行介绍,所有涉及到的截图和内容描述都以zabbix中文界面显示作为标准。

1.1、模板的管理与使用

模板是zabbix的核心,因为模板集成了所有要监控的内容以及展示的图形等等,zabbix的安装部署完成后,自带了很多模板(网络设备模板、操作系统模板、常见应用软件模板),这些模板能够满足我们80%左右的应用需要,所以一般情况下不需要我们单独创建模板了。

点击web上面的“配置”选项,然后选择“模板”,就可以看到很多默认的模板,而模板是有多个内置项目组成的,基本的内置项目有应用集、监控项、触发器、图形、聚合图形、自动发现、Web监测、链接的模板等这8个部分组成。在这8个部分中,监控项、触发器、图形、自动发现这4个部分是重点,也是难点。下面也会重点介绍着四个部分的具体实现过程。

在zabbix自带的模板中,大部分是可以直接拿来使用的,这里我们不需要对每个模板都进行了解,只需要对常用的一些模板重点掌握就行了。

1.2、创建应用集

点击web上面的“配置”选项,然后选择“模板”,任意选择一个模块,或者新建一个模板,在模板下,可以看到有应用集选项。进入应用集后,可以看到已有的应用集,也可以创建新的应用集。


应用集的创建很简单,它其实是一个模板中,针对一类监控项的集合,例如要对CPU的属性进行监控,那么可以创建一个针对CPU的应用集,这个应用集下可以创建针对CPU的多个监控项。


应用集的出现主要是便于对监控项进行分类和管理,在有多个监控项,多种监控类型需要监控的情况下,就需要创建应用集。

这里以“Template OS Linux”模板为例,进入此模板后,点开应用集,可以发现已经存在多个应用集,如下图所示:

如果有新的监控项需要加入,还可以点击右上角的“创建应用集”创建一个新的应用集。

1.3、创建监控项

点击web上面的“配置”选项,然后选择“模板”,任意选择一个模块,或者新建一个模板,在模板下,可以看到有监控项选项。

监控项是zabbix监控的基础,默认的模板下都存在了很多监控项,这里以“Template OS Linux”模板为例,进入此模板后,点开监控项,可以发现已经存在多个监控项,如下图所示:

从图中可以看出,默认的监控项的内容,每个监控项都对应一个键值,就是具体要监控的内容,键值的写法是有统一规范的,zabbix针对不同监控项自带了很多键值,用户也可以自定义键值,此外,每个监控项还可以添加对应的触发器,也就是说这个监控项如果需要告警的话,就可以添加一个触发器,触发器专门用来触发告警。当然不是说每个监控项一定要有一个触发器,需要根据监控项的内容而定。

点击右上角的“创建监控项”,开始创建一个自定义监控项,如下图所示:


在这个界面中,重点是红框标识出来的几个地方,首先,“名称”是创建的监控项的名称,自定义一个即可,但是要能表达其监控项的含义,第二个“类型”是设置此监控项通过什么方式进行监控,zabbix可选的监控类型有很多,常用的有zabbix客户端、zabbix客户端(主动式)、简单检查、SNMP客户端、zabbix采集器等类型,zabbix客户端监控也称为zabbix客户端(被动式)监控,就是通过在要监控的机器上安装zabbix agent,然后zabbix server主动去agent上抓取数据来实现的监控,这是最常用的监控类型。而zabbix客户端(主动式)监控也需要在被监控的机器上安装zabbix agent,只不过zabbix agent会主动汇报数据到zabbix server,这是与zabbix客户端(被动式)监控不同的地方。


接着下来就是对“键值”的设置,这是个难点,键值可以使用zabbix默认自带的,也可以自定义自己的键值,zabbix自带了很多键值,可满足我们90%的需求,比如这里我们想对服务器上某个端口的状态做监控,就可以使用“net.tcp.service.perf[service,

可以看到,zabbix自带的键值根据监控类型的不同,也分了不同的监控键值种类,每个键值的含义也都做了很详细的描述,我们可以根据需要的监控内容,选择对应的键值即可。

“net.tcp.service.perf[service,

这个键值中,“net.tcp.service.perf”部分是键值的名称,后面中括号中的内容是键值的监控选项,每个选项含义如下:

  •  service:表示服务名,包含ssh、ntp、 ldap、 smtp、ftp、http、pop、 nntp、imap、 tcp、 https、telnet

  • ip:表示IP地址,默认是127.0.0.1,可留空。

  •  port:表示端口,默认情况为每个服务对应的标准端口,例如ssh服务是22端口等。

比如要监控某个或某批服务器80端口的运行状态,可以设置如下键值:

net.tcp.service.perf[http,,80]

此键值返回的信息类型是浮点型的,因此,在“信息类型”中要选择“浮点数”。在创建监控项中,还有一个“更新间隔”,这个是用来设置多久去更新一次监控数据,可根据对监控项灵敏度的需求来设定,默认是30秒更新一次。

在创建监控项的最后,还有一个应用集的选择,也就是将这个监控项放到哪个监控分类中,可以选择已存在的应用集,也可以添加一个新的应用集。

所有设置完成后,最后点击“添加”即可完成一个监控项的添加。

监控项可以添加到一个已经存在的模板中,也可以在一个新创建的模板中添加监控项,还可以在一个主机下创建监控项,推荐的做法是新建一个模板,然后在此模板下添加需要的应用集、监控项,然后在后面添加主机的时候,将这个创建的模板链接到主机下即可。不推荐在主机下创建监控项的原因是,如果有多个主机,每个主机都有相同的监控内容,那么就需要在每个主机下都创建相同的监控项。

因此,构建zabbix监控,推荐的做法是,首先创建一个模板,然后在此模板下创建需要的监控项、触发器等内容,最后在添加主机时直接将此模板链接到每个主机下即可,这样,每个主机就自动链接上了模板中的所有监控项和触发器。

1.4、创建触发器

触发器是用于故障告警的一个设置,将一个监控项添加触发器后,此监控项如果出现问题,就会出激活触发器,然后触发器将自动连接告警动作,最后触发告警。


触发器同样也推荐在模板中进行创建,点击web上面的“配置”选项,然后选择“模板”,任意选择一个模块,或者新建一个模板,在模板下,可以看到有触发器选项。


点击触发器,可以看到有默认存在的触发器,如下图所示:

从图中可以看到,有触发器的严重级别,触发器名称,触发器表达式等几个小选项,这里面难点是触发器表达式的编写,要学会写触发器表达式,首先需要了解表达式中常用的一些函数及其含义。


在上图我们看到,有diff、avg、last、nodata等这些标识,这就是触发器表达式中的函数,下面就介绍下常用的一些触发器表达式函数及其含义。


1、diff

参数:不需要参数
支持值类型:float,int,str,text,log
作用:返回值为1表示最近的值与之前的值不同,即值发生变化,0表示无变化。


2、last

参数:#num
支持值类型:float,int,str,text,log
作用:获取最近的值,“#num”表示最近第N个值,请注意当前的#num和其他一些函数的#num的意思是不同的,例如:
last(0)或last()等价于last(#1),表示获取最新的值,last(#3)表示最近第3个值(并不是最近的三个值),注意,last函数使用不同的参数将会得到不同的值,#2表示倒数第二新的数据。例入从老到最新值为1,2,3,4,5,6,7,8,9,10,last(#2)得到的值为9,last(#9)得到的值为2。
另外,last函数必须包含参数。


3、avg

参数:秒或#num
支持类型:float,int
作用:返回一段时间的平均值
例如,avg(5)表示最后5秒的平均值,avg(#5)表示最近5次得到值的平均值,avg(3600,86400)表示一天前的一个小时的平均值。
如果仅有一个参数,表示指定时间的平均值,从现在开始算起,如果有第二个参数,表示漂移,从第二个参数前开始算时间,#n表示最近n次的值。


4、change

参数:无需参数
支持类型:float,int,str,text,log
作用:返回最近获得值与之前获得值的差值,返回字符串0表示相等,1表示不同。
例如,change(0)>n表示最近得到的值与上一个值的差值大于n,其中,0表示忽略参数。


5、nodata

参数:秒
支持值类型:any
作业:探测是否能接收到数据,当返回值为1表示指定的间隔(间隔不应小于30秒)没有接收到数据,0表示其正常接收数据。


在了解了触发器表达式函数的含义之后,我们就可以创建和编写触发器表达式了,在触发器页面中,添加右上角的“创建触发器”即可进入触发器创建页面了,如下图所示:

这个就是创建触发器的页面,首先输入触发器的名称,然后标记触发器的严重性,可以有6个等级选择,这里选择一般严重,接下来就是表达式的编写了,点击表达式项后面的“添加”按钮,即可开始构建表达式了,在构建表达式页面,首先要选择给哪个监控项添加触发器,在“条件”界面下点击后面的“选择”按钮,即可打开已经添加好的所有监控项,这里就选择刚刚添加好的“httpd server 80 status”这个监控项,接着,开始选择触发器表达式的条件,也就是上面介绍过的触发器表达式函数,点击“功能”下拉菜单,可以发现很多触发器表达式函数,那么如何选择函数呢,当然是根据这个监控项的含义和监控返回值。


“httpd server 80 status”这个监控项的返回值是浮点数,当服务故障时返回0,当监控的服务正常时返回连接服务所花费的秒数。因此,我们就将返回0作为一个判断的标准,也就是将返回值为0作为触发器表达式的条件,要获得监控项的最新返回值,那就是使用last()函数,因此选择last()函数,接着,还有有个“间隔(秒)”选项,这个保持默认即可,重点是最后这个“结果”,这里是设置last()函数返回值是多少时才进行触发,根据前面对监控项的了解,last()函数返回0表示服务故障,因此这里填上0即可。


这样,一个触发器表达式就创建完成了,完整的触发器表达式内容是:

{Template OS Linux:net.tcp.service.perf[http,,80].last()}=0


可以看出,触发器表达式由4部分组成,第一部分是模板或主机的名称,第二部分是监控项对应的键值,第三部分是触发器表达式函数,最后一部分就是监控项的值。这个表达式所表示的含义是:http服务的80端口获取到的最新值如果等于0,那么这个表达式就成立,或者返回true。

触发器创建完成后,两个监控的核心基本就完成了,后面还有创建“图形”、“聚合图形”等选项,这些都比较简单,就不过多介绍了。

1.5、创建主机组和主机

点击web上面的“配置”选项,然后选择“主机群组”,即可到添加主机群组界面,默认情况下,已经有很多主机群组了,可以使用已经存在的主机群组,也可以创建新的主机群组,点击右上角“创建主机群组”可以创建一个新的群组,主机群组要先于主机创建,因为在主机创建界面中,已经没有创建群组的选项了。

主机群组创建完成后,点击web上面的“配置”选项,然后选择“主机”,即可到添加主机界面,默认情况下,只有一个zabbix server主机,要添加主机,点击右上角“创建主机”按钮,即可进入如下页面:

主机的创建很简单,需要重点关注红框标注的内容,首先,“主机名称”这个需要特别注意,可以填写主机名,也可以写IP地址,但是都要和zabbix agent主机配置文件zabbix_agent.conf里面的Hostname配置的内容一致才行。


“群组”就是指定主机在哪个主机群组里面,点击后面的“选择”即可查看目前的主机群组,选择一个即可,最后要添加的是“agent代理程序接口”,也就是zabbix server从哪个地址去获取zabbix agent的监控数据,这里填写的是zabbix agent的ip地址和端口号,此外,根据监控方式的不同,zabbix支持多种获取监控数据的方式,支持SNMP接口、JMX接口、IPMI接口等,可根据监控方式不同选择需要的接口即可。


主机的设置项主要就这几个,最后还需要设置主机链接的模板,点击主机下面的“模板”标签,即可显示主机和模板的链接界面,如下图所示:

点击“链接指示器”后面的“选择”按钮,即可显示上图的界面,这里可以选择要将哪些模板链接到此主机下,根据模板的用途,这里我们选择了“Template OS Linux”模板,当然也可以选择多个模板连接到同一个主机下,选择完成,点击“选择”即可回到下图所示界面:


这个界面的操作需要小心,在刚刚添加了模板后,需要先点击上面的那个“添加”按钮,这样刚才选择的模板才能生效,最后在点击最下面的“添加”按钮,172.16.213.232主机添加完成。


最后,点击刚刚创建好的主机,即可进入主机编辑模式,可以看到,在主机下,已经有应用集、监控项、触发器、图形等选项和内容了,这就是链接模板后,自动导入到主机下面的,当然在主机编辑界面下也可以创建或修改应用集、监控项、触发器、图形等内容。

1.6、触发器动作配置

动作的配置也是zabbix的一个重点,点击web上面的“配置”选项,然后选择“动作”,即可到“动作”设置界面,动作的添加根据事件源的不同,可分为触发器动作、自动发现动作、自动注册动作等,这里首先介绍下触发器动作的配置方式。


在此界面的右上角,先选择事件源为“触发器”,然后点击“创建动作”按钮,开始创建一个基于触发器的动作,如下图所示:

触发器动作配置,其实是设置监控项在故障时发出的信息,以及故障恢复后发送的信息设置,动作的“名称”可以随意设置,动作的状态设置为“已启用”,接着点开“操作”标签,此标签就是设置监控项在故障的时候发送信息的标题和消息内容以及一些发送的频率和接收人,如下图所示:

在这个界面中,重点是设置发送消息的“默认操作步骤持续时间”、“默认标题”以及“消息内容”, “默认操作步骤持续时间”就是监控项发生故障后,持续发送故障信息的时间,这个时间范围为"60" 和 "604800" 之间,单位是秒。


“默认标题”以及“消息内容”是通过zabbix的内置宏变量实现的,例如{TRIGGER.STATUS}、{TRIGGER.SEVERITY}、{TRIGGER.NAME}、{HOST.NAME}等都是zabbix的内置宏变量,不需要加“$”就可以直接引用。这些宏变量会在发送信息的时候转换为具体的内容。


“默认标题”以及“消息内容”设置完成后,还需配置消息内容的发送频率和接收人,点击上图中“操作”步骤中的“新的”按钮,即可显示如下图界面:


在这个设置界面中,重点看操作细节部分,“步骤”是设置发送消息事件的次数,0表示无穷大,也就是持续一直发送,“步骤持续时间”是发送消息事件的间隔,默认值是60秒,输入0也表示默认值,“操作类型”有发送消息和远程命令两个选项,这里选择“发送消息”,“发送到用户群组”和“发送到用户”是指定将消息发送给指定的用户组和用户,一般选择将消息发送到用户群组即可,因为这样更方便,后期有新用户加入的话,直接将此用户加入用户群组中即可,省去了有新用户时每次都要修改消息发送设置的麻烦。最后,还有一个“仅送到”选项,这里是设置将消息通过什么媒介发送,默认有Email、Jabber、SMS三种方式,可以选择所有,也可以选择任意一个,这里选择Email,也就是通过邮件方式发送消息。


综上所述,这个操作过程表达的意思是:事件的持续时间是1个小时(3600s),每隔1分钟(60s)产生一个消息事件,一共产生3个消息事件,产生消息事件时,发送给Zabbix administrators用户组中的所有用户,最后消息内容会使用Email媒介发送给用户。


所有设置完成后,一定要点击上图左下角的“添加”按钮,这样刚才的设置才能保存生效。


接着,再看创建动作中的“恢复操作”标签,如下图所示:

“恢复操作”跟“操作”标签类似,是用来设置监控项故障恢复后,发送消息事件的默认标题和消息内容,这两部分就是通过zabbix的内部宏变量实现的,重点看最下面的“操作”选项,点击“新的”按钮,即可打开操作的具体设置界面,如下图所示:

这个界面是设置当监控项故障恢复后,向Zabbix administrators用户组中的所有用户通过Email介质发送消息。也就是故障恢复消息。

最后,还是要点击上图左下角的“添加”按钮,这样刚才的设置才能保存生效。

1.7、报警媒介类型配置

报警媒介类型是用来设置监控告警的方式,也就是通过什么方式将告警信息发送出去,常用的告警媒介有很多,例如Email、Jabber、SMS等,这是三种默认方式,还可以扩展到微信告警、钉钉告警等方式,至于选择哪种告警方式,以爱好和习惯来定就行了。


默认使用较多的是通过Email方式进行消息的发送告警,邮件告警方式的优势是简单、免费,加上现在有很多手机邮件客户端工具(网易邮件大师、QQ邮箱),通过简单的邮件告警设置,几乎可以做到实时收取告警信息。


点击web上面的“管理”选项,然后选择“报警媒介类型”,即可到报警媒介设置界面,然后点击“Email”进入编辑页面,如下图所示:

这个界面是设置Email报警属性,“名称”可以是任意名字,这里输入“Email”,“类型”选择“电子邮件”,当然也可以选择“脚本”、“短信”等类型,“SMTP服务器”是设置邮件告警的发件服务器,我们这里使用网易163邮箱进行邮件告警,因此设置为“smtp.163.com”即可,接着是“SMTP”服务器端口,输入默认“25”,“SMTP HELO”可保持默认即可,“SMTP电邮”就是发件人的邮箱地址,输入一个网易163邮箱地址即可,安全连接选择默认的“无”即可,“认证”方式选择“用户名密码”认证,然后输入发件人邮箱登录的用户名和密码即可。


所有设置完成,点击“添加”按钮完成邮件媒介告警的添加。到这里为止,zabbix中一个监控项的添加流程完成了。


最后,我们再来梳理下一个监控项添加的流程,一般操作步骤是这样的:


首先新创建一个模板,或者在默认模板基础上新增监控项、监控项添加完成,接着对此监控项添加一个触发器,如果有必要,还可以对此监控项添加图形,接着,开始添加主机组和主机,在主机中引用已经存在的或新增的模板,然后创建触发器动作,设置消息发送事件,最后,设置报警媒介,配置消息发送的介质,这就是一个完整的zabbix配置过程。

1.8、监控状态查看

当一个监控项配置完成后,要如何看是否获取到数据了呢,点击web上面的“监测中”选项,然后选择“最新数据”,即可看到监控项是否获取到了最新数据,如下图所示:


在查看最新监控数据时,可以通过此界面提供的过滤器快速获取想查看的主机或者监控项的内容,这里我们选择“linux servers”主机组,“http server”应用集下所有监控项的数据,点击“应用”按钮,即可显示过滤出来的数据信息,重点看“最新数据”一列的内容,那个“0.0005”就是获取的最新数据,通过不断刷新此页面,可以看到最新数据的变化。如果你的监控项获取不到最新数据,那么显示的结果将会是浅灰色。要想查看一段时间的历史数据,还可以点击右边的那个“图形”链接,即可通过图形方式展示一段时间的数据趋势,如下图所示:


这个就是监控项“httpd server 80 status”的趋势数据,此图形曲线是自动生成,无需设置,由于我们使用的是中文界面,在图形展示数据的时候,可能会在左下角有中文的地方出现乱码,这是默认编码非中文字体导致的,需要简单做如下处理,过程如下:

1、进入 C:\Windows\Fonts选择其中任意一种中文字体例如 “黑体” (SIMHEI.TTF)
2、将Windows下的中文字体文件上传到zabbix web目录下的fonts目录(本例是/usr/local/nginx/html/zabbix/fonts)
3、修改zabbix的web前端的字体设置,将如下两行修改为:
打开/usr/local/nginx/html/zabbix/include/defines.inc.php文件,找到如下两行:

define('ZBX_FONT_NAME', 'DejaVuSans'); define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans'); 修改为 define('ZBX_FONT_NAME',  'simhei'); define('ZBX_GRAPH_FONT_NAME',  'simhei');

其中simhei为字库名字,不用写ttf后缀。这样就行了,刷新一下浏览器,中文字体显示应该就正常了。


好啦,zabbix的核心配置就这么多,很简单吧,掌握这个学习思路,那zabbix就简单多了。