第十八章 Linux监控平台搭建

一、 Linux监控平台介绍
二、 zabbix监控介绍
三、 安装zabbix
四、 忘记Admin密码如何做
五、 主动模式和被动模式
六、 添加监控主机
七、 添加自定义模板
八、 处理图形中的乱码
九、 自动发现
十、 添加自定义监控项目
十一、 配置邮件告警
十二、 测试告警
十三、 不发邮件的问题处理
十四、 扩展

一、 Linux监控平台介绍

常见开源监控方案有cacti、nagios、zabbix、smokeping、open-falcon等

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

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

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

二、 zabbix监控介绍

Zabbix 是一个企业级的分布式开源监控方案。

Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。

扫描二维码关注公众号,回复: 4829007 查看本文章

Zabbix支持主动轮询和被动捕获。Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。适当的配置后,Zabbix可以在IT基础架构监控方面扮演重要的角色。对于只有少量服务器的小型组织和拥有大量服务器的大型公司也同样如此。

Zabbix是免费的。Zabbix是根据GPL通用公共许可证第2版编写和发行的。这意味着它的源代码都是免费发行的,可供公众任意使用。

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

最新版本3.4,官方文档https://www.zabbix.com/documentation/3.4/zh/manual

5个组件:

zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据;

数据库存储 存放数据,比如mysql;

web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因;

zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力;

zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报。

zabbix监控流程:

三、 安装zabbix

实验环境说明:

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

需要预先安装epel扩展源和mysql服务,mysql如果未安装,需要按照之前lamp或者lnmp的方式安装

Zabbix服务器:
主机名:linux01(zabbix-server)
IP:192.168.239.128

Zabbix客户端:被监控的主机
主机名:zabbix-agent
IP:192.168.239.138
1. 准备安装Zabbix

这里使用yum安装的方式来安装Zabbix服务 ;yum扩展源里面的Zabbix服务版本比较老,所以需要先安装Zabbix官方的yum源

官网下载地址 www.zabbix.com/download

在zabbix服务器和客户端上都安装zabbix:

wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
2. 在zabbix服务器上yum安装Zabbix服务

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

3. zabbix服务器上数据库相关设置

①编辑mysql,将默认字符集设为utf8(目的是为了zabbix设为中文显示时避免显示异常)

vim /etc/my.cnf //需要增加配置

character_set_server = utf8

重启mysql:

[root@Linux01 ~]# systemctl restart mysql
②登录进入mysql命令行创建 zabbix 库和用户

[root@Linux01 ~]# mysql -uroot -p123456                                                        //登录mysql库
mysql> create database zabbix character set utf8;                                          //创建zabbix库,并定义默认字符集
mysql> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by '123456';    //创建用户,设置密码

③导入zabbix初始化数据(安装时自带)

[root@Linux01 ~]# cd /usr/share/doc/zabbix-server-mysql-3.2.11/    #注意版本号

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

[root@Linux01 zabbix-server-mysql-3.2.11]#  mysql -uroot -p123456 zabbix < create.sql 

#将解压出来的数据库脚本导入 zabbix 库中

4. 启动zabbix服务、httpd服务

①启动zabbix服务

[root@Linux01 ~]# systemctl start zabbix-server
②启动httpd服务

在启动前检查是否有其他服务占用80端口

[root@Linux01 ~]# ps aux|grep nginx
[root@Linux01 ~]# netstat -lntp|grep 80

关闭nginx服务并设为开机不自动启动

[root@Linux01 ~]# systemctl stop nginx
[root@Linux01 ~]# systemctl disable nginx
[root@Linux01 ~]# chkconfig nginx off
启动httpd服务:

[root@Linux01 ~]# systemctl start httpd
设为开机启动:

[root@Linux01 ~]# systemctl enable httpd
[root@Linux01 ~]# systemctl enable zabbix-server
检查服务是否正常启动:

[root@Linux01 ~]# ps aux|grep zabbix
[root@Linux01 ~]# netstat -lntp

发现zabbix进程在,但是未正常监控端口

[root@Linux01 ~]# less /var/log/zabbix/zabbix_server.log            //查看日志,服务未正常启动,说明没有连接到mysql

修改zabbix配置文件

[root@Linux01 ~]# vim /etc/zabbix/zabbix_server.conf 

DBHost=127.0.0.1 //在DBName=zabbix上面增加

DBPassword=123456 //在DBuser下面增加

[root@Linux01 ~]# systemctl restart zabbix-server           //重启zabbix服务

[root@Linux01 ~]# ps aux|grep zabbix
[root@Linux01 ~]# netstat -lntp                                       //再次查看关于zabbix服务的进程和监听端口,可以看到正常了

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

5. 配置zabbix-web

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

