首页 > 代码库 > 监控工具Zabbix之原理及部署

监控工具Zabbix之原理及部署

zabbix简介

zabbix是完全开源的工具,整合了cacti和nagios等特性

 

SNMP

众多网络工具都支持此协议,比如常见路由交换,常见OS

其既可以做管理端也可以做被管理端

snmp协议大致有3个版本分别是v1 v2 v3

比较通用的版本是v2c的版本

无论是v1 和 v2 的安全性是比较差的,因为传输是明文的,v2c的认证机制也很薄弱

但是好在他们支持网络管理的功能,而对于非网络设备(操作系统),可以完全抛开snmp这种不安全的架构来实现监控的。所以很多工具都是所谓的控制端和agent架构,他们有专属的agent

snmp所谓的监控端也是为我们提供了接口再通过程序去采集,数据采集是否保存是否对趋势做分析,snmp都是不关心的,但是snmp只是一种协议

 

 

zabbix组件

zabbix server 负责接收数据、统计数据及操作数据均有其组织进行

database storage 专用于存储所有配置信息,以及由zabbix收集数据

web interface  zabbix的GUI接口,通常与server运行在同一台主机上,通常被称为frontend

proxy 可选组件

zabbix 自从2.0以后可以直接监控java应用

 

模板 : 配置的集合

item : 监控项,比如监控cpu每秒的阈值,一个特定指标的监控数据,被称为监控项,对于zabbix来讲 item是核心,因为监控对象可能有N个监控项目,那我们定义主机之后接下来就要定义主机之后的指标,定义监控项之后就回根据监控项去采集和存储数据了

一旦发现采集的数据超出了阈值之后,那么如下:

触发器   : 主要定义阈值,用于判定某一次数据采集是否符合条件,比如cpu利用率大于或等于80%,因此用于评估监控对象的某一特定的item所接受的数据是否在合理范围内的,接收数据量大于阈值时,触发器的状态将从ok转为problem,如果一直小于阈值那么一直显示OK的

 

事件: 触发器一旦从ok转为problem,则属于事件发生,一旦某个事件被触发,我们要执行某个动作 

动作: 指对于特定事件事先定义的处理方法,通过条件和操作

报警升级:  发送报警或执行远程命令的自定义方案,如每隔5分钟发送一次报警,共发送5次 

媒介: 发送通知的手段或通道,比如邮件 jabber或者sms

通知:发送邮件或其他信息的内容

远程命令: 预定义的命令,可在被监控的主机处于某种特定条件下时自动执行,说白了就是通知层次上的另外操作

模板:

     用于快速定义被监控的主机的预设条目集合,通常包含了item、trigger、graph、screen

     application以及low-level discovery rule,模板可以直接链接至单个主机

 

安装zabiix


安装zabiix的方式:

·源码安装

同时安装server和agent,并支持将数据放入mysql数据中,可使用类似如下配置命令:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6--with-net-snmp --with-libcurl --with-ssh2

如果仅安装server,并支持将数据放入mysql数据中,可使用类似如下配置命令:
./configure --enable-server --with-mysql --with-net-snmp --with-libcurl

如果仅安装proxy,并支持将数据放入mysql数据中,可使用类似如下配置命令:
./configure --prefix=/usr --enable-proxy --with-net-snmp --with-mysql--with-ssh2

如果仅安装agent,可使用类似如下配置命令:
./configure --enable-agent


而后编译安装zabbix即可:
# make
# make install

 

 

·rpm包安装

zabbix为各种平台都提供了编译好的rpm包

同时我们也可以直接指定epel源来安装

[root@node3 tools]# groupadd mockbuild
[root@node3 tools]# useradd mockbuild -g mockbuild

http://repo.zabbix.com/zabbix/2.0/rhel/6/SRPMS/zabbix-2.0.8-3.el6.src.rpm

[root@node3 tools]# rpm -ivh zabbix-2.0.8-3.el6.src.rpm

 

 

规划

将mysql与mysql分割开来

10.12.33.58     mysql

10.12.33.57     zabbix

10.12.33.X      其他监控对象

 

 

