Linux监控平台,zabbix监控

常见开源监控软件

cacti、nagios、zabbix、smokeping、open-falcon等等
cacti、smokeping偏向于基础监控,成图非常漂亮
cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图
open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究
后续以介绍zabbix为主

 

zabbix监控介绍

C/S架构,基于C++开发,监控中心支持web界面配置和管理
单server节点可以支持上万台客户端
最新版本3.4,官方文档https://www.zabbix.com/manuals
5个组件
    • zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据
    • 数据存储 存放数据,比如mysql
    • web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因
    • zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力
    • zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报

监控流程图

Linux监控平台,zabbix监控_第1张图片

 

安装zabbix

准备工作

两台机器,一台作为服务端(监控中心),另外一台作为它的客户端

背景

zabbix,可以直接yum安装,但需要安装epel扩展源,在epel扩展源里面安装的zabbix的版本,最高是2.2版本,比较旧,所以使用官方提供的repo源

wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

在两台机器都需要下载它


A机器

[root@harry-01  ~]# wget wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

 

B机器

[root@harry-01  ~]# wget wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

下载完之后,安装rpm包(实际上就是安装了一个yum源仓库)

[root@harry-01 ~]# rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm 
警告:zabbix-release-3.2-1.el7.noarch.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:zabbix-release-3.2-1.el7         ################################# [100%]
[root@harry-01 ~]# rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm 

查看/etc/yum.repos.d/目录下面会看到增加了一个zabbix.repo

Linux监控平台,zabbix监控_第2张图片

再有了这个zabbix.repo源之后,就可以yum安装zabbix了,并安装下面的包

# yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql

zabbix-agent //客户端软件

zabbix-get //服务端用的一个工具,这个工具可以通过命令行的形式,获得客户端某些监控项目的数据

zabbix-server-mysql //这个是服务端跟mysql打交道相关的组件

zabbix-web //webUI ,web界面

zabbix-web-mysql //web和mysql相关组件

在服务端是需要安装这些所有的包,而在客户端仅仅需要安装 zabbix-agent 包即可


A机器

[root@harry-01 ~]# yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql

 

B机器

[root@harry-01~]# yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql

zabbix 是基于php环境的,也就是说用的是php 的代码编写的web界面,也就说这个zabbix 相当于一个站点

安装mysql

修改mysql的配置文件,修改/etc/my.cnf文件,设定默认的字符集

A机器

[root@harry-01 ~]# vim /etc/my.cnf

在[mysqld]下添加字符集

 

character_set_server = utf8

保存退出

如果不设置字符集,那么zabbix的web界面,设置成中文的话,可能就会出现乱码

修改完mysql的配置文件后,重启mysql服务

[root@harry-01 ~]# /etc/init.d/mysqld restart 
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 
[root@harry-01 ~]# 

重启mysqld服务后,进入mysql命令行,创建zabbix库,并指定编码为utf8

#create database zabbix character set utf8;

[root@harry-01 ~]# mysql -uroot -p
Enter password: 

mysql> create database zabbix character set utf8;
Query OK, 1 row affected (0.00 sec)

mysql> 

再创建用户,这个用户是需要让web(php)代码连接mysql的,监控中心zabbix mysql服务,启动的前提就是要连接mysql;客户端采集了数据,需要把这些数据传递给服务端,那么服务端怎么把这些数据写入到MySQL去,这时就涉及到了mysql 的用户,涉及到了mysql 的数据库;用哪一个用户,去写入那一个库。
 

mysql> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)

mysql> quit 
Bye
[root@harry-01 ~]#

退出mysql的命令行后,导入原始的数据,若缺少这些数据,zabbix就没有办法工作,就没有办法在web界面下展现给我们

zabbix-server-mysql-3.2.11 这块用tab键补全,有可能版本号不同

[root@harry-01 ~]# cd /usr/share/doc/zabbix-server-mysql-3.2.11/

在/usr/share/doc/zabbix-server-mysql-3.2.11/目录下有一个create.sql.gz压缩包,将它解压,解压完之后生成了一个.sql的文件

[root@harry-01 zabbix-server-mysql-3.2.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README
[root@harry-01 zabbix-server-mysql-3.2.11]# gzip -d create.sql.gz 
[root@harry-01 zabbix-server-mysql-3.2.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql  NEWS  README
[root@harry-01 zabbix-server-mysql-3.2.11]# 

然后拿到create.sql文件,将它导入到zabbix库里面去

[root@harry-01 zabbix-server-mysql-3.2.11]# mysql -uroot -p 
Enter password: 

启动zabbix服务

#systemctl start zabbix-server

[root@harry-01 zabbix-server-mysql-3.2.11]# systemctl start zabbix-server

启动httpd服务,在启动http服务之前,先查看nginx服务是否启动,若启动了nginx,就监听了80端口,就需要去停掉nginx服务,再去启动httpd服务

4ad4ffb9edb3c9ad53d021eb002cf539f50.jpg

查看zabbix服务进程

c9865b0e9a6f501cd25387e2e74d6a23920.jpg

查看zabbix监听的端口

[root@harry-01 zabbix-server-mysql-3.2.11]# netstat -lntp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:36272           0.0.0.0:*               LISTEN      4242/rpc.statd      
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      4243/rpc.mountd     
tcp        0      0 0.0.0.0:33426           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      4229/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      4675/master         
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
tcp6       0      0 :::54151                :::*                    LISTEN      4242/rpc.statd      
tcp6       0      0 :::3306                 :::*                    LISTEN      5564/mysqld         
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::20048                :::*                    LISTEN      4243/rpc.mountd     
tcp6       0      0 :::36051                :::*                    LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      4229/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      4675/master        

这里看到服务启动了,但并没有zabbix监听的端口

查看zabbix并没有监听端口后,首先检查zabbix的错误日志,错误日志路径/var/log/zabbix/zabbix_server.log

Linux监控平台,zabbix监控_第3张图片

虽然zabbix服务有进程,但没有彻底的起来,说明不能够连接mysql,所以还需要更改zabbix的配置文件

更改zabbix的配置文件,配置文件为/etc/zabbix/zabbix_server.conf


A机器

[root@harry-01 ~]# vim /etc/zabbix/zabbix_server.conf

 

搜索/DBHost

在DBName=zabbix上面增加

DBHost=127.0.0.1

 

DBuser=root

DBPassword=123123

 

保存退出

因为mysql和zabbix装在同一台机器上,这里的 DBHost可以写localhost 或者127.0.0.1;如果是在生产环境上,有时候为了提升zabbix的性能,可能会把MySQL装在其他机器上,这是的DBHost,就需要写上mysql的ip

更改完zabbix配置文件,restart重启下即可

[root@harry-01 zabbix-server-mysql-3.2.11]# systemctl restart zabbix-server 
[root@harry-01 zabbix-server-mysql-3.2.11]#

这时再来查看下zabbix进程,有29个(正常情况下,都是这么多进程)

00cb61019246b6d14d0e31b97998880d1ed.jpg

8e37cbf4db97abf679d0f868310c35d02be.jpg接下来就是配置web界面了(需要关闭防火墙和规则,否则浏览器无法访问)

  • 在浏览器输入IP地址(即监控中心的IP地址),如192.168.31.137/zabbix 去访问

10616327e343647c0f94444d8bf3d602a3b.jpg

输入图片说明

设置php的timezone时区,在php的配置文件中设置,默认php的配置文件在/etc/php.ini 里面

A机器

[root@harry-01 ~]# vim /etc/php.ini

 

搜索 /timezone

将 ;date.timezone 改为如下

 

date.timezone = Asia/Shanghai

保存退出

在定义完php的配置文件,还需要重启apache

[root@harry-01 zabbix-server-mysql-3.2.11]# systemctl restart httpd 

c85abda110ddf4fe70b25e86f87afaef5b9.jpg

Next step ,来配置数据库相关信息

  • host :MySQL所在机器IP
  • port:0为默认端口3306,如果有改动就修改
  • name:库的名字
  • user:库的用户
  • password:用户的密码

238449b09dfa97637d871ac050061b7a960.jpg

  • host:站点主机名
  • port:端口,如果有改动就改,没改动,默认就是10051
  • name:站点的名字

 

登录管理页,默认的账号是Admin,密码为zabbix

在登录进zabbix之后,首先需要去更改密码(因为默认的密码大家都知道的),若是在线上环境不更改密码,很容易被别人拿到后台权限

66d6d0186fc393b42ce315d80c7fb9ba7e6.jpg

更改密码,先选择 Administration ,然后选择 Users

输入图片说明

然后找到Admin,并点进去,选择 Change password 修改密码和选择语言(支持中文),然后保存退出

输入图片说明

这时候密码改了,但看到界面还是英文版,刷新浏览器即可,会看到变成中文版

输入图片说明

这时在退出zabbix,再重新进入下,使用新的密码,会看到重新进入了,这就是zabbix的web界面了

 

客户端安装zabbix(B机器)

•在客户端上也需要下载zabbix的yum源
• 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
• yum install -y zabbix-agent
• vim  /etc/zabbix/zabbix_agentd.conf //修改如下配置
 Server=127.0.0.1修改为Server=192.168.31.137 //定义服务端的ip(被动模式)
 ServerActive=127.0.0.1修改为ServerActive=192.168.31.137 //定义服务端的ip(主动模式)
Hostname=Zabbix server修改为Hostname=harry-zabbix //这是自定义的主机名,一会还需要在web界面下设置同样的主机名
• systemctl start zabbix-agent
• systemctl enable zabbix-agent''

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

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

Hostname=Zabbix server修改为Hostname=aming-123 //这是自定义的主机名,一会还需要在web界面下设置同样的主机名

这样客户端的zabbix就配置完成

 

忘记Admin密码如何做 ?

•进入mysql命令行,选择zabbix库
• mysql -uroot -p zabbix
• update users set passwd=md5(‘newpasswd’) where alias=‘Admin’;
• 这样就更改了Admin用户的密码
 

主动模式和被动模式

主动或者被动是相对客户端来讲的

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

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

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

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

 

添加监控主机

先添加主机组 Linux-test

Linux监控平台,zabbix监控_第4张图片

 

再添加主机,主机名称和可见名称都写Linux-02 
 
群组选择Linux-test 
IP地址填写客户端的ip 192.168.31.139 
 

Linux监控平台,zabbix监控_第5张图片

Linux监控平台,zabbix监控_第6张图片

几个概念:应用集、监控项、触发器、图形、自动发现、web监测

 

添加自定义模板

可以自定义一个常用模板,方便给新增主机添加监控项目(点击配置->点击模板->创建模板)

自定义centos模板 
把其他自带模板里面的某些监控项目(比如cpu、内存等)复制到centos模板里 

Linux监控平台,zabbix监控_第7张图片

d14d09c6cbaf82c0edce456551057570622.jpg

我们可以复制别的模板,这里复制的就是监控项,把Template OS Linux的监控项模板复制到了centos模板中:

Linux监控平台,zabbix监控_第8张图片

Linux监控平台,zabbix监控_第9张图片

Linux监控平台,zabbix监控_第10张图片

但是这样做自动发现项没法复制,所以我们可以用链接模板,选择Template OS Linux的模板,记得要按添加才能保存。 

Linux监控平台,zabbix监控_第11张图片

这样模板就全部复制过来 

ca071dcd7d7de15a93b468bb836bab50caa.jpg

但是我们没法去删除监控项那些东西,因为模板后面链接的是Template OS Linux,所以我们需要去取消链接,点击xie->链接模板->取消链接(如果点击取消并清理就会把监控项,应用集等等全部删除),取消链接然后点击更新。

Linux监控平台,zabbix监控_第12张图片

模板后面的灰色Template OS Linux链接就没了 
8ece1fa6422c0cee3ee3b2a1b7a213524d5.jpg
然后我们就可以删除我们不需要的监控项,只留下如下的监控项,应用集里没有数字的都可以删除: 
Linux监控平台,zabbix监控_第13张图片

 

把我们弄的这个centos模板弄到Linux-02的主机里 
Linux监控平台,zabbix监控_第14张图片

 

处理图形中的乱码

设置为中文后,zabbix图形的中文文字会显示小方框,这是因为在zabbix的字体库中没有中文字体,需要从windows上借用一个过来。
vim /usr/share/zabbix/include/defines.inc.php 
#搜索ZBX_FONTPATH
它定义的路径是“fonts”,它是一个相对路径,绝对路径为/usr/share/zabbix/fonts,而字体文件为“ZBX_GRAPH_FONT_NAME”所定义的“graphfont”,它是一个文件,绝对路径为/usr/share/zabbix/fonts/graphfont
windows字体路径为“C:\Windows\Fonts\”,找到“simfang.ttf”(其实就是那个仿宋简体),先把它复制到桌面上,然后上传到linux的/usr/share/zabbix/fonts/,把原来的graphfont.ttf改名拷贝起来,并且做软链接ln -s SIMLI.TTF graphfont.ttf 
Linux监控平台,zabbix监控_第15张图片

 

自动发现

自动发现规则可以修改数据的更新时间,点击自动发现规则,修改时间间隔: 

Linux监控平台,zabbix监控_第16张图片

更新之后图形会出现网卡的流量图形: 

Linux监控平台,zabbix监控_第17张图片

我们可以在图形中点击网卡图形来查看网卡流量的图形: 

Linux监控平台,zabbix监控_第18张图片

型(配置->模板->组名对应的自动发现规则->图形原型1) 

Linux监控平台,zabbix监控_第19张图片

 

 

添加自定义监控项目

很多监控项目是在模版里面配置体现出来的,但有时候会有一些个性化的需求,比如就是想知道某一个业务的数据,运营人员想知道网站注册量,和会员活动每天的活跃度,这些数据实际上是可以通过数据库里面的表体现出来的,但是在Zabbix不可以提供这么详细的监控项目,当遇到这种需求怎么办? 当遇到这种需求需要一个在客户端写一个shell脚本,把这个数值展现出来,通过一个监控项目,再去形成图表,给运营人员分析每星期的数值,以及每个月的数值趋势走向. zabbix在这点上还是不错的,可以自定义去监控一个项目
 

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

首先是要获得这个连接数,拿到数值后到zabbix中心创建监控项目,然后针对这个项目做一个图形.
到客户端上定义一个脚本:

[root@harry-01 ~]# vim /usr/local/sbin/estab.sh

#! /bin/bash

## 获取80端口并发连接数

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

 

 

注:netstat -ant 是可以查看连接数的.

 

 

# 赋予执行权限

[root@harry-01 ~]# chmod 755 /usr/local/sbin/estab.sh

 

注:其实是赋予zabbix用户 执行权限,因为最终是zabbix用户执行这个脚本
编辑客户端的配置文件


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

 

 

UnsafeUserParameters=1      --> 表示使用自定义脚本,(0表示关闭使用自定义脚本,1表示使用自定义脚本)

 

UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh  --> 定义脚本路径, 后面的[*]里面写脚本的参数,如果没有参数则可以省略.

 

 

#修改配置文件后,重启zabbix-agent服务

[root@harry-01 ~]# systemctl restart zabbix-agent
测试客户端写的脚本是否有效(在服务端测试)
[root@harry-01 ~]# zabbix_get -s 192.168.31.139 -p 10050 -k 'my.estab.count'
0
[root@harry-01 ~]# 

增加监控项目(Zabbix监控中心配置

点击配置 --> 主机 --> 选择harry-zabbix的监控项 -->点击创建监控项  
          名称(自定义) --> 键值 -->添加

Linux监控平台,zabbix监控_第20张图片


给添加的并发连接数监控项目做图形

点击图形 --> 创建图形 -->名称 --并发连接数 --> 添加 -->选中并发连接数 -->选择 -->添加 

Linux监控平台,zabbix监控_第21张图片

 

Linux监控平台,zabbix监控_第22张图片

给并发连接数监控项目做个触发器

点击触发器 -->创建触发器 --> 名称 :并发连接数 --> 严重性 -- 选择告警 -->表达式 --添加  --> 监控项目 --点击选择--> 选中并发连接数 --> 功能 选择 最新的T值 N 定义为200 (意思是并发数达到200就告警) -->添加

Linux监控平台,zabbix监控_第23张图片

 

 配置邮件告警 

需要准备一个邮箱作为告警用 (可以使用163邮箱),要想这个邮箱发邮件,也就是在第三方平台上,比如在服务器上调用163的邮箱发邮件,需要开启POP3/SMTP/IMAP服务.

Zabbix监控中心设置报警媒介类型

点击设置-->告警媒介类型 -->创建报警媒介类型 --> 名称 自定义 --> 类型 选择脚本 -->脚本名称 自定义 -->添加 -->定义脚本参数 --添加
Linux监控平台,zabbix监控_第24张图片
脚本参数含义:
    {ALERT.SENDTO}  -- 发邮件给谁
   {ALERT.SUBJECT}   -- 邮件标题
   {ALERT.MESSAGE}  -- 邮件内容

 

创建告警脚本

脚本放在哪里,在服务端的配置文件是定义的.


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

 

 

搜索/AlertScripts

 

AlertScriptsPath=/usr/lib/zabbix/alertscripts  --> 这就是定义脚本所放路径 (这不需要我们定义,自带的)

 

 

 

# 在/usr/lib/zabbix/alertscripts目录下创建mail.py脚本

  说明:脚本内容去以下网址下载:

https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py

 

[root@root-01 ~]# cd /usr/lib/zabbix/alertscripts

[root@root-01 alertscripts]# vim mail.py

#!/usr/bin/python

#coding:utf-8

import smtplib

from email.mime.text import MIMEText

import sys

mail_host = 'smtp.163.com'

mail_user = '[email protected]'

mail_pass = '123466'

mail_postfix = '163.com'

def send_mail(to_list,subject,content):

    me = "zabbix 监控告警平台"+"<"+mail_user+"@"+mail_postfix+">"

    msg = MIMEText(content, 'plain', 'utf-8')

    msg['Subject'] = subject

    msg['From'] = me

    msg['to'] = to_list

    try:

        s = smtplib.SMTP()

        s.connect(mail_host)

        s.login(mail_user,mail_pass)

        s.sendmail(me,to_list,msg.as_string())

        s.close()

        return True

    except Exception,e:

        print str(e)

        return False

if __name__ == "__main__":

    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

 

 

#给mail.py脚本设置权限

[root@root-01 alertscripts]# chmod 755 mail.py 

 

 

转载于:https://my.oschina.net/u/3993226/blog/2998094

你可能感兴趣的:(操作系统,php,开发工具)