【数据存储系列】手牵手学习Zabbix
Zabbix
1 | * Zabbix概述 |
1. 监控系统的意义
1.1 为什么需要监控系统
思考:下列监控中类似的痛点是否遇见过?
- 1、一个系统挂了,发现没有监控,原来是因为人工一个个遗漏了。(监控人工添加导致遗漏)
- 2、有100台服务器,每台上有5-10个磁盘都要监控他们的磁盘空间、读写速度等指标,需要一个个加入到监控系统中。(同一类的监控对象需要重复添加)
- 3、一台服务器挂了,结果虚拟机、网络、宿主机都报故障。(无法定位root cause)
- 4、希望监控一些业务指标,却发现没有方法可以监控。(无法实现个性化监控)
…… …… ……
对于运维人员来说,监控是非常重要的,因为如果想要保证线上业务整体能够稳定运行,那么我们则需要实时关注与其相关的各项指标是否正常,而一个业务系统的背后,往往存在着很多的服务器、网络设备等硬件资源,如果我们想要能够更加方便的、集中的监控他们,则需要依靠一些外部的工具
监控的初衷就是当某些指标不符合我们的需求时,能够在第一时间发现异常。
1.2 常见的监控系统
Cacti
以监控数据流量为主,以波形图形方式显示数据。监控指定服务的数据流量。如:mysql
Cacti官方网站地址:https:///www.cacti.net/
Cacti是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监测图形分析工具,它的数据采集主要是用snmp服务get数据,然后RRDtool存储、更新数据和绘图,当用户需要查看数据的时候用RRDtool生成图表呈现给用户。
Nagios
Nagios官方网站地址:https://www.nagios.org/
Nagios是一款开源的计算机和网络监视工具,能有效监控主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。 Nagios支持客户端的数据采集,通过编写客户端插件,可以获取各种监控数据,并提供了Web管理界面进行数据查询。
Prometheus
Prometheus官方网站地址:https://prometheus.io/docs/introduction/overview/
Prometheus 是一套开源的系统监控报警框架。它受启发于 Google 的 Brogmon 监控系统,由工作在 SoundCloud 的前 google 员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016年,Prometheus 加入Cloud Native Computing Foundation(云原生云计算基金会)
Prometheus具有诸多的数据模型,采用pull-push 方式采集数据,基于时间序列数据库,所以Prometheus对于时间序列的数据具有查询优势。此外,Prometheus 适用于微服务的体系架构。
Zabbix
Zabbix官方网站地址:https://www.zabbix.com/cn/community
Zabbix 是一种企业级的分布式开源监控解决方案,一款能够监控众多网络参数和服务器的健康度和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的警报。这样可以快速相应服务器问题。Zabbix 基于存储的数据提供出色的报告和数据可视化。这些功能使得 Zabbix 成为容量规划的理想选择。
Zabbix 支持轮询和被动捕获。所有的 Zabbix 报告、统计信息和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您的网络状态和服务器健康状况可以从任何地方进行评估。在经过适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于拥有少量服务器的小型组织,还是拥有大量服务器的大型公司而言,同样适用。
2. Zabbix概述
2.1 概述:
官网介绍:Zabbix是企业级开源监控解决方案,支持实时监控数万台服务器、虚拟机和网络设备,采集百万级监控指标。 Zabbix完全开源免费。
为什么选择Zabbix?
2.2 zabbix主要功能
- 数据收集:从被监控端 间隔的收集数据
- 2.灵活的阈值定义:定义故障的临界值,达到阈值就触发报警,Zabbix中称为触发器(trigger)
- 3.高级警告配置:可以自定义告警升级(escalation)、接收者及告警方式;通过远程命令实行自动化动作
- 4.实时绘图:通过内置的绘图引擎实现监控数据实时绘图
- 5.具备应对复杂环境情况:通过Zabbix proxy可以非常容易的创建远程监控
思考:Zabbix可以监控硬件资源(主机、交换机、路由器),如何实现的监控呢?
2.3 .zabbix监控范畴
- 硬件监控:Zabbix IPMI Interface,通过IPMI接口进行监控,比如电压、温度、风扇状态、电源状态等
- 系统监控:Zabbix Agent Interface,收集cpu相关指标数据、磁盘的 IO 相关数据、内存数据、其他应用服务的相关指标数据等,当需从被监控端收集数据,被监控端应安装 agent 程序
- java 监控:通过JMX进行监控java JVM虚拟机
- 网络设备监控:Zabbix SNMP Interface,通过SNMP协议与被监控对象进行通信,SNMP协议的全称为simple network management protocol,被译为简单网络管理协议
- 应用服务监控:Zabbix Agent UserParameter, agent指的就是被监控端
- MySQL数据库监控:percona-monitoring-plulgins,对mysql 的监控通过monitoring 插件
- URL监控:Zabbix Web 监控
2.4 版本
截图来自官网:https://www.zabbix.com/cn/life_cycle_and_release_policy
Zabbix版本发布计划
我们目前的发布计划周期为六个月,每六个月将有一个新的Zabbix稳定版本发布。
Zabbix首个发行版本为Zabbix 1.0 alpha1,其发行时间为2001年4月7日。随着版本的升级,其功能特性也在不断地增强和完善。
- 1.X版本,具备较完备的功能;
- 2.X版本,增强了很多新的功能特性,如对JMX、自动发现、LLD(Low Level Discovery)、虚拟化功能的原生支持。至此,Zabbix在国内逐渐流行(2013年前后开始逐渐被大多数公司所接受),成为大多数公司首选的监控系统。
- 3.X版本,对用户体验进行了优化。随着版本的不断迭代,功能持续增强,性能逐步提高。
非LTS的版本均为实验版本,每6个月发布一个新版本。因此,对于生产环境版本的选择,我们尽量选择LTS版本,可享受长期更新支持服务,这样即使出现安全漏洞等问题,也会得到更新支持。
3. Zabbix 原理
3.1 软件架构
Zabbix的通用架构采用客户端/服务器端模式,分布式架构采用客户端/代理端/服务器端模式,Zabbix-Server将采集到的数据持久地存储到数据库中,用前端UI友好地展示给用户。
客户端采集数据,代理服务器做代理,服务器端处理数据的架构模式:
3.2 监控原理
Zabbix 采集数据的方式众多,但都是基于Client/Server 或 Client/Proxy/Server 架构的。
Client/Proxy/Server架构只是在Client/Server 的基础上安装了数据传输代理程序(Proxy),通过Proxy代理采集分节点下 Client的数据,统一提交到Server,再由Server集中管配。依靠这种方式,可以部署多主机、跨网络的大型分布式监控系统
(1)server+agentd 模式:
使用于小规模,一般小于500台可以使用server+agentd模式
1 | 将zabbix agent 部署到被监控主机上,由agent采集数据,发送给 zabbix server,zabbix server从agent 接收到的数据存储于database数据当中,查看监控的各种数据信息,需要 zabbix web 平台 |
zabbix web是使用php编写的,想要使用zabbix web展示相关监控信息,需要依赖LAMP或LNMP环境
(2)server+proxy+agent模式:
当监控规模变得庞大时,需要使用 zabbix 分布式监控,每个区域设置台代理主机,采集区域内的被监控对象的信息被agent采集,提交给代理主机,zabbix proxy代理主机在将收集到的信息,统一交给 zabbix server处理。
分摊了zabbix server的压力,同时,我们还能够通过统一的监控入口,监控所有的对象
3.3 术语&组件
- zabbix agent:部署在被监控主机上,负责被监控主机的数据,并将数据发送给zabbix server。
- zabbix server:负责接收agent发送的报告信息,并且负责组织配置信息、统计信息、操作数据等。
- zabbix database:用于存储所有zabbix的配置信息、监控数据的数据库。
- zabbix web:zabbix的web界面,管理员通过web界面管理zabbix配置以及查看zabbix相关监控信息,可以单独部署在独立的服务器上。
- zabbix proxy:可选组件,用于分布式监控环境中,zabbix proxy代表server端,完成局部区域内的信息收集,最终统一发往server端。
3.4 工作模式
Zabbix-Agent的工作模式可以分为主动模式(Active Mode)和被动模式(Passive Mode)
- zabbix被动模式:此模式为zabbix默认的工作模式,由zabbix server 向zabbix agent 发出指令获取数据,zabbix agent去被动地去获取数据并返回给zabbix server,此模式的最大问题就是会增加zabbix server的工作量,在大量的服务器环境下,zabbix server可能会造成延时。
- zabbix主动模式:即由zabbix agent 主动采集数据并返回给zabbix server,不需要zabbix server 的另行干预,因此使用主动模式能在一定程序上减轻zabbix server的压力。
4. Zabbix 安装
4.1 Zabbix Server安装
5.0 版本对基础环境的要求有⼤的变化,最⼤的就是对 php 版本的要求,最低要求 7.2.0 版本,对 php 扩展组件版本也有要求,详⻅官⽹⽂档
https://www.zabbix.com/documentation/current/manual/installation/requirements
准备好⼀台linux服务器,ip地址,设置
1 | [root@zabbix-server01 ~]# hostname |
安装zabbix服务端配置
1 | 1.获取zabbix官⽅源 |
检查组件是否正常:
输入数据库密码
下一步:
安装细节:
成功安装:
登录账号为 Admin,密码:zabbix,注意⼤⼩写
切换语言:
中文乱码解决
1 | [root@bogon ~]# cd /usr/share/zabbix/assets/fonts/ |
4.2 Zabbix Agent2安装
Zabbix 5.0 版本推出了使⽤ go 语⾔重写的 Agent2,也是 5.0 版本新特性, Agent2 有如下特性:
- 完成的插件框架⽀持,可扩张服务及应⽤监控
- ⽀持灵活的采集周期调度
- 更⾼效的数据采集及传输
- 可完全替换先有的 agent
由于使⽤ go 语⾔编写,编译安装与之前版本有所区别。 Agent2 默认使⽤的 10050 端⼝,与 Zabbix Agent 端⼝⼀样,不修改端⼝情况 下,同⼀台机器不能同时启动 Zabbix Agent 与 Zabbix Agent2
再准备⼀台linux虚拟机,且配置好专有的yum源
1 | rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm |
检测server-client
zabbix-server
1 | [root@bogon zabbix-server-mysql-5.0.24]# yum install zabbix-get -y |
5. 监控配置详解
在Zabbix-Web管理界面中添加一个主机,其完整的配置流程可以简单描述为:
1 | Host groups(主机组)→Hosts(主机)→Applications(监控项组)→Items(监控项)→Triggers(触发器)→Problems(故障)→Actions(处理动作)→User groups(用户组)→Users(用户)→Medias(告警方式)→Action log(日志审计) |
在实际使用时,Items、Triggers、Graphs(图形)不必每台设备(Host)都手动配置,通常采用模板进行批量配置即可。模板就是对设备的监控项等监控配置内容的抽象,可以将其链接(Link)对应到同一种监控类型的设备
5.1 添加主机组
hostgroup(主机组):”主机组”也被称为”主机群组”,是由具有相同属性、特征、角色的多个主机组成的逻辑单元。
分组的目的是将同一属性的主机、模板进行分类。在Zabbix的软件设计规则中,已规定主机、模板必须属于一个分组。
对同一属性的主机或者模板应归类到相同组,相关原则如下:
- 以地理位置纬度进行划分。
- 以业务为单位划分组。
- 以机器用途进行划分。
- 以系统版本进行划分。
- 以应用程序来划分组。
- 其他方式等。
如何添加主机组???
依次单击Configuration → Host groups → Create host group按钮,打开添加主机组界面,输入主机组名“web app”,单击Add按钮添加,可以看到如下界面:
添加主机组后的相关信息保存在数据库中,如果想在数据库中查询主机组,则可运行下面的命令:
1 | [root@linux30 ~]# mysql -uzabbix -pzabbix zabbix -e "select * from hstgrp"; |
5.2 添加模板
监控项、触发器、图形、Web、Discovery等都存在于主机之上,由于多个主机会使用相同的监控配置,因此可以对这部分同类的数据进行归纳抽象,即将这些数据做成模板。当我们需要对其他监控数据进行配置时,只需要为相应的主机添加对应的模板即可。
添加模板(Templates)的步骤为:依次单击Configuration→Templates→Create template按钮。
5.3 添加主机
添加主机(Hosts)的目的是对具体的设备进行监控,步骤为:依次单击Configuration→Hosts→Create host按钮,填写主机名,选择主机组为“Linux servers”,填写Agent的IP地址,勾选“Enabled”(启用),单击Add按钮进行添加。
添加主机后,需要添加模板。单击Templates,搜索模板名称,输入Linux,出现了“Template OS Linux”模板,单击Add按钮。最后单击Add按钮,即可完成模板的添加。
注意:如果要从主机中删除模板,选择“Unlink”,并不会清除已经添加的监控数据;而选择“Unlink and clear”,则会删除链接到主机的模板,并且会清除主机中的监控数据。配置IPMI、Macros、Host inventory的方法与上相同。
在数据库中,模板是存储在hosts表中的。在MySQL中查看hosts表结构如下:
1 | [root@linux30 ~]# mysql -uzabbix -pzabbix zabbix -e "show create table hosts\G"; |
5.4 新建监控项
简介
监控项(item):某个监控指标,在zabbix中就被称之为一个item,某个主机中可能有多个需要被监控的指标,也就是说,某个host中可能有多个item
键(key 、item key):如果想要获取监控项对应的数据,则必须通过某个key去获取,我们可以把key想象成调用对应命令的”命令别名”,zabbix中自带一些key,这些key往往比较通用,比如,通过这些key,我们可以监控cpu,内存,硬盘等常用指标,获取不同的指标信息,需要不同的key
添加监控项
所有的监控项都是依赖于主机的。这就是当我们要配置一个监控项时,先要进入 配置 → 主机 页面查找到新建的主机。
在’Linux31’行中,监控项(Items)的链接旁的数量会显示为’0’。点击这个链接,然后点击创建监控项(Create item),将会显示一个监控项定义表格。
对于监控项的示例,需要输入以下必要的信息:
名称(Name)
- 输入 CPU Load 作为值。在列表中和其他地方,都会显示这个值作为监控项名称。
值(Key)
- 手动输入 system.cpu.load 作为值。这是监控项的一个技术上的名称,用于识别获取信息的类型。这个特定值需要是Zabbix Agent预定义值中的一种。
信息类型(Type of information)
- 在此处选择 *Numeric (float)*。这个属性定义了想获得数据的格式。
查看数据
当一个监控项定义完成后,你可能好奇它具体获得了什么值。前往监控(Monitoring) → 最新数据(Latest data), 在过滤器中选择刚才新建的主机,然后点击*应用(Apply)*。
然后点击**- other -**前面的 + ,然后查看你之前定义的监控项和获得的值。
图表
当监控项运行了一段时间后,可以查看可视化图表。 简单图表 适用于任何被监控的数值型(numeric)监控项,且不需要额外的配置。这些图表会在运行时生成。
前往监控(Monitoring) → 最新数据(Latest data),然后点击监控项后的’图表(Graph)’链接以查看图表。
5.5 新建触发器
概述
监控项只是用于收集数据。如果需要自动评估收到的数据,我们则需要定义触发器。触发器包含了一个表达式,这个表达式定义了数据的可接受的阈值级别。
如果收到的数据超过了这个定义好的级别,触发器将被“触发”,或者进入“异常(Problem)”状态——从而引起我们的注意,让我们知道有问题发生。如果数据再次恢复到合理的范围,触发器将会到“正常(Ok)”状态。
添加触发器
为监控项配置触发器,前往配置(Configuration) → 主机(Hosts),找到’(Linux31)’,点击旁边的触发器(Triggers) ,然后点击创建触发器(Create trigger)。这将会向我们展现一个触发器定义表单。
1 | Name:CPU load too high on "Linux31" for 1 minutes |
确认表达式输入正确,直到最后一个符号。此处,监控项值(system.cpu.load)用于指出具体的监控项。这个特定的表达式大致是说如果1分钟内,CPU负载的平均值超过1,那么就触发了问题的阈值。你可以查看更多的触发器表达式语法信息。
完成后,点击添加(Add)。新的触发器将会显示在触发器列表中。
显示触发器状态
当一个触发器定义完毕后,你可能想查看它的状态。
如果CPU负载超过了你在触发器中定义的阈值,这个问题将显示在监控(Monitoring) → 问题(Problems)中。
1 | # 增大CPU负载 |
5.6 新建报警媒介类型
邮件报警
5.7 新建动作(告警)
测试:
1 | [root@bogon /]# dd if=/dev/zero of=/test count=4 bs=102400000 |