安装zabbix

[root@node3 zabbix]# wgethttp://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm

[root@node3 zabbix]# cp zabbix-2.0.8-3.el6.x86_64.rpmzabbix-agent-2.0.8-3.el6.x86_64.rpm zabbix-get-2.0.8-3.el6.x86_64.rpmzabbix-sender-2.0.8-3.el6.x86_64.rpm zabbix-server-2.0.8-3.el6.x86_64.rpmzabbix-server-mysql-2.0.8-3.el6.x86_64.rpm zabbix-web-2.0.8-3.el6.noarch.rpmzabbix-web-mysql-2.0.8-3.el6.noarch.rpm anzhuang/

 

先将本地安装为server,先不安装agent组件

[root@node3 anzhuang]# ll
total 5364
drwxr-xr-x 2 root root    4096 Sep  1 14:06 agent
-rw-r--r-- 1 root root  123788 Sep  1 14:04zabbix-2.0.8-3.el6.x86_64.rpm
-rw-r--r-- 1 root root   51228 Sep  1 14:04zabbix-get-2.0.8-3.el6.x86_64.rpm
-rw-r--r-- 1 root root   18632 Sep  1 14:04zabbix-server-2.0.8-3.el6.x86_64.rpm
-rw-r--r-- 1 root root 1463132 Sep  1 14:04zabbix-server-mysql-2.0.8-3.el6.x86_64.rpm
-rw-r--r-- 1 root root 3806960 Sep  1 14:04zabbix-web-2.0.8-3.el6.noarch.rpm
-rw-r--r-- 1 root root   12068 Sep  1 14:04zabbix-web-mysql-2.0.8-3.el6.noarch.rpm 

 

解决依赖关系并安装软件包

[root@node3 anzhuang]# yum -y localinstall *.rpm

 

 

 

对mysql做初始化

需要相关脚本来实现

按顺序导入到mysql数据库中,并且创建相关数据库并授权给zabbix访问的账号密码

[root@node3 anzhuang]# rpm -ql zabbix-server-mysql

看到如下信息,就是我们的脚本

/usr/share/doc/zabbix-server-mysql-2.0.8/create
/usr/share/doc/zabbix-server-mysql-2.0.8/create/data.sql
/usr/share/doc/zabbix-server-mysql-2.0.8/create/images.sql
/usr/share/doc/zabbix-server-mysql-2.0.8/create/schema.sql

 

 

切换至node1.test.com

授权用户

mysql> grant all on *.* to ‘root‘@‘10.12.33.%‘IDENTIFIED  by ‘mypass‘ WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

 

 

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

测试是否可以连接

[root@node3 create]# mysql -uroot -pmypass -h10.12.33.58

 

导入库

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

 

[root@node3 create]# mysql -uroot -pmypass -h10.12.33.58zabbix < /usr/share/doc/zabbix-server-mysql-2.0.8/create/schema.sql 

[root@node3 create]# mysql -uroot -pmypass -h10.12.33.58zabbix < /usr/share/doc/zabbix-server-mysql-2.0.8/create/images.sql
[root@node3 create]# mysql -uroot -pmypass -h10.12.33.58 zabbix < /usr/share/doc/zabbix-server-mysql-2.0.8/create/data.sql 

 

授权非管理员范访问

mysql> grant all on zabbix.* to ‘zbxuser‘@‘10.12.33.%‘IDENTIFIED BY ‘zbxpass‘;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

 

配置zabbix
[root@node3 create]# cd/etc/zabbix/
[root@node3 zabbix]# ls
web  zabbix_agentd.conf  zabbix_agentd.d  zabbix_server.conf

 

[root@node3 zabbix]# vim zabbix_server.conf 

更改参数:

DBHost=10.12.33.58

DBUser=zbxuser
DBPassword=zbxpass

DBPort=3306

StartPollers=5     #zabbix需要向各agent端取数据的,可以并行启动好几个poller 这样可以并行大规模拉取数据,这个值需要看cpu的核心数,也就是说需要根据当前cpu进行计算

 

保存退出并启动服务

