Zabbix监控

Linux监控平台介绍

常见开源监控软件

# cacti、nagios、zabbix、smokeping、open-falcon等等

# cacti、smokeping偏向于基础监控,成图非常漂亮

# cacti、nagios、zabbix服务端监控中心,需要php环境支持.
其中zabbix和cacti都需要mysql作为数据存储,
nagios不用存储历史数据,注重服务或者监控项的状态,
zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图

# open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,
滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究

# 后续以介绍zabbix为主

Zabbix监控介绍

# Zabbix为 C/S 架构,基于C++开发,监控中心支持web界面配置和管理,单server节点可以支持上万台客户端

# 最新版本3.4,官方文档https://www.zabbix.com/manuals

# 5个组件
1:zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据
2:数据存储 存放数据,比如mysql
3:web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因
4:zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力
5:zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报:

安装zabbix

实验环境说明

本实验需要两个虚拟机,一台作为Zabbix监控服务器,一台作为被监控的主机
#服务器与客户端最好关闭防火墙与SELINUX

Zabbix服务器:
主机名:zabbix-server
IP:10.1.1.30
需要预先安装epel扩展源和mysql服务,当然mysql也可以使用其他的主机上的mysql服务

Zabbix客户端:被监控的主机
主机名:zabbix-agent
IP:10.1.1.31

准备安装Zabbix服务器的环境

# 这里使用yum安装的方式来安装Zabbix服务
# yum源里面的Zabbix服务版本比较老,所以需要先安装Zabbix官方的yum源
# 官网下载地址 www.zabbix.com/download

wget https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm
#这个需要注意版本号

yum安装Zabbix服务

yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
# 这个会自动的安装Httpd服务和PHP服务,并且自动的配置好运行环境

数据库相关设置

# mysql需要将默认字符集设置为 utf8,在/etc/my.cnf配置文件中修改即可,
echo 'character_set_server = utf8' >> /etc/my.cnf
service mysqld restart

# 改完重启mysqld服务,然后登录进入mysql命令行创建 zabbix 库和用户
[root@zabbix-server ~]# mysql -uroot -p123456

mysql> create database zabbix;

mysql> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by '123456';