这里点击Next step会报错:Time zone for PHP is not set (configuration parameter “date.timezone”).时区错误,OK的不用管

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

[root@Linux01 ~]# systemctl restart httpd           //重启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 即可登录,登陆后修改默认密码

退出重新登录,就显示需要输入更新后的密码了。

6. 在客户端配置zabbix

①[root@zabbix-agent ~]# yum -y install zabbix-agent    //安装zabbix-agent

②编译zabbix-agent配置文件

[root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agentd.conf

修改配置如下:

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

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

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

③启动zabbix-agent服务(如果是克隆zabbix服务器的主机,需要关闭nginx)

[root@zabbix-agent ~]# systemctl start zabbix-agent
[root@zabbix-agent ~]# systemctl enable zabbix-agent          //设为开机启动

[root@zabbix-agent ~]# ps aux|grep zabbix
[root@zabbix-agent ~]# netstat -lntp                       //检查客户端上的zabbix服务是否正常开启
 

四、 忘记Admin密码如何做

如果遗忘zabbix登录时Admin用户密码,可登录mysql后台修改其用户名密码。

[root@Linux01 ~]#  mysql -uroot -p123456                                                             //进入mysql命令行
mysql> use zabbix;                                                                                                 //切换到zabbix库
mysql> desc users;                                                                                                //查看users表字段
mysql> update users set passwd=md5('new_password') where alias='Admin';

//修改user表中 alias 字段为Admin 的passwd字段的数据,把new_password改为新密码就可以了

退出,使用修改后的新密码登录 Zabbix 的 web 页面。

五、 主动模式和被动模式

主动或者被动是相对于zabbix-agent来讲的

被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端

主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可。

当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力。

服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式。

六、 添加监控主机

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

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

写一个组名,添加

2. 添加主机

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

然后填写一些agent的信息:

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

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

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

端口保持默认的10050就OK

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

几个概念:

应用集 (application):一组监控项组成的逻辑分组

监控项 (item):你想要接收的主机的特定数据,一个度量数据。

触发器 (trigger):一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式

图形(graph):监控数据的图形化展示

自动发现(auto discovery):通过预设的规则,zabbix自动添加主机及相关监控内容。

七、 添加自定义模板

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

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

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

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

添加模板可以通过复制其他预设模板中的监控项来生成,但是自动发现无法复制,需要导出预设模板设置,修改后再导入。比较容易出错。不推荐。

这里介绍链接的方式生成自定义模板。

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

填入相应的信息,点击最下方的添加即可添加模板,但是这时候的新添加的模板是空的,没有监控项,触发器等内容。

2. 模板下的配置部分配置可以使用复制功能复制,有些不能复制,要使用链接模板的方式添加,然后删除用不到的配置。(还可以将相关的模板导出成xml的配置文件, 进行修改之后再导入到新模板中,但是这种方式相对比较复杂)

①进入先前创建的模板,点击“链接的模板”

勾选想要链接的模板,点击下方的选择,添加-更新

完成后就可以看到模板中应用集,监控项等都有配置了,并且与链接的模板里的配置一样

②修改,删除不必要的监控项,程序集等内容

进入创建的模板,点解取消链接,不要点到取消链接并清理。

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

取消链接,但是保留之前链接的内容;取消链接并清理,不保留之前链接的内容。

然后就可以删除创建的模板中我们用不上的监控项等配置。

如下图勾选上用不到的监控项,然后点击删除就OK了(其他配置删除方法一样)

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

③删除不需要的配置后,我们就得到了一个我们想要的模板。

添加好以后,我们可以将模板应用到我们新添加的主机上。

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

或者:主机--选择主机--模板--选择修改后的模板--添加--更新

八、 处理图形中的乱码

浏览图形时发现中文显示不了,因为我们使用了中文的web页面,但是图形所使用的字库只是一个英文字库,所以才显示为小方块。需要将图形使用的字库更换为中文字库,才能解决这个问题

1. 上传中文字库

在Windows的 C:/windows/fonts 文件夹下面找一个中文字库文件,上传到zabbix-server主机里

2. /usr/share/zabbix/include/defines.inc.php 搜索ZBX_FONTPATH

[root@Linux01 ~]#  vim /usr/share/zabbix/include/defines.inc.php

•它定义的路径是“fonts”,它是一个相对路径,绝对路径为/usr/share/zabbix/fonts;

而字体文件为“ZBX_GRAPH_FONT_NAME”所定义的“graphfont”,它是一个文件,绝对路径为/usr/share/zabbix/fonts/graphfont

是一个软连接文件,指向文件为/etc/alternatives/zabbix-web-font,而/etc/alternatives/zabbix-web-font文件也是一个软连接文件 ,它指向了正在使用的字库文件/usr/share/fonts/dejavu/DejaVuSans.ttf

[root@Linux01 ~]# ll /usr/share/zabbix/fonts/graphfont.ttf

[root@Linux01 ~]# ll /etc/alternatives/zabbix-web-font

3. 更换字库 

[root@Linux01 ~]# mv /root/MSYH.TTF /usr/share/fonts/dejavu/      //将上传的中文字库移动到/usr/share/fonts/dejavu/目录下
[root@Linux01 ~]# cd /usr/share/fonts/dejavu/
[root@Linux01 dejavu]#  mv DejaVuSans.ttf DejaVuSans.ttf.bak    //备份原来的字库文件DejaVuSans.ttf
[root@Linux01 dejavu]# mv MSYH.TTF DejaVuSans.ttf                 //修改上传的中文字库名称为DejaVuSans.ttf(这里也可以做软连接)

4. 刷新页面,查看是否显示正常

九、 自动发现(实验异常)

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

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

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

十、 添加自定义监控项目

需求:监控某台web的80端口连接数,并出图

1.在客户端新建脚本

[root@zabbix-agent ~]# vim /usr/local/sbin/estab.sh
#!/bin/bash

# 获取80端口并发连接数

netstat -ant | grep ':80' | grep -c ESTABLISHED

赋予755权限:

[root@zabbix-agent ~]# 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

[root@zabbix-agent ~]# systemctl restart zabbix-agent      //重启服务

③在服务器上验证客户端脚本配置成功

[root@Linux01 ~]#  zabbix_get -s 192.168.239.138 -p 10050 -k 'my.estab.count'
0           #能输出正确的数字就表示客户端配置没问题。
2. 监控中心配置

①在Zabbix 监控中心(浏览器) web 页面添加监控项目

填写相关信息;

名称随便定义;类型保持默认;键值填写 my.estab.count 需要与客户端配置文件中定义的UserParameter相同;

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

②创建图形

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

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

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

十一、 配置邮件告警

1. 准备邮箱

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

2. 在监控中心设置邮件告警

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

然后填写相关信息:

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

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

然后点击添加按钮

3. 创建报警脚本mail.py

在主机上编写一个发邮件的python脚本:在 /usr/lib/zabbix/alertscripts 目录下创建一个脚本文件 mail.py , 这个目录是zabbix存放自定义脚本的目录

[root@Linux01 ~]# vim  /usr/lib/zabbix/alertscripts/mail.py

内容参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/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 *

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 = MIMEText(content,'plan','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]

##定义163邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
    sendqqmail('1******[email protected]','password','1*******[email protected]',to,subject,content)

if __name__ == "__main__":
    main()

#####脚本使用说明######

#1. 首先定义好脚本中的邮箱账号和密码,password是邮箱的授权码

#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"

4. 给脚本修改权限

[root@Linux01 ~]# chmod 755 /usr/lib/zabbix/alertscripts/mail.py

5. 测试脚本能否发邮箱

[root@Linux01 ~]# python /usr/lib/zabbix/alertscripts/mail.py 1*******[email protected] 'testmail' 'this is a test mail'

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

但是点击邮件查看内容时,发现告警邮件显示的是附件。

修改配置文件:

[root@Linux01 ~]# vim  /usr/lib/zabbix/alertscripts/mail.py 

是编码的问题:

 msg = MIMEText(unicode(content).encode('utf-8')) 

       # msg = MIMEText(content,'plan','utf-8')

把msg参数改用上面那个,就没问题了

5. 创建接受告警邮件的用户

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

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

类型选择“baojing”--添加--更新(收件人写邮箱地址

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

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

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

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

再查看testuser007用户的权限

6. 设置动作

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

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

名称写“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}

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

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

十二、 测试告警

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

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

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

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

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

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

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

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

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

注:如果报警的动作为空,则可能脚本没权限
有问题的时候重新修改下触发器,
如果还有发现不了的问题就重新做吧

十二、 不发邮件的问题处理

可能原因

1.用户权限
2.用户媒介有没有设置邮箱
3.发邮件脚本的权限是否755
4.脚本的位置是否在/usr/lib/zabbix/alertscripts/下
5.发邮件脚本正不正常,最好事先测试一下。格式: mail.py ‘收件人地址’ ‘主题’ ‘内容’
脚本参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py

十三、 扩展

zabbix监控交换机(思科)

http://tryrus.blog.51cto.com/10914693/1789847

zabbix远程执行命令

http://www.ywnds.com/?p=6610

zabbix分布式部署

http://sfzhang88.blog.51cto.com/4995876/1364399

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

http://www.fblinux.com/?p=616

猜你喜欢

转载自blog.csdn.net/dwy2018/article/details/85943448
今日推荐