首页 > 代码库 > 监控工具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/
第一次访问的时候会提示如下界面
说明我们必须安装zabiix,上面有个警告,说明直接依赖于php默认配置的时区是不安全的,因此最好手动配置时区,所以我们需要更改时区
[root@node3 conf.d]# vim /etc/php.ini
date.timezone = Asia/Shanghai
/etc/init.d/httpd restart
再次刷新页面,如果没有提示错误信息,则选择下一步
提示检测所有条件是否符合 全部ok则可以进行下一步了
提示后端类型,因为我们安装的是zabbix-mysql 所有只支持mysql数据库,服务器是10.12.33.58 端口为3306 0为默认则不需要更改,数据库为zabbix 用户名和密码为我们刚授权的用户权限,输入完后一定要选择testconnection 不然无法下一步
当前zabbix server在什么地方,因为web需要跟server进行交互的,而server就是本机,所以不用更改,而port就是10051,name是可选的,如果zabbix server比较多的话可以为其取名,这里我们就不对其命名了,直接下一步
提示信息,告知我们大概信息是这样是否继续安装
选择finish,直接下一步,接下来跳到登录页面
登录的时候第一次要验证,用户名默认为admin,密码为zabbix
选择登录,可以看到如下界面
zabiix的用户
很显然我们使用zabbix必须得有用户的,如上的菜单每个菜单下面都有子菜单,选择Administration 在子菜单选择User
默认显示的是组,而默认情况下是有俩用户 一个是admin 另一个则是guest
主界面
如果提示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 :::*
接下来就可以对其进行监控了,要想监控其主机,需要新加配置才可以进行
添加监控
提示如下信息栏
Host 主机自身的属性
Tamplates 关联的模板
IPMI ipmi的属性配置
Macros zabbix的宏(变量
Host inyentory 企业资产盘点
这里我们只更改host这一项即可:
主机一定要归类到组里面去的,如果没有一个适合我们的,我们可以定义新的组
Host name 跟agentinterfaces 需要注意的是监控接口地址定义的主机才是最关键的
端口为10050,表示使用agent进行连接的,如果对端不支持agent,下面也有列出其他连接方式
查看其状态:
回到主页面查看dashboard
查看当前监控信息:
Number of hosts (monitored/not monitored/templates) | 25 | 1 / 1 / 23 |
监控的主机有1个,没有监控的主机有1个
但是我们现在监控的主机的确是在线的而且能连接agent,说明主机只是处于活动状态,但是我们还需要监控对方的其他信息,比如网络网卡发送数据量等等
因此,我们还需要定义其监控的监控项
定义监控项
创建一个监控项
这里显示的是当前已有的items,依旧选择create items
Host
Name
Type item的类型,使用哪种方法采集而来的数据,我们这里需要使用agent进行监控
key 对zabbix items而言,key用来标记items的键,我们也称之为标示符,监控对象一定是可采集数据的,为了唯一的标示这个指标,我们要为其做标记,就叫做key,所以对于zabbix而言 key是不能重名的
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
看到其自动建立了名为NetTraffic 的application
回到主页面并查看监控项
当前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,每个节点对应的监控项:
可以看到其监控项,上次数据是2016 当前数据是+476,我们选择Graph 可以查看图形
那么我们对这个节点进行ping操作,使其产生一些数据流量,如下所示:
如果我们想对其监控多个状态只需要再加监控项即可
新加监控项
新加监控多个状态
添加新监控项
添加监控CPU
需要再次创建items
再添加,使其监控cpu的使用率
key为system.cpu.intr 意思是cpu的中断次数
Units 不用填写因为这次与上次没有关系,所以不用计算,而且一定是无符号整数
可看到,我们的一个主机的application 被分为了两个,虽然都是同一个主机
因为这里是根据application为主 建立分组的,此时我们发现所有的application都采集到了数据
使同一application工作在同一张图上
我们自定义某几个指标放在一个图进行展示
可以选择Preview先预览一下效果
选择Save 进行保存
使用screens将图整合
显示为几行几列,这里为1行2列
加图:
如下所示:
接下来再添加网络图
以上,为zabbix的简单部署以及使用方法,感谢各位
本文出自 “心情依旧” 博客,转载请与作者联系!
监控工具Zabbix之原理及部署