# 退出mysql命令行,导入zabbix初始化数据
mysql> exit
Bye
[root@zabbix-server ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.11/   #需注意版本号的

# 解压初始化数据
[root@zabbix-server zabbix-server-mysql-3.4.11]# gzip -d create.sql.gz

# 将解压出来的数据库脚本导入 zabbix 库中
[root@zabbix-server zabbix-server-mysql-3.4.11]# mysql -uroot -p123456 zabbix < create.sql 

Zabbix服务相关设置

# 修改Zabbix的配置文件/etc/zabbix/zabbix_server.conf
# 修改或增加下面grep匹配到的4行内容,需要注意顺序,
[root@zabbix-server ~]# cd /etc/zabbix/
[root@zabbix-server zabbix]# grep -E '^DBHost|^DBName|^DBUser|^DBPassword' zabbix_server.conf 
DBHost=127.0.0.1   #表示数据库的IP地址,这个跟创建zabbix用户是指定的ip含义不同,
DBName=zabbix      #表示数据库的库名
DBUser=zabbix      #mysql的用户名,  库和用户名都是刚才创建好的
DBPassword=123456  #刚才创建的mysql用户的密码

# 注:DBHost指定的IP和创建数据库的zabbix用户时指定的IP含义不同,
# 如果Zabbix服务和mysql服务不是在同一台主机上, 
# 创建用户时指定的ip是Zabbix服务器的ip。而DBHost则是指定mysql服务器的IP

启动服务

# 这里需要启动的服务有两个 hhtpd 和 zabbix-server
# 需要将这两个服务加入开机自启动列表
systemctl enable httpd zabbix-server

# 然后启动这两个服务
systemctl start httpd zabbix-server

# 查看端口和服务是否正常,Zabbix服务默认监听10051端口
[root@zabbix-server zabbix]# netstat -lntp | grep zabbix
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      12223/zabbix_server 
tcp6       0      0 :::10051                :::*                    LISTEN      12223/zabbix_server

[root@zabbix-server zabbix]# netstat -lntp | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      12316/httpd

[root@zabbix-server zabbix]# ps -ef | egrep 'zabbix' | wc -l
37

Windows下用浏览器访问 zabbix-server服务的地址 http://10.1.1.30/zabbix

这里点击Next step会报错:Time zone for PHP is not set (configuration parameter “date.timezone”).

# 需要修改PHP的配置文件,设置时区
# 修改/etc/php.ini 配置文件,
找到 ;data.timezone =  修改为 data.timezone = Asia/Shanghai
# 注意需要去掉开头的分号 ;

然后重启httpd服务,刷新浏览器的页面

可以看到全部条件都为OK的状态,

然后点击Next step,设置数据库信息

Database type # 保持默认的 MySQL

Database host # 填写mysql服务器的地址

Database port # 0就表示默认的mysql端口3306,如果数据库自定义了其他端口需要填写具体的端口号

Database name # 填写前面在mysql里面创建的库名zabbix

User # 填写在前面mysql里面创建的zabbix用户

Password # 填写创建zabbix用户时设定的密码

点击Next step 设置zabbix服务的相关信息

Host和Port保持默认即可,Name可以随意定义

再次点击Next Step,可以检查刚才所填写的信息是否有问题,如果没问题直接点Next step即可

成功安装了Zabbix 前端

然后点击Finish就会跳转到登录界面,输入默认的账号:Admin 密码:zabbix 即可登录

登陆后的界面

登录后的第一件事是修改Admin账号的密码

依次点击页面上的Administration>Users>Admin

再点击页面中Password后面的Change password ,然后填入新的密码,需要填写两次相同的密码,

还可以在此页面修改webUI显示的语言,将Language 改为 Chinese (zh_CN) 就可以显示中文了

修改完点击下方的UPdate,然后刷新一下就可以看到中文的页面了,同时密码也更改了

忘记Admin密码如何做

# 有时候难免会因为各种原因忘掉了Admin账号的密码,
# 这时可以在mysql命令行里面重置Admin的密码

# 1:进入mysql命令行
[root@zabbix-server zabbix]# mysql -uroot -p123456

# 2:切换到zabbix库
mysql> use zabbix;

# 3:修改user表中 alias 字段为Admin 的passwd字段的数据
mysql> update users set passwd=md5('new_password') where alias='Admin';

# 这样操作后就可以用new_password 来登录 Zabbix 的 web 页面了

添加监控的主机

安装zabbix-agent服务

安装

# 被监控的主机就是zabbix-agent,
# 安装zabbix-agent也需要先安装zabbix官方的yum源
wget https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm

# 安装好yum源之后执行:
yum -y install zabbix-agent

zabbix-agent安装好之后还需要修改配置文件

vim  /etc/zabbix/zabbix_agentd.conf # 修改如下配置

# 定义服务端的ip(被动模式)
Server=127.0.0.1 修改为 Server=10.1.1.30

# 定义服务端的ip(主动模式)
ServerActive=127.0.0.1 修改为 ServerActive=10.1.1.30

# 这是自定义的zabbix-agent主机名,一会还需要在web界面下添加主机的时候需要用到这个主机名
Hostname=Zabbix server 修改为 Hostname=zabbix-agent-01

启动zabbix-agent服务

systemctl start zabbix-agent
systemctl enable zabbix-agent

添加主机

添加主机前需要创建一个主机组

依次点击web页面的 配置 > 主机群组 > 创建主机群组

然后填写一个组名,点击添加即可

添加主机

点击web界面的 配置 > 主机 > 创建主机

然后填写一些agent的信息

主机名和可见名称可以定义为相同的,填写的是前面的zabbix-agent配置文件里面定义的Hostname

群组选择刚才创建的群组,在右边的群组选中刚才添加的群组,点击中间的左方向的箭头就可以了

agent代理程序的接口就填写zabbix-agent主机的ip地址

端口保持默认的10050就OK

其他的信息暂时先不用管,填写好之后勾选最下面的一启用,然后点击添加,这样就完成了添加一台agent

添加自定义模板

模板概述

在Zabbix-server中有许多自带的监控模板,也可以我们自己添加自定义的模板

模板是一些配置的集合,它可以应用在多个主机上,便于配置管理。

一个模板中包含以下的配置

  应用集
  监控项
  触发器
  图形
  聚合图形:
  自动发现:
  web监测

使用链接自带模板的方式添加自定义模板

依次点击web界面的 配置 > 模板 > 创建模板

然后填写模板名,和可见名, 群组需要选择Templates,设置好这些就可以点击添加了

刚创建的模板里面是空的

模板的监控项可以从其他模板复制过来

在模板列表里找到 Template OS Linux,点击它的监控项

然后勾选需要复制到新模板的监控项,再点击复制

目标类型:选择模板,群组:Templates,目标:勾选test_template,

然后再点击复制,完城后web页面会出现 监控项复制 的提示

找到先前创建的模板,就可以看到模板下已经有监控项了

但是自动发现规则并不能使用这种复制的方式。因为它没有复制的选项

这样的话还可以将相关的模板导出成xml的配置文件, 进行修改之后再导入到新模板中

但是这种方式相对比较复杂,

还有另外一种方式,链接到指定的模板,然后删除用不到的配置。

1:进入先前创建的模板,点击链接的模板

2:点击链接指示器后面的选择,勾选 Template OS Linux ,然后点击最下面的选择

3:点击链接指示器下面的添加,点击添加后,Template OS Linux 会出现在链接的模板那个框里

4:点击更新,完成后就可以看到模板中应用集,监控项等都有配置了

5:还需要修改一下链接模板的配置,进入链接模板的页面,点解取消链接,不要点到链接并清理

这一步是为了能修改和删除这个模板中的东西,

如果不取消链接,就不能在这个模板中修改和删除东西,只能去源模板里面操作。


如上如,点击取消链接,可以保留所有的配置,如果点击取消链接并清理就会删除链接创建的配置。
点击取消链接后,记得点更新,

然后就可以删除test-template这个模板中我们用不上的监控项。

如下图勾选上用不到的监控项,然后点击删除就OK了


(注:如果报错Error in query [INSERT INTO…. 需要重新创建zabbix库,在创建库的时候指定字符集为utf8)

然后还可以删除应用集中没有监控项的应用集


然后将前面添加的主机 zabbix-agent-01 添加到这个模板中

进入test_template模板,在主机/模板区块中添加zabbix-agent-01这台主机

处理图形中的乱码

问题描述

进入test_template的图形的页面,任意点击一个图形的名称,然后点击预览,

可以看到预览图形的下方有一些不明所以的小方块

这是因为我们使用了中文的web页面,但是图形所使用的字库只是一个英文字库,所以才显示为小方块。

需要将图形使用的字库更换为中文字库,才能解决这个问题

更换字库

# 1:需要找一个中文的字库文件,可以在Windows的 C:/windows/fonts 文件夹下面找到字库文件
# 这里我选择楷体字库,将字库文件复制到桌面或者其他地方,然后上传到zabbix-server主机里。

[root@zabbix-server ~]# ls -dl simkai.ttf 
-rw-r--r--. 1 root root 11787328 Dec  4  2017 simkai.ttf


# 在 /usr/share/zabbix/include/defines.inc.php 搜索ZBX_FONTPATH
[root@zabbix-server ~]# grep 'ZBX_FONTPATH' /usr/share/zabbix/include/defines.inc.php
define('ZBX_FONTPATH',              realpath('fonts')); // where to search for font (GD > 2.0.18)

# 它定义的路径是“fonts”,它是一个相对路径,绝对路径为/usr/share/zabbix/fonts,
# 而字体文件为“ZBX_GRAPH_FONT_NAME”所定义的“graphfont”,
[root@zabbix-server ~]# grep 'ZBX_GRAPH_FONT_NAME' /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME',       'graphfont'); // font file name

# 它是一个软链接文件,绝对路径为/usr/share/zabbix/fonts/graphfont.ttf
# 指向的文件是/etc/alternatives/zabbix-web-font 
[root@zabbix-server ~]# ls -dl /usr/share/zabbix/fonts/graphfont.ttf 
lrwxrwxrwx. 1 root root 33 Jul 25 23:07 /usr/share/zabbix/fonts/graphfont.ttf -> /etc/alternatives/zabbix-web-font

# 而/etc/alternatives/zabbix-web-font文件也是一个软连接文件
# 它指向了正在的字库文件/usr/share/fonts/dejavu/DejaVuSans.ttf
[root@zabbix-server ~]# ls -dl /usr/share/fonts/dejavu/DejaVuSans.ttf
-rw-r--r--. 1 root root 720012 Feb 27  2011 /usr/share/fonts/dejavu/DejaVuSans.ttf

# 将刚上传的字库文件移动到 /usr/share/fonts/dejavu/ 这个目录下
[root@zabbix-server ~]# cd /usr/share/fonts/dejavu/
[root@zabbix-server dejavu]# mv /root/simkai.ttf .

# 备份原来的字库文件DejaVuSans.ttf
[root@zabbix-server dejavu]# mv DejaVuSans.ttf DejaVuSans.ttf.bak

# 然后将刚才移动过来的中文字库文件重命名为DejaVuSans.ttf
[root@zabbix-server dejavu]# mv simkai.ttf DejaVuSans.ttf

检查是否更换成功

重新打开一个图形预览页面,可以看到中文已经正常显示了。

自动发现

更改自动发现规则的更新时间

默认的自动发现规则更新时间为1个小时,为了更块看到效果,可以将更新时间更改为30s

点击test_template模板的自动发现

然后点击 Network interface discovery这个自动发现规则。
将更新时间的 1h 更改为 30s 然后点击更新

然后等待30秒后,图形中就会出现一个新的图形,这个就是监控网卡流量的图形

在zabbix-agent主机上下载一个大一点的文件(比如mysql的二进制包),来查看这个图形的效果

添加自定义监控项目

需求:

监控某台主机的tcp状态处于TIME_WAIT连接数,并出图

解决方案:

1:客户端相关配置

# 需要两步:
    1)zabbix监控中心创建监控项目;
    2)针对该监控项目以图形展现

