简单网络管理协议(snmp),由一组网络管理的标准组成,包含一个应用层协议,数据库模型和一组资源对象。该协议能够支持网络管理系统,用以检测连接到网络上的设备是否由任何引起管理上关注的情况。
SNMP共有v1,v2,v3这三个版本
对于网络管理,我们面对的数据是设备的配置,参数,状态等信息,面对的操作是读取和设置;同时,因为网络设备众多,为了能及时得到设备的重要状态,还要求设备能主动的汇报重要状态,这就是报警功能。如下图,
在具体实现上,SNMP为管理员提供了一个网管平台(NMS),又称为管理站,负责网管命令的发出,数据存储,及数据分析。被监管的设备上运行一个SNMP代理(Agent),代理实现设备与管理站的SNMP通信。如下图,
管理站与代理端通过MIB进行接口统一,MIB定义了设备中的被管理对象。管理站和代理都实现了相应的MIB对象,使得双方可以时别对方的数据,实现通信。管理站向代理申请MIB定义的数据,代理识别后,将设备提供的相关状态或参数等数据转换为MIB定义的格式,应答给管理站,完成一次管理操作。
Cacti是一套基于PHP,MySQL,SNMP及RRCTool开发的网络流量监测图形分析工具。利用SNMP已有的功能,周期性的采集收集数据,利用一个非常直观的数据图像展示出来,也能够让用户定义一个关注的指标的阈值,一旦数据超出阈值,也能够实现报警操作,但是它的报警功能很差,需要安装额外的第三方软件。
同时cacti也支持让我们自己写脚本,向每一个被监控端,通过snmp协议,发起数据采集请求,这些脚本我们需要让cacti定义一个任务计划。数据采集到以后,cacti会将他存储在一个数据库当中。cacti是使用php研发的,所以它的前端能够利用php强大功能完成数据的展示,也就意味着它能够从数据库中提取到数据,并临时的绘制一幅数据走势图。
Nagios是一款开源的免费网络监控工具,能有效的监控windows,linux和unix的主机状态,交换机路由器等网络设备,打印机等。在系统或服务器状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
nagios拥有强大的报警机制,只关心超出阈值的状态转换,实现报警。不收集具体的数据,不展示数据。主要目的实现从软状态转换为硬状态实现报警,可以定义各种各样的报警策略。支持组建依赖关系。比如A依赖B,如果A发生故障,理论上报警后面的所有,而由于依赖机制,只会报警A,这样就会避免我们收到一大堆的报错。由于我们监控很多主机,一台主机上监控项也很多,这就会影响监控系统的I/O,所以不同的指标可以布置不同的监控系统,保证监控公平有序。
zabbix是由Alexel Vladishev开发的一种网络监视,管理系统,基于Server-Client架构。可用于监控各种网络服务,服务器和网络机器等的状态。可以使用MySQL,PostGreSQL,SQLite,Oracle等存储数据。Server端基于C语言,Web管理器frontend则是基于PHP所制作的。在客户端如UNIX,Windows中安装Zabbix Agent之后,可监视CPU Load,网络使用状况,硬盘容量等各种状态。而就算没有安装Agent在监视对象中,Zabbix也可以经由SNMP,TCP,ICMP,利用IPMI,SSH,telnet等对目标进行监控。
zabbix由三部分构成,zabbix-server,可选组件zabbix-agent和可选组件zabbix-proxy组成的。
zabbix-server:C语言编写,可以通过SNMP,zabbix agent,ping,端口监测等方法提供对远程服务器/网络状态的监视,实现数据收集等功能。它可以运行在linux,freeBSD,AIX,等平台之上。
zabbix-agent:C语言编写,安装在被监视的目标服务器上,它主要完成对硬件信息或操作系统有关的内存,CPU等信息的收集。zabbix-agent可以运行在Linux,Solaris,HP-UX,AIX,Windows (2000/2003/XP/Visal)等系统之上。
zabbix-proxy:时从监控设备收集监测数据和发送到zabbix-server的进程,属于代表zabbix-server的运行所有收集到的数据被暂时存放的=在代理服务器,之后统一由代理服务器转发给zabbix-server所属的服务器,不数proxy时可选的,但对于分担单个zabbix服务器的负载时非常有益的。如果仅在zabbix-proxy上收集数据,那么将减轻zabbix-server上的进程对cpu资源和磁盘I/O的消耗。zabbix-proxy在没有本地管理员的情况下,是集中监控远程区域,分支和网络的理想解决方案。
zabbix-server可以单独监视远程服务器的服务状态;同时也可以配合zabbix-agent配合,可以轮询zabbix-agent主动接收监视数据(trapping方式),同时还可被动接收zabbix-agent发送的数据(trapping方式)
主机环境: rhel7.3 selinux and iptables disabled
参考文档:www.zabbix.com
zabbix-server:
在服务端同样也安装上agent监控主机。
yum install zabbix zabbix-server zabbix-get zabbix-mysql zabbix-web zabbix-web-mysql zabbix-agent zabbix-sender
zabbix-get :zabbix服务端主动拉取信息的软件
zabbix-sender :zabbix客户端主动将信息上传给服务端所需要的软件
zabbix-mysql :安装数据库
zabbix-web zabbix-web-mysql :安装网页配置zabbix
软件依赖性:
fping-3.10-1.el7.x86_64.rpm
iksemel-1.4-2.el7.centos.x86_64.rpm
php-bcmath-5.4.16-42.el7.x86_64.rpm
php-mbstring-5.4.16-42.el7.x86_64.rpm
zabbix客户端:
yum install zabbix zabbix-agent zabbix-sender
zabbix数据库可以和zabbix服务器分离,采用专门的mysql服务器存储数据,此时要给zabbix数据库授予相应的权限
[root@vm5 ~]# mysql_secure_installation
[root@vm5 ~]# mysql -p
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'redhat';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'%' identified by 'redhat';
MariaDB [(none)]> quit
[root@vm5 ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.6/
[root@vm5 zabbix-server-mysql-3.4.6]# zcat create.sql.gz | mysql -uzabbix -predhat zabbix #导入数据库表
[root@vm5 zabbix]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=redhat
[root@vm5 ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
[root@vm5 ~]# vim /etc/php.ini
date.timezone = Asia/Shanghai
[root@vm5 ~]# systemctl restart zabbix-server zabbix-agent httpd
[root@vm5 ~]# systemctl enable zabbix-server zabbix-agent httpd mariadb
http://172.25.254.201/zabbix 按照提示完成安装并登陆:
Username: Admin
Password: zabbix
在被监控端安装软件包:
[root@vm6 ~]# yum install zabbix-agent-3.4.6-1.el7.x86_64.rpm -y
[root@vm6 zabbix]# vim zabbix_agentd.conf
Server=172.25.254.201 #允许谁来取数据
ServerActive=172.25.254.201 #允许向谁报告数据
Hostname=vm6
#当zabbix策略为主动发现时,主机将通知给zabbix-server的主机名。当zabbix支持各主机推送数据时,这个名字要唯一。
选择这个人图标。可以选择中文版本。
zabbix完整的监控配置流程大体上由如下步骤组成:并非必须
Host group –> Host –> Application –> Items –> Trigger –> Events –> Action –> User group –> User –> Media –> graph –> screen
application:可以将多个功能相近的item定义在一起,以便统一管理。
每一个被监控主机主机上都有N各监控项,每个监控项都要通过或主动或被动方式向服务器端发送数据,服务器上收集到的数据,都要保存在database中,database中的数据可以通过graph展示,graph展示的数据可以通过screen用一个机和的方式予以显示。 我们定义的这些监控项所产生的数据有一个合理区间,所以我们需要去定义一个Trigger,由Trigger来触发事件,从而由action当中的operation采取某个操作。
item是zabbix服务用于监控一个特定对象上的一个特定指标,并负责针对其收集相关的监控数据。比如CPU每分钟的平均负载可以是一个item,每五分钟的平均负载是一个item,某特定网络接口接收报文的速率又是一个item等。每一个item都拥有相应的类型。例如“zabbix agent“,“SNMP“,“External check“,“IPMI agent“,“SSH agent“,“JMX agent“等。zabbix服务器会使用相应类型的协议或机制同被监控端通信。
每一个item都有其专用的“Key“,zabbix服务器在与被监控端通信时就使用相应的协议或机制取询问被监控端这个Key的值,被监控端则调用与此key对应的监控脚本获取数据并返回给服务器端。zabbix有许多预定义的key,详细信息请访问官网。对于每一个item,zabbix服务器还定义了怎么存储这个item的数据,以及数据采集的频率和历史数据的保存时长等。多个item还可以归类为一个由“application“定义的逻辑组。
默认的item有多种类型:
网卡流量相关:
net.if.in[if,] []:可选 <>:必须
if:接口,如eth0
mode:bytes,packets,errors,dropped
net.if.out[if,]
net.if.total[if,]
端口相关: 监控端口是否处于打开状态
net.tcp.listen[port] tcp协议监听了哪些端口
net.tcp.port[,]
net.service[service,,] 基于tcp协议的某个服务
net.udp.listen[port]
进程相关:
kernel.maxfiles 内核所允许打开文件的最大数
kernel.maxproc 内核所允许当前用户运行的最大进程数
cpu相关:
system.cpu.intr 中断次数
system.cpu.load[,] 负载
system.cpu.num[] cpu的核数
system.cpu.switches 上下文切换的次数
system.cpu.util[,,] 利用率
磁盘I/O相关:
vfs.dev.read[,,]
虚拟文件接口哪个设备什么类型什么模式进行读取
vfs.dev.write[,,]
哪个设备什么类型什么模式写入
vfs.fs.inode[fs,]
哪个文件系统的哪个模式的inode可用量
一旦默认item无法实现想要的功能,就可以自定义item实现
自定义item: 关键:选取唯一的key; 命令:收集数据的命令或脚本;
历史数据:采样生成的数据
趋势数据:每小时的最大值,最小值,平均值,等
配置 –> 主机 –> 图像 –> 创建图像
将上面创建出来的两个item同时放进一个图中:
图像类型: 线状图,堆叠图,饼图,渐变图
“监控项“仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,“触发器“正是用于为监控项所收集的数据定义阈值。zabbix server每次接收到items新数据时,就会对item当前采样值进行判断,即与trigger的表达式进行比较;
每一个触发器仅能关联至一个监控项,但可以为一个监控项同时使用多个触发器。事实上,为一个监控项定义多个具有不同阈值的触发器,可以实现不同级别的报警功能。
一个触发器由一个表达式构成,它定义了监控项所采取的数据的一个阈值。
一旦某次采集的数据超出了此触发器定义的阈值,触发器状态会转换为“Problem“;而当采取的数据再次回归至合理范围内时,其状态将重新返回到“OK“
触发器表达式高度灵活,可以以之创建除非常复杂的测试条件。基本的触发器表达式格式如下所示:
{<server>:<key>.<function>(<parameter)}<operator><constant>
server:主机名称
key:主机上关系的相关监控项的key;
function:评估在及道德数据是否在合理范围内时所使用的函数,其评估过程可以根据采取的数据,当时的事件以及其他因素进行;
目前,触发器所支持的函数有avg,count,change,date,dayofweek,delta,diff,iregexp,last,max,min,nodata,now,sum等
parmeter:函数参数:大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#“作为前缀,则表示为最近几次的取值,如sun(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;
一个例子: {high1:system.cpu.load[all,avg1].last(0)}>3
high1主机上所有CPU的过去一分钟内的平均负载的最后一次取值大于3时将触发状态变换
对于last函数来说,last(0)相当于last(#1)
配置 –>主机 –>触发器 –> 创建触发器
创建表达式的时候可以自己手动写入,也可以通过选择系统已存在的配置进行设置。点击添加即可配置。
创建发送邮件的用户
管理 –> 用户 –> 创建用户
配置 –> 动作 –> 创建动作
操作:
步骤持续时间:每一次报警区间为多长时间,比如,五分钟黄埔仍然报警怎么办? 告警升级。从第一次报警到第二次报警之间,可以执行某些命令,也可以继续发送某些邮件。发邮件:可以发送给某个人或者某个组。是仅发送消息还是?这里选择发送消息,All表示所有方式都发消息。使用默认消息发送,什么条件发送,可以继续添加,也可以不添加。
1。手动添加主机
配置-->主机-->创建主机-->填写信息
2。自动发现主机
配置--> 自动发现主机--> 创建发现规则--> 填写规则,可以给发现的主机选择添加相应的模板
3。自动注册
配置--> 动作--> 事件源:自动注册,创建动作--> 填写名称,触发条件等,可以选择添加的主机添加相应的模板
来看看 zabbix 是怎样添加服务监控项的,利用 zabbix 自带的监控模版,以 http 服务为例:
配置--> 主机--> vm6--> 模板--> 选择--> 添加
添加成功
在/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf 文件中指定了 zabbix-agent 如何获取 mysql服务的各种信息,并在/var/lib/zabbix 目录中新建“.my.cnf”文件,用以指定 zabbix agent 如何登陆数据库,默认使用的是 zabbix 用户,可以在 zabbix_server.conf 文件中找到密码。
[root@vm5 ~]# mkdir /var/lib/zabbix
[root@vm5 ~]# vim /var/lib/zabbix/.my.cnf
[mysql]
host = localhost
user = zabbix
password = redhat
socket = /var/lib/mysql/mysql.sock
[mysqladmin]
host = localhost
user = zabbix
password = redhat
socket = /var/lib/mysql/mysql.sock
[root@vm5 templates]# systemctl restart zabbix-agent
如果是监控远程主机的 mysql 服务需要创建 zabbix 用户并授权
Mysql > GRANT USAGE ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'westos';
Mysql > FLUSH PRIVILEGES;
链接 mysql 监控模版
配置--> 主机--> Zabbix-server--> 模板--> 选择Template DB MySQL添加
点击 配置--> 主机 --> zabbix server 图形 可以看到两个新的监控图形
参考snmp博客:https://www.cnblogs.com/sddai/p/5911031.html