Zabbix 监控平台

一、SNMP?

简单网络管理协议(snmp),由一组网络管理的标准组成,包含一个应用层协议,数据库模型和一组资源对象。该协议能够支持网络管理系统,用以检测连接到网络上的设备是否由任何引起管理上关注的情况。

SNMP管理的网络主要由三部分组成:

  • 被管理的设备
  • SNMP代理
  • 网络管理系统(NMS)

SNMP的工作模式:

  • NMS向agent采集数据,监控端向agent端发起收集数据请求;
  • agent向NMS报告数据,agent向监控端主动发送数据;
  • NMS强求agent修改配置,监控端向agent请求修改数据

SNMP的组件:

  • MIB:管理信息库,定义各个数据采集规范,实现了双方可接受的监控组件以及监控组件中数据存取各是的一个组件,将每一个被管理端的ID(OID)到对应名称的转换。每一个agent都有自己对应的mib库。
  • SMI:管理信息结构,用于定义通过网络管理协议可访问的对象的规则,SMI定义在MIB中使用的数据类型及网络资源在MIB中的名称或表示。
  • SNMP协议
    这里写图片描述

SNMP协议的版本

SNMP共有v1,v2,v3这三个版本

  • v1和v2都具有基本的读,写MIB功能
  • v2增加了警报,批量数据获取,管理站和管理站通信能力
  • v3在v2的基础上增加了USM,使用加密的数据和用户验证技术,提高了安全性
  • 另外,RMON是SNMP的一个重要扩展,为SNMP提供了子网流量,统计,分析能力。现有两个版本:Rmon:提供了OSI七层网络结构中网络层和数据链路层监视能力。Rmon2:提供了OSI七层网络结构中网络层之上各层的监视能力。

SNMP支持的网管操作

对于网络管理,我们面对的数据是设备的配置,参数,状态等信息,面对的操作是读取和设置;同时,因为网络设备众多,为了能及时得到设备的重要状态,还要求设备能主动的汇报重要状态,这就是报警功能。如下图,

这里写图片描述

  • Get:读取网络设备的状态信息
  • Set:远程配置设备参数
  • Trap:管理站及时获取设备的重要信息

SNMP的实现结构

在具体实现上,SNMP为管理员提供了一个网管平台(NMS),又称为管理站,负责网管命令的发出,数据存储,及数据分析。被监管的设备上运行一个SNMP代理(Agent),代理实现设备与管理站的SNMP通信。如下图,
这里写图片描述

管理站与代理端通过MIB进行接口统一,MIB定义了设备中的被管理对象。管理站和代理都实现了相应的MIB对象,使得双方可以时别对方的数据,实现通信。管理站向代理申请MIB定义的数据,代理识别后,将设备提供的相关状态或参数等数据转换为MIB定义的格式,应答给管理站,完成一次管理操作。

二、cacti和nagios

Cacti

Cacti是一套基于PHP,MySQL,SNMP及RRCTool开发的网络流量监测图形分析工具。利用SNMP已有的功能,周期性的采集收集数据,利用一个非常直观的数据图像展示出来,也能够让用户定义一个关注的指标的阈值,一旦数据超出阈值,也能够实现报警操作,但是它的报警功能很差,需要安装额外的第三方软件。
同时cacti也支持让我们自己写脚本,向每一个被监控端,通过snmp协议,发起数据采集请求,这些脚本我们需要让cacti定义一个任务计划。数据采集到以后,cacti会将他存储在一个数据库当中。cacti是使用php研发的,所以它的前端能够利用php强大功能完成数据的展示,也就意味着它能够从数据库中提取到数据,并临时的绘制一幅数据走势图。

nagios

Nagios是一款开源的免费网络监控工具,能有效的监控windows,linux和unix的主机状态,交换机路由器等网络设备,打印机等。在系统或服务器状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
nagios拥有强大的报警机制,只关心超出阈值的状态转换,实现报警。不收集具体的数据,不展示数据。主要目的实现从软状态转换为硬状态实现报警,可以定义各种各样的报警策略。支持组建依赖关系。比如A依赖B,如果A发生故障,理论上报警后面的所有,而由于依赖机制,只会报警A,这样就会避免我们收到一大堆的报错。由于我们监控很多主机,一台主机上监控项也很多,这就会影响监控系统的I/O,所以不同的指标可以布置不同的监控系统,保证监控公平有序。

三、Zabbix简介

1 zabbix简介

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等对目标进行监控。

2 zabbix架构中的组件

这里写图片描述

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方式)

3 zabbix监控范畴

  • 硬件监控:Zabbix IPMI Interface
  • 系统监控:Zabbix Agent Interface
  • Java监控:Zabbix JMX Interface
  • 网络设备监控:Zabbix Agent UserParameter
  • MySQL数据库监控:percona-monitoring-pldlgins
  • URL监控:Zabbix Web监控

4 zabbix特点

  • 安装配置简单,学习成本低
  • 支持多语言(包括中文)
  • 免费开源
  • 自动发现服务器与网络设备
  • 分布式监控以及Web集中管理功能
  • 可以无agent
  • 用户安全认证和柔软的授权
  • 通过Web界面设置或查看监视结果
  • email等通知功能
    等等。。。。。。

四、zabbix配置

主机环境: rhel7.3 selinux and iptables disabled
参考文档:www.zabbix.com

1. 安装 zabbix

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

2. 配置 mysql 数据库

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  #导入数据库表

3. 配置 zabbix server

[root@vm5 zabbix]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=redhat