# 对于第一步,需要到客户端定义脚本 /usr/local/sbin/estab.sh //内容如下

    #!/bin/bash
    ##获取处于TIME_WAIT状态链接数
    netstat -ant |grep -c 'TIME_WAIT'

# 给与脚本执行权限
chmod 755 /usr/local/sbin/estab.sh

# 客户端上编辑配置文件 /etc/zabbix/zabbix_agentd.conf # 增加或修改以下两行内容

    UnsafeUserParameters=1  # 表示使用自定义脚本
    UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh 

# 自定义监控项的key为my.estab.count,
# 后面的[*]里面写脚本的参数,如果没有参数则可以省略,脚本为/usr/local/sbin/estab.sh

# 然后重启zabbix-agent服务 
systemctl restart zabbix-agent

2:服务端相关配置

# 首先到服务端验证,执行命令
[root@zabbix-server dejavu]# zabbix_get -s 10.1.1.31 -p 10050 -k 'my.estab.count'
18    #能输出正确的数字就表示客户端配置没问题。

3:在Zabbix 监控中心 web 页面添加监控项目

依次点击 模板 > test_template模板的监控项 > 创建监控项

然后填写相关信息,

名称随便定义,

类型保持默认,

键值填写 my.estab.count 需要与客户端配置文件中定义的UserParameter相同

其他的保持默认即可,配置完点击添加就好。

然后依次点击 监测中 > 最新数据 , 用过滤筛选出刚才添加的监控项看看是否有数据

如果有数据,就可以建立图形了。

依次点击 配置 > 模板 > test_template模板的图形 > 创建图形

然后填入图形的名称,再点击最下面的监控项的添加,添加刚才创建的TCP_TIME_WAIT监控项

其他保持默认,绘图风格和颜色,可以根据自己的喜好进行修改。配置完点击最下面的添加按钮。

配置完成就可以在 监测中 > 图形 查看到这个图形了(注意需要在红框中进行筛选才能看到)

主动模式和被动模式

# 主动模式和被动模式是相对于agent的
# Zabbix客户端有两个模式,主动模式,和被动模式
# 主动模式:表示Agent会主动的向服务器上报监控项的信息,如此可以减少服务器的压力
# 被动模式:需要服务器去提醒每一台Agent进行信息上报 ,会增加服务器的资源消耗
# 如果监控的Agent非常多,就必须得用主动模式了,不然服务器的压力会非常大
# 如果zabbix-server有独立的公网IP,但是被监控的agent是使用的NAT上公网,那也只能使用主动模式了

定义主动模式或被动模式

在webUI中一次点击 配置 > 模板或者主机 > 监控项 > 监控项的名称

然后会加载类似下图的页面,
图里面的红框中 Zabbix 客户端表示被动模式,
Zabbix 客户端(主动式)就表示主动模式

配置邮件告警

准备邮箱

# 如果使用163或者QQ邮箱发告警邮件
# 首先需要登录你的163或者QQ邮箱,到设置里面开启POP3、IMAP、SMTP服务
# 开启并记录授权码

监控中心设置邮件告警

依次点击 管理 > 报警媒介类型 > 创建媒体类型

然后填写相关信息:

名称(自定义),类型选择脚本,后面会在主机上编写一个发邮件的脚本

依次添加三个脚本参数,需要注意顺序 {ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}

然后点击添加按钮

编写邮件发送脚本

接下来还需要在主机上编写一个发邮件的python脚本,

  # 在 /usr/lib/zabbix/alertscripts 目录下创建一个脚本文件 mail.py
  # 这个目录是zabbix存放自定义脚本的目录
  touch /usr/lib/zabbix/alertscripts/mail.py