[root@node3 zabbix]# /etc/init.d/zabbix-server start
Starting Zabbixserver:                                   [  OK  ]

 

[root@node3 zabbix]# netstat -lntup

zabbix-server默认监听在10051端口

 

接下来配置web应用接口 

配置web接口

由于我们之前已经安装过zabbix-web,它会默认在httpd服务目录下生成单独的配置文件
[root@node3 zabbix]# ls /etc/httpd/conf.d/
php.conf  README  welcome.conf  zabbix.conf

 

查看zabbix相关路径

[root@node3 zabbix]# rpm -ql zabbix-web

我们能看到,所有的zabbix-web都被放在/usr/share/zabbix/目录下

而这些文件都是只读的

 

想访问zabbix-web 只要直接启动httpd服务即可

[root@node3 conf.d]# /etc/init.d/httpd start

 

 

访问http://10.12.33.57/zabbix/ 

第一次访问的时候会提示如下界面

wKiom1QLEVeSOKL4AAiqoNjD3oo490.jpg

 

说明我们必须安装zabiix,上面有个警告,说明直接依赖于php默认配置的时区是不安全的,因此最好手动配置时区,所以我们需要更改时区

[root@node3 conf.d]# vim /etc/php.ini 

date.timezone = Asia/Shanghai

 

/etc/init.d/httpd restart
再次刷新页面,如果没有提示错误信息,则选择下一步

 

wKiom1QLEXDCvApUAALt_fup4ig317.jpg

提示检测所有条件是否符合 全部ok则可以进行下一步了

wKiom1QLEY6hgm31AAKtMye9eus233.jpg

 

提示后端类型,因为我们安装的是zabbix-mysql 所有只支持mysql数据库,服务器是10.12.33.58 端口为3306   0为默认则不需要更改,数据库为zabbix 用户名和密码为我们刚授权的用户权限,输入完后一定要选择testconnection 不然无法下一步

wKiom1QLEaaTUYwqAAIqr8IvGY8518.jpg

 

当前zabbix server在什么地方,因为web需要跟server进行交互的,而server就是本机,所以不用更改,而port就是10051,name是可选的,如果zabbix server比较多的话可以为其取名,这里我们就不对其命名了,直接下一步

 

wKioL1QLEeSD6vyWAAKwmc8g_BQ098.jpg

 

提示信息,告知我们大概信息是这样是否继续安装

wKiom1QLEfSBTCCLAAH-At6TzSA498.jpg

 

选择finish,直接下一步,接下来跳到登录页面

wKioL1QLEjHgbX9nAAIOC4hx36s152.jpg

 

登录的时候第一次要验证,用户名默认为admin,密码为zabbix

选择登录,可以看到如下界面

wKioL1QLElPA1LjEAAZGlI6oYXw663.jpg

 

zabiix的用户

很显然我们使用zabbix必须得有用户的,如上的菜单每个菜单下面都有子菜单,选择Administration 在子菜单选择User

wKiom1QLEmqTbq6gAAUYVRDAjDU828.jpg

默认显示的是组,而默认情况下是有俩用户 一个是admin 另一个则是guest

 

 

主界面

wKioL1QLEqOiuRQPAAGh5EgT2zU061.jpg

 

如果提示is running 说明服务器是没有任何问题的

 

Zabbix的状态信息

 

表示监控的主机有多少, 0表示正常(被监控) 1表示没有被监控的 23为模板数

Number of hosts (monitored/not  monitored/templates)

24

0 / 1 / 23

表示没有任何的数据需要采集

Number of items  (monitored/disabled/not supported)

0

0 / 0 / 0

triggers的信息

Number of triggers  (enabled/disabled)[problem/unknown/ok]

0

0 / 0  [0 / 0 / 0]

共有几个用户

Number of users (online)

2

1

 

以上信息是经常需要我们去关注的,但是我们现在没有任何的监控对象,所以首先我们要去添加一个需要监控的主机

 

添加监控节点