4. 配置 php

[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

5. 启动 zabbix server、zabbix agent、httpd

[root@vm5 ~]# systemctl restart zabbix-server zabbix-agent httpd
[root@vm5 ~]# systemctl enable zabbix-server zabbix-agent httpd mariadb

6. 登陆 zabbix web

http://172.25.254.201/zabbix 按照提示完成安装并登陆:
Username: Admin
Password: zabbix

这里写图片描述

这里写图片描述

7. 添加 agent 主机

在被监控端安装软件包:
[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网页配置

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采取某个操作。

1、item(监控项)

item是zabbix服务用于监控一个特定对象上的一个特定指标,并负责针对其收集相关的监控数据。比如CPU每分钟的平均负载可以是一个item,每五分钟的平均负载是一个item,某特定网络接口接收报文的速率又是一个item等。每一个item都拥有相应的类型。例如“zabbix agent“,“SNMP“,“External check“,“IPMI agent“,“SSH agent“,“JMX agent“等。zabbix服务器会使用相应类型的协议或机制同被监控端通信。

item key

每一个item都有其专用的“Key“,zabbix服务器在与被监控端通信时就使用相应的协议或机制取询问被监控端这个Key的值,被监控端则调用与此key对应的监控脚本获取数据并返回给服务器端。zabbix有许多预定义的key,详细信息请访问官网。对于每一个item,zabbix服务器还定义了怎么存储这个item的数据,以及数据采集的频率和历史数据的保存时长等。多个item还可以归类为一个由“application“定义的逻辑组。

item

默认的item有多种类型:
    网卡流量相关:
        net.if.in[if,<mode>]    []:可选   <>:必须
            if:接口,如eth0
            mode:bytes,packets,errors,dropped
        net.if.out[if,<mode>]
        net.if.total[if,<mode>]
    端口相关:  监控端口是否处于打开状态
        net.tcp.listen[port]  tcp协议监听了哪些端口
        net.tcp.port[<ip>,<port>]
        net.service[service,<ip>,<port>]  基于tcp协议的某个服务
        net.udp.listen[port]
    进程相关:
        kernel.maxfiles  内核所允许打开文件的最大数
        kernel.maxproc   内核所允许当前用户运行的最大进程数
    cpu相关:
        system.cpu.intr   中断次数
        system.cpu.load[<cpu>,<mode>]   负载
        system.cpu.num[<type>]  cpu的核数
        system.cpu.switches  上下文切换的次数
        system.cpu.util[<cpu>,<type>,<mode>]  利用率
    磁盘I/O相关:
        vfs.dev.read[<device>,<type>,<mode>]
        虚拟文件接口哪个设备什么类型什么模式进行读取
        vfs.dev.write[<device>,<type>,<mode>]
        哪个设备什么类型什么模式写入
        vfs.fs.inode[fs,<mode>]
        哪个文件系统的哪个模式的inode可用量

一旦默认item无法实现想要的功能,就可以自定义item实现
自定义item: 关键:选取唯一的key; 命令:收集数据的命令或脚本;

创建item

这里写图片描述
历史数据:采样生成的数据
趋势数据:每小时的最大值,最小值,平均值,等
这里写图片描述

2、graph

配置 –> 主机 –> 图像 –> 创建图像
将上面创建出来的两个item同时放进一个图中:
这里写图片描述
图像类型: 线状图,堆叠图,饼图,渐变图

3、触发器(Trigger)

“监控项“仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,“触发器“正是用于为监控项所收集的数据定义阈值。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)

创建trigger(触发器)

配置 –>主机 –>触发器 –> 创建触发器
创建表达式的时候可以自己手动写入,也可以通过选择系统已存在的配置进行设置。点击添加即可配置。
这里写图片描述

查看触发的事件

每一次状态转换都会触发一个事件
监控 –> 问题
这里写图片描述

4、自定义发送邮件

创建发送邮件的用户
管理 –> 用户 –> 创建用户
这里写图片描述
这里写图片描述
配置 –> 动作 –> 创建动作
这里写图片描述
操作:
这里写图片描述

报警升级

这里写图片描述
步骤持续时间:每一次报警区间为多长时间,比如,五分钟黄埔仍然报警怎么办? 告警升级。从第一次报警到第二次报警之间,可以执行某些命令,也可以继续发送某些邮件。发邮件:可以发送给某个人或者某个组。是仅发送消息还是?这里选择发送消息,All表示所有方式都发消息。使用默认消息发送,什么条件发送,可以继续添加,也可以不添加。

8. 在 zabbix server 上添加zabbix agent 主机的几种方法

1。手动添加主机
配置-->主机-->创建主机-->填写信息
2。自动发现主机
配置--> 自动发现主机--> 创建发现规则--> 填写规则,可以给发现的主机选择添加相应的模板
3。自动注册
配置--> 动作--> 事件源:自动注册,创建动作--> 填写名称,触发条件等,可以选择添加的主机添加相应的模板

来看看 zabbix 是怎样添加服务监控项的,利用 zabbix 自带的监控模版,以 http 服务为例:

配置--> 主机--> vm6--> 模板--> 选择--> 添加

这里写图片描述

添加成功

这里写图片描述

9. 监控 zabbix server 上的 mysql 服务

在/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 图形 可以看到两个新的监控图形

这里写图片描述

这里写图片描述
2018-02-03

参考snmp博客:https://www.cnblogs.com/sddai/p/5911031.html

猜你喜欢

转载自blog.csdn.net/qq_36462472/article/details/79533003