写入脚本的内容如下,需要根据自己的情况进行修改

  #!/usr/bin/env python
  #-*- coding: UTF-8 -*-
  import os,sys
  reload(sys)
  sys.setdefaultencoding('utf8')
  import getopt
  import smtplib
  from email.MIMEText import MIMEText
  from email.MIMEMultipart import MIMEMultipart
  from  subprocess import *

  def sendqqmail(username,password,mailfrom,mailto,subject,content):
      gserver = 'smtp.163.com'
      gport = 25

      try:
          msg = MIMEText(unicode(content).encode('utf-8'))
          msg['from'] = mailfrom
          msg['to'] = mailto
          msg['Reply-To'] = mailfrom
          msg['Subject'] = subject

          smtp = smtplib.SMTP(gserver, gport)
          smtp.set_debuglevel(0)
          smtp.ehlo()
          smtp.login(username,password)

          smtp.sendmail(mailfrom, mailto, msg.as_string())
          smtp.close()
      except Exception,err:
          print "Send mail failed. Error: %s" % err


  def main():
      to=sys.argv[1]
      subject=sys.argv[2]
      content=sys.argv[3]
  ##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
      sendqqmail('deaoza@163.com','password','deaoza@163.com',to,subject,content)

  if __name__ == "__main__":
      main()


  #####脚本使用说明######
  #1. 首先定义好脚本中的邮箱账号和密码,password是邮箱的授权码
  #2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"

给脚本执行权限

  [root@zabbix-server dejavu]# chmod 755 chmod 755 /usr/lib/zabbix/alertscripts/mail.py

测试脚本能否发邮箱

  [root@zabbix-server dejavu]# python /usr/lib/zabbix/alertscripts/mail.py deaoza@163.com 'testmail' 'this is a test mail'

检查邮箱是否有收到邮件,如果可以收到邮件,表示脚本已经没问题了。

创建一个接受告警邮件的用户

依次点击 管理 > 用户 > 创建用户 先填写一些用户的基本信息

然后点击 报警媒介,添加一条报警媒介

类型选择“Baojing”,

还需要注意用户的权限,如果没有需要到用户组去设置权限

用户群组中点击 Zabbix administrators ,然后点权限,再点击下面图中的选择按钮,

然后在弹出的窗口中勾选所有的主机群组,再点击选择,

还需要选中读写的权限。然后点击添加,不点击添加不会生效。

点击添加后

再点击上图的更新,然后查看sendmail用户的权限

设置动作

动作是在触发报警条件以后执行的一些操作。

依次点击 配置 > 动作 > 创建动作

名称写“sendmail”(自定义),添加两个条件如图

“操作”页面,标题默认,消息内容如下

HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME} 
LEVEL:{TRIGGER.SEVERITY} 
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}

点击操作框的 ’新的‘ 创建具体操作,创建完点操作细节框最下面的添加,才表示创建完毕

恢复操作页面,操作创建完点操作细节框最下面的添加,才表示创建完毕

确认操作页面,创建完点操作细节框最下面的添加,才表示创建完毕


最后点击最下面的添加按钮完成动作的创建,

测试告警

给主机zabbix-agent-01创建一个触发器

依次点击 配置 > 主机 > zabbix-agent-01的触发器 > 创建触发器

然后填写信息,名称随意,严重性:未分类

添加表达式,监控项选择先前添加的 TCP_TIME_WAIT ,
功能选择 最新的值 < N
最后一个(T) 就保持为 时间
间隔 30s , N值,这里因为我的TCP_TIME_WAIT的值一直是小于20的 所有将N值设置为25就很容易就报警了
设置完成点插入按钮

然后其他的选项保持默认就好,然后点击最下面的添加按钮完成创建触发器

接下来稍等一会就可以在仪表盘中的问题栏看见问题

出现问题发送的邮件成功,然后修改触发器将T值改为大于N

问题恢复的邮件也发送成功,

最后确认了问题已恢复,确认问题恢复的邮件也发送成功

发送失败的那个是我在动作的配置中有问题,不应该添加发送消息给用户群组,后面修改了就没有问题了,

我邮箱中的3封邮件

扩展阅读

Prometheus入门

使用Prometheus+grafana打造高逼格监控平台

zabbix监控交换机(思科)

zabbix远程执行命令

zabbix分布式部署

zabbix监控tomcat(版本有点老,大家只需要参考步骤,不能照搬)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