[root@node3 zabbix]# scp zabbix-2.0.8-3.el6.x86_64.rpmzabbix-agent-2.0.8-3.el6.x86_64.rpm zabbix-sender-2.0.8-3.el6.x86_64.rpmnode1.test.com:/tmp
root@node1.test.com‘s password:
zabbix-2.0.8-3.el6.x86_64.rpm      100%  121KB120.9KB/s   00:00   
zabbix-agent-2.0.8-3.el6.x86_64.rp 100%  138KB 138.4KB/s  00:00   
zabbix-sender-2.0.8-3.el6.x86_64.r 100%   57KB 56.8KB/s   00:00   


[root@node1 tmp]# yum localinstall zabbix-*.rpm

 

[root@node1 tmp]# ls /etc/zabbix/
zabbix_agentd.conf  zabbix_agentd.d  

 

[root@node1 zabbix]# ll zabbix_agentd.d/
total 4
-rw-r--r-- 1 root root 1517 Oct  3  2013 userparameter_mysql.conf    #用来监控mysql的额外所需要的补充


编辑配置文件

[root@node1 zabbix]# vim zabbix_agentd.conf 

更改以下参数:

Server=10.12.33.57

对于其他参数后期可以慢慢更改,于是可以正常启动了

[root@node1 zabbix]# /etc/init.d/zabbix-agent restart

 

[root@node1 zabbix]# ss -tanl

State       Recv-QSend-Q   Local Address:Port     Peer Address:Port
LISTEN      0     128                 *:80                 *:*    
LISTEN      0     128                 :::22                :::*    
LISTEN      0     128                 *:22                 *:*    
LISTEN      0     128         127.0.0.1:6010               *:*    
LISTEN      0     128                ::1:6010              :::*    
LISTEN      0     128                :::10050              :::*    
LISTEN      0     128                 *:10050               *:*    
LISTEN      0     80                 :::3306              :::*     

 

接下来就可以对其进行监控了,要想监控其主机,需要新加配置才可以进行

 

添加监控

wKiom1QLEzXw-COsAAKmZbfX68c330.jpg

提示如下信息栏

wKioL1QLE13DsEUOAABEpQ3R2_U250.jpg

Host               主机自身的属性

Tamplates          关联的模板

IPMI               ipmi的属性配置

Macros             zabbix的宏(变量

Host inyentory     企业资产盘点

 

 

这里我们只更改host这一项即可:

wKiom1QLE4eQZ14OAAOegOE4r08701.jpg

 

主机一定要归类到组里面去的,如果没有一个适合我们的,我们可以定义新的组

Host name 跟agentinterfaces 需要注意的是监控接口地址定义的主机才是最关键的

端口为10050,表示使用agent进行连接的,如果对端不支持agent,下面也有列出其他连接方式

 

 

 

查看其状态:

wKioL1QLE7GxzJRrAARAnMqPzx0275.jpg

 

回到主页面查看dashboard

查看当前监控信息:

Number of hosts (monitored/not  monitored/templates)

25

1 / 1 / 23

 

监控的主机有1个,没有监控的主机有1个

 

但是我们现在监控的主机的确是在线的而且能连接agent,说明主机只是处于活动状态,但是我们还需要监控对方的其他信息,比如网络网卡发送数据量等等

因此,我们还需要定义其监控的监控项

 

 

定义监控项

wKioL1QLE93zVG3hAASKp_7Re18256.jpg

 

 

创建一个监控项

wKiom1QLE_aD3096AAPkPQ7K2ko710.jpg

 

这里显示的是当前已有的items,依旧选择create items

Host

Name

Type          item的类型,使用哪种方法采集而来的数据,我们这里需要使用agent进行监控

key           对zabbix items而言,key用来标记items的键,我们也称之为标示符,监控对象一定是可采集数据的,为了唯一的标示这个指标,我们要为其做标记,就叫做key,所以对于zabbix而言 key是不能重名的

 

wKioL1QLFCez-XBtAAKnD2e63Jc864.jpg

 

Use custom multiplier     #自定义乘以多少倍,需要自定义的,因为我们所要显示的内容在图形里很可能与它的数据单位不一致,所以有些时候采集的数据是按位来处理的,但是显示的是按字节进行显示,所以要乘以8 ,同样的如果以字节为采集单位,显示的为k 那么需要乘以1024

 

Update interval (in sec)    #定义多少秒采集一次数据,当然我们也可以定义在什么时间内采集

Flexible intervals          #定义采集时间段

Keep history (in days)      #数据历史保存多少天

Keep trends (in days)       #数据趋势保存多少天

Store value                 #保存的格式

    As is                   #原封不动保存

    delta (speed per secound)      #使用当前时间点的值减去上个时间点的值并除以时间来计算速率

    delta (simple change)          #只计算差别而不计算平均速率

#对于网卡速率而言要选择第二个

Show value                  #显示的状态

New application             #当前的在状态存放在哪个application里

Description                 #描述信息

Status                      #状态

 

创建完毕后返回configureation --> hosts

wKioL1QLFHHgXFjzAANQiVWiVUc229.jpg

 

看到其自动建立了名为NetTraffic 的application

wKiom1QLFIDQabuwAANLTsOgqQw891.jpg

 

回到主页面并查看监控项

当前monitored有多少个处于监控的状态 为1个

Number of hosts (monitored/not  monitored/templates)

25

1 / 1 / 23

Number of items  (monitored/disabled/not supported)

1

1 / 0 / 0

查看图形

当每建立一个item会自动创建图形的

依次选择monitoring --> Latest data,每个节点对应的监控项:

 wKiom1QLFL_RvKfIAAME28TCZE8998.jpg

可以看到其监控项,上次数据是2016 当前数据是+476,我们选择Graph 可以查看图形

wKiom1QLFOGgRcHiAAaHkIDujhQ124.jpg

那么我们对这个节点进行ping操作,使其产生一些数据流量,如下所示:

wKioL1QLFQGSJMQSAAYBdIukSe4609.jpg

如果我们想对其监控多个状态只需要再加监控项即可

 

新加监控项

新加监控多个状态

wKioL1QLFRqxeZOOAARWO5XYwYo510.jpg

wKiom1QLFSbjP8VoAANo1hvgS38398.jpg

添加新监控项

wKiom1QLFU3TRepnAAKvPW-jc04527.jpg

wKioL1QLFVaB0mh9AARJI0cr92s207.jpg

添加监控CPU

需要再次创建items

wKiom1QLFW3RzrWBAAKaJgAT_EM746.jpg

再添加,使其监控cpu的使用率

wKioL1QLFY6jgZ1IAAKOKHCEyBo005.jpg

key为system.cpu.intr 意思是cpu的中断次数

Units 不用填写因为这次与上次没有关系,所以不用计算,而且一定是无符号整数

wKioL1QLFbKTobH8AARRgp0ZPJ0630.jpg

可看到,我们的一个主机的application 被分为了两个,虽然都是同一个主机

因为这里是根据application为主 建立分组的,此时我们发现所有的application都采集到了数据

使同一application工作在同一张图上

wKiom1QLFcrQZdo5AAP73jdOEW4416.jpg

我们自定义某几个指标放在一个图进行展示

wKiom1QLFeChLitCAAKZm1numvA049.jpg

可以选择Preview先预览一下效果

wKioL1QLFfrjxPFQAAM79fiNll8772.jpg

选择Save 进行保存

 

使用screens将图整合

wKiom1QLFhvjpn4mAAKYRL3327Q742.jpg

wKioL1QLFiPTrlNdAADjAHeaRNU930.jpg

显示为几行几列,这里为1行2列

加图:

 

wKioL1QLFl7AaJNjAAE0ZXcbPfc467.jpg

wKiom1QLFlfQIgw4AAJDf26gRyA511.jpg
如下所示:

wKioL1QLFmDiN5ScAAJnS0DUEkw275.jpg

 接下来再添加网络图

wKioL1QLFqeijPJKAAMZ7stzWTI162.jpg

wKiom1QLFqCjfQnAAAOVWJJXE-s752.jpg

以上,为zabbix的简单部署以及使用方法,感谢各位 

 

 

 

 

 

 

 

 

 

本文出自 “心情依旧” 博客,转载请与作者联系!

监控工具Zabbix之原理及部署