Zabbix 监控介绍

news2025/5/24 15:56:45
1、功能概述

通常所说的监控,会模糊地包含以上下个细分领域的内容:

  • 应用性能监控(Application Performance Monitoring)
  • 业务交易监控(Business Transaction Monitoring)
  • 网络性能监控(Network Monitoring)
  • 操作系统监控(System Monitoring)
  • 网络站点监控(Website Monitoring)

在任何一个 IT 业务环境中,都会存在各种各样的硬件设备、软件应用等。按照逻辑层次划分,我们可以将其划分

为了及时掌控基础环境和业务应用系统的可用性,需要获取各个组件的运行状态,如 CPU 的利用率、系统的负载、服务的运行、端口的连通、带宽流量、网站访问状态码等信息,而这一切都离不开监控系统的支撑。

2、实现原理
模块组成

一个监控系统的组成大体可以分为两部分:数据采集部分(客户端,Agent)和数据存储分析告警展示部分(服务器端,Server)

采集协议

按照支持的协议方式,监控系统数据采集可以分为两种:专用客户端采集和公用协议采集(SNMP、IPMI、SSH、Telnet等)。

采集模式

监控系统数据采集的工作模式可以分为被动模式(从服务器端到客户端采集数据,pull)和主动模式(客户端主动上报数据到服务器端,push)两种。通常,大多数监控系统都应该能同时支持这两种工作模式,但不同的监控系统由于采集技术不同,仅有部分能够同时支持这两种工作模式。

  • 一般来说,被动模式对监控控制端服务器的开销较大,适合小规模的监控环境;
  • 主动模式对监控控制端服务器的开销较小,适合大规模的监控环境。
监控指标

监控系统通常都支持一些常见的监控采集指标,如操作系统监控、应用程序监控等。部分常见的监控指标如下:

代理架构

对于大规模的监控环境,被监控节点多且监控类型多,监控产生的数据和网络连接开销非常大,数据采集方式除了使用主动采集模式,还需要使用代理架构,通过代理架构分摊服务器端的性能开销。另外,代理架构还支持跨地域、跨网络的分布式监控。常见的代理架构,即C/P/S(Client/Proxy/Server,客户端/代理端/服务器端,此处的 Client和 Agent意思等同,都表示客户端,下同)架构。采用中间代理将大大提高监控服务器端的处理速度,从而支撑构建大型分布式监控环境,从架构上支持异地多机房的需求。

对于小型的监控环境,被监控节点不多且处于同一地域或网络环境下,监控系统所需采集的监控数据量较少,采用 C/S(Client/Server,客户端/服务器端)架构即可满足监控业务需求。

数据存储

在监控客户端采集数据之后,会将数据上传给监控服务器端,监控服务器端程序将接收到的数据进行存储。通常监控系统会选用以下几种数据存储方式。

(1)本地存储。使用本地磁盘,基于文件的方式存储。

(2)使用时序数据库进行数据存储,如古老的环状数据库(Round Robin Database, RRD)等。近年来,随着时序数据技术的不断发展,出现了比较成熟的时序数据库,如 OpenTSDB (底层存储基于HBase)、Graphite、InfluxDB、Prometheus 等,与直接使用文件的存储方式相比,这些时序数据库更加高效。目前时序数据库领域相关技术的发展速度较快,应用的生态也逐步完善,基于时序数据库的监控系统会逐渐增多。从长远角度来看,使用时序数据库存储监控数据,是必然的发展趋势。

(3)使用数据库管理系统(Database Management System, DBMS)进行数据存储,如常见的MySQL、Oracle、SQL Server 等。使用这种数据库来存储监控数据,当数据量达到一定规模时,其读/写效率均会显著下降,数据库的压力比较大,通常优化方案思路有3种,一是减少数据的存储量;二是优化数据库本身,调整配置参数,优化运行环境;三是使用分布式数据库和数据库集群技术方案。故使用 DBMS 作为数据存储的监控系统,对数据库本身的掌握程度决定了监控系统能否在大规模环境下良好工作。

(4)使用 NoSQL数据库进行数据存储。NoSQL相对于 DBMS这种传统的数据库有着一些天然的优势,单机的QPS通常较高。但NoSQL本身并不是为监控系统设计的,在数据结构存储方面存在一些缺陷,故直接采用NoSQL作为监控数据存储的监控系统产品较少。

(5)使用列存储数据库进行数据存储。列存储数据库由于其设计之初专为大数据而有所考虑,故无须担心其存储容量,底层均有良好的解决方案。但由于其部署、运维均较为复杂,故一般监控系统也不会常采用这种技术作为数据库存储。这方面的数据库代表为HBase。

(6)使用全文搜索引擎数据库进行监控数据存储。这方面的代表是Elasticsearch,其作为监控数据库存储监控数据具有天然的优势,支持集群、分布式部署、容灾,并且集群能够提供较高的性能。目前采用全文搜索引擎数据库进行监控数据存储,典型的代表是 ELK 套件,而Zabbix监控系统也在这方面进行了尝试,在Zabbix 4.0中可以选用Elasticsearch作为数据库存储。

以上我们看到在不同的场合下监控系统对数据的存储要求会不同,因此,有些监控系统产品直接将数据库存储的选项交给了使用者来决定,会同时支持多种方式的数据库存储。

告警功能

监控系统的重要功能是根据设定的阈值进行告警,同时也要求在发生故障时有一定的故障自动化处理功能,对于特殊的告警还需要具备告警的升级功能,将不同级别的告警分成不同的梯度发送给不同的告警接收人。

虽然监控系统的重要功能是告警,但过多地发送告警,对于监控系统的使用效果来说,反而会不理想。因为人的精力是有限的,不可能随时随地等待着故障发生而立即处理故障,当告警过多时,我们需要优化监控系统。

在触发和发送告警时,告警模块需要支持故障的有效汇报和集中汇报,尽量避免出现“告警风暴”,防止同一时间大量发送重复、类似的告警,即告警功能支持对告警内容进行分析和自动处理,防止误报、漏报及抖动。对于大多数监控系统来说,这一点都是一个值得挑战和研究的课题。举一个实际的例子,当机房网络发生故障时,按照常规,用户会收到无数条告警信息,内容是每台设备的故障。但如果将告警聚合,我们希望收到的信息是“某机房存在网络故障,受影响的设备IP地址是X.X.X.X,受影响的业务是XXX”。

事后还需要对告警信息进行统计分析,以方便对系统的运行情况进行分析统计,从而衡量系统的稳定性、可用性。通常使用SLA服务质量指标来衡量。

可扩展性

可扩展性是指监控系统本身具备良好的扩展能力,包括监控方式的扩展、监控能力的扩展、监控数据存储的扩展、分布式的支持等。要求监控系统能够随着不同环境而做出改变和调整,大多数监控系统都具备一定的扩展能力。

对于告警,要求支持多种方式,如短信、邮件、即时通信和其他接口,且具备可定制化能力,可以对第三方告警介质提供可编程接口。这一点在很多场合都非常重要,例如,将告警结果发送到专用的告警分析系统。

监控系统需要根据实际应用的需求,实时/非实时地采集和展示数据。另外,还包括历史趋势数据的展示和分析,以及容量报表、可用性报告的生成。


在一个监控系统中,构成要素为监控服务器端程序、数据存储、被采集节点等相关模块,其告警分析和自动故障处理功能由服务器端执行。在数据采集完成之后,需要对采集到的数据进行分析和处理,判断是否有异常、是否符合告警条件。那么如何配置告警条件呢?通常是根据实际的经验值、业务需求来设置告警阈值的。当达到告警条件时,则发送告警信息给管理人员。然而,对于有些故障,我们希望程序能自动处理,减少人工干预,让程序自动修复,只在出现严重故障、程序无法判断时,才发送告警通知管理人员处理。

一个监控系统往往需要集成资产管理系统,资产管理功能可以从逻辑上展示业务用途的信息,通过对其进行数据分析,做到对投资与回报的反馈展示,为资产的合理规划与使用提供依据。

从工作模式来看,监控系统的数据采集可以分为两种:主动监控和被动监控。一个理想的监控系统采集端支持的采集方式越多,其扩展能力越强大,适用的环境场合越多。

监控系统需要具有对外提供API的能力,方便第三方应用系统对监控数据进行操作管理。通常能对外提供 API 功能的软件,意味着其扩展能力更强大,因而会更加受到用户的喜爱。API的方式一般可以分为 RESTful、SOAP等,在 API中使用的数据类型可以为 JSON、XML等。从目前的趋势来看,RESTful已经成为绝大多数API首选的方式。

监控系统需要对故障数据进行分析汇总,从故障数据中分析出现的概率,进而可以积累数据经验,避免以后出现类似的问题。例如,通过分析统计机器硬件导致故障的概率有多大、哪些部件最容易出问题、出问题的影响概率有多大、立即解决问题的概率有多大等问题,在此基础上进行分析汇总,就可以整理出有效的相应故障对策和技术应急方案。

3、开源产品

在监控软件中,开源的解决方案有:

  • 流量监控(MRTG、Cacti、SmokePing 等)、
  • 性能告警(Nagios、Zabbix、Zenoss Core、Ganglia、Netdata 等)、
  • 基于时序数据库存储数据的监控(Graphite、OpenTSDB、InfluxDB、Prometheus、OpenFalcon 等)、
  • 基于全文搜索引擎数据库存储数据的监控(如 ELK 套件)可供选择。

上述各监控产品都有自己的特点和功能,其侧重点和目标不完全相同,在设计理念和实现方法上也各有差异,但都具有一些共同特征,例如采集数据、分析展示、告警以及简单的故障自动处理等,最终都能达到对 IT 系统服务可用性的完全展示。需要说明的是,当前的时序数据库侧重于监控数据的存储,其采集需要借助其他工具来实现。时序监控产品的设计理念较为先进,具有很多创新功能,随着其不断发展,将会极大地促进监控领域技术的发展。

Cacti

Cacti官方网站地址:https://www.cacti.net/。

Cacti(仙人掌)是一套基于 PHP、MySQL、SNMP和 RRDtool开发的网络流量监测图形分析工具。其数据采集仅支持SNMP方式,通过snmpget命令来获取监控数据,使用RRDtool命令工具存储历史数据和绘图,并提供数据和用户管理功能,可以根据用户权限查看不同的树状结构、主机设备以及指定的监控数据图,支持与LDAP结合进行用户认证,同时也能自定义模板。对于网络设备的监控,其展示效果非常不错,在10年前,它是广受网络管理员喜欢的监控产品。

Nagios

Nagios官方网站地址:Nagios Open Source | Nagios Open Source。

Nagios是一个插件式的监控系统,可以监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数以及服务,同时提供异常告警通知功能等。

Nagios对开源监控系统的影响非常深远,曾经风靡一时,占据开源监控市场的大部分份额,并基于Nagios 产生了很多新的监控产品。近年来,随着其他开源监控软件的崛起,Nagios 逐渐淡出了历史舞台,使用的人群相对减少,但目前仍有一些公司在使用。

Nagios支持客户端的数据采集,通过编写客户端插件,可以获取各种监控数据,并提供了Web管理界面进行数据查询。其产品的主要功能侧重于监控服务的可用性,根据设置的阈值进行告警,但大部分告警逻辑都是通过监控插件实现的。

InfluxDB套件

InfluxDB官方网站地址:InfluxDB Times Series Data Platform | InfluxData。

InfluxDB 并不是一个监控产品,而是一个开源的分布式时序、时间和指标数据库,使用Go 语言开发。其功能是数据指标的存储,不提供告警分析功能和数据采集功能,仅仅是一个数据库,支持 SQL语言查询,其语法和 MySQL类似。随着 InfluxDB时序数据库的功能不断完善,官方也推出了作为监控系统使用的相关套件,分别是 Telegraf(采集数据的客户端)、InfluxDB(存储监控数据)、Kapacitor(告警分析)、Chronograf(监控数据可视化。

Prometheus

Prometheus官方网站地址:Prometheus - Monitoring system & time series database。

Prometheus 是一套开源的系统监控报警框架。Prometheus最初的设计理念受 Google的 Borgmon监控系统所启发,由工作在 SoundCloud的 Google前员工于2012年创建,作为社区开源项目进行开发,2015年正式发布。2016年,Prometheus正式加入Cloud Native ComputingFoundation(CNCF)组织,2018年其成为继Kubernetes从CNCF毕业的第二个项目,其受欢迎程度仅次于Kubernetes。

Prometheus产品得到迅速发展,离不开天时、地利、人和,在2015年前后,微服务概念开始流行,软件架构从单体应用转换为微服务,此时,能够原生支持对容器 Docker、Kubernetes监控的产品会被使用微服务的公司首先接受,而同期的其他监控产品均不直接提供对微服务的监控,故其在微服务领域取得先机。另外,该产品本身的设计较为合理,提供了灵活而强大的查询语句(PromQL)、灵活的告警策略,易于管理,方便扩展,其数据采集使用私有客户端,传输协议使用 HTTP,数据存储使用私有数据库。

OpenFalcon

OpenFalcon官方网站地址:https://book.open-falcon.org/。

OpenFalcon 是一个企业级、高可用、可扩展的开源监控解决方案。OpenFalcon由多个组件构成,重要的组件有数据采集、数据传输、数据存储、告警分析、图形展示等,数据采集使用专用客户端,传输协议为私有的,数据存储支持 OpenTSDB 和RRD两种方式。

Netdata

Netdata官方网站地址:GitHub - netdata/netdata: Monitor your servers, containers, and applications, in high-resolution and in real-time!。

Netdata是 Linux系统实时性能监测工具,以 Web可视化方式展示系统及应用程序的实时运行状态(包括CPU、内存、硬盘输入/输出、网络等Linux性能数据)。

Netdata 数据采集为私有客户端,数据存储为私有格式,也支持多种时间序列后端服务,比如Graphite、OpenTSDB、Prometheus、JSON document DBs,并支持告警功能,在单机监控系统中具有其他监控系统所不具备的优势。其监控界面较为美观。

ELK家族

ELK官方网站地址:Elasticsearch Platform — Find real-time answers at scale | Elastic。

ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。

Elasticsearch 是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能,是一套开放 REST 和Java API 等结构,提供高效搜索功能,并可扩展的分布式系统。它构建在Apache Lucene搜索引擎库上。

Logstash 是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(如RabbitMQ)和 JMX。它能够以多种方式输出数据,包括电子邮件、WebSocket和Elasticsearch。

Kibana 是一个基于 Web 的图形界面,用于搜索、分析和可视化存储 Elasticsearch 指标中的日志数据。它利用 Elasticsearch的 REST接口来检索数据,不仅允许用户创建自己数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

实际上,随着ELK家族的不断发展,其针对日志采集开发了专用的客户端Beats系列产品,包括Filebeat(日志文件)、Metricbeat(指标)、Packetbeat(网络数据)、Winlogbeat(Windows事件日志)、Auditbeat(审计数据)、Heartbeat(运行时间监控)。

Zabbix

Zabbix是企业级分布式监控系统,是一个开箱即用的成熟解决方案,具备完备的功能。综合其他监控产品来说,它是一个大而全、功能丰富且定制非常灵活的产品,具备其他监控产品的功能,同时提供了其他监控产品所不具备的功能,扩展非常灵活,是企业级监控系统比较合理的选择之一。

从功能上说,Zabbix 支持多种采集方式和采集客户端,有专用的 Agent(代理),也支持SNMP、IPMI、JMX、Telnet、SSH 等多种协议,它将采集到的数据存放到数据库中,可以支持 MySQL、Oracle、PostgreSQL、SQLite、Elasticsearch 等数据库,然后对其进行分析整理,达到条件触发告警,并支持对告警数据的分析统计。Zabbix 具有良好的管理界面。

从以上各种监控系统产品的对比来看,Zabbix都是具有优势的,其具有丰富的基本功能、可扩展的能力、二次开发的能力和简单易用的特点,读者只要稍加学习,即可构建自己的监控系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1355940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu20快速搭建自己的git代码仓库环境

##安装docker groupadd docker apt install docker.io ##用户添加到docker组 sudo usermod -aG docker ${USER} ##用户添加sudo cat /etc/sudoers apt install vim ##sudoers文件权限可以写 chmod uw sudoers vim sudoers ##在root底下添加这行,yym改到自…

【C初阶——指针1】鹏哥C语言系列文章,基本语法知识全面讲解——指针(1)

长城之上是千亿的星空,星空之上是不畏的守望。 本文由睡觉待开机原创,转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 文章目录 前言1.内存和地址2.指针变量和地址2.1指针…

Databend 的算力可扩展性

作者:尚卓燃(PsiACE) 澳门科技大学在读硕士,Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer PsiACE (Chojan Shang) GitHub 对于大规模分布式数据处理系统,为了更好应对数据、流量、和复杂性的增长…

[足式机器人]Part2 Dr. CAN学习笔记-Ch01自动控制原理

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Ch01自动控制原理 1. 开环系统与闭环系统Open/Closed Loop System1.1 EG1: 烧水与控温水壶1.2 EG2: 蓄水与最终水位1.3 闭环控制系统 2. 稳定性分析Stability2.1 序言2.2 稳定的分类2.3 稳定的对…

SwiftUI 打造一款“可收缩”的 HStack(一):“原汤化原食”

概览 拥有雄心壮志(亦或是自我感觉良好)的秃头码农们都喜欢接受编程上各种颇有难度的挑战,比如刷刷力扣(LeetCode)或 codeforces 上难题啥的。 为了满足小伙伴们的“冒险精神”(亦或是“自虐癖”),加上这篇博文我们会用连续 4 篇系列文章通过不同的方式来解决同一道与…

【IDEA——连接MySQL数据库,创建库和表】

IDEA——连接MySQL数据库,创建库和表 1、打开idea数据库操作页面(两种打开方法都可以) 2、点击加号,选择Driver,方便导入连接数据库的驱动jar包 然后选择MySQL进行添加驱动 3、点击上一步页面的左上方的Data Sources连接本地数据…

保姆级教程:从0到1搭建web自动化测试环境

之前都是在linux上安装,第一次在windows上配置环境,加上距离上次配置环境有点久了,竟也花了点时间。特此记录下保姆级教程,给初学者一个有效的参考! 一. 环境搭建 工具清单 工具工具名版本Java开发工具包JDK1.8浏览…

揭秘Linux软链接:如何轻松创建、删除和修改

揭秘Linux软链接:如何轻松创建、删除和修改 一、简介二、创建软链接三、删除软链接四、修改软链接五、Linux软链接的高级用法六、总结 一、简介 在Linux中,软链接(Symbolic Link)是一种特殊的文件类型,它是一个指向另…

【DevOps-03】Build阶段-Maven安装配置

一、简要说明 下载安装JDK8下载安装Maven二、复制准备一台虚拟机 1、VM虚拟复制克隆一台机器 2、启动刚克隆的虚拟机,修改IP地址 刚刚克隆的虚拟机 ,IP地址和原虚拟的IP地址是一样的,需要修改克隆后的虚拟机IP地址,以免IP地址冲突。 # 编辑修改IP地址 $ vi /etc/sysconfig…

申请域名SSL证书并自动推送至阿里云 CDN

近期国外SSL证书厂商调整了免费证书的续签规则,一年期的证书全部取消,现在只能申请90天有效期的免费证书。普通web站点可以通过宝塔面板或部署acme.sh等证书自动管理工具来实现自动化申请和部署,但是阿里云之类的CDN服务就只能通过手动或Open…

Python split()方法详解:分割字符串

Python 中,除了可以使用一些内建函数获取字符串的相关信息外(例如 len() 函数获取字符串长度),字符串类型本身也拥有一些方法供我们使用。 注意,这里所说的方法,指的是字符串类型 str 本身所提供的&#x…

linux性能优化

文章目录 性能优化图CPU进程和cpu原理性能指标 性能优化图 CPU 进程和cpu原理 进程与线程: 进程是程序的执行实例,有自己的地址空间和系统资源。线程是进程内的执行单元,共享进程的资源。在多核系统中,使用多线程可以更好地利用多…

【四】CocosCreator-修改引擎源码

看源码的过程中,少不了得修修改改源码,做点实验。果断去找找源码在哪里,然后就可以快乐动手改源码了。 CocosCreator引擎源码主要就是js和原生C两类,分别在引擎目录的resources/engine和resources/cocos2d-x下,如图&am…

金色麦芒的2023

2023年即将过去,回首这一年,我深感自己在技术和职业生涯中取得了巨大的进步。这一年里,我不仅在技术层面有了更深入的掌握,也在个人成长和职业规划上有了更明确的方向。 首先,在技术层面,我今年最大的收获是…

Innosetup 调用c# dll 和 c# dll的函数导出

目标需求,基于现在安装包脚本。需要在用户安装和卸载成功时。进行数据记录,所以需要调用c#dll 主要涉及到的知识点 需要理解脚本的文件使用机制脚本的文件dll加载,和dll的调用c# dll的制作,和工具的使用 下面具体介绍 脚本的文件dll加载&…

【程序】USART串口通信接收数据(标准库带printf)

🌟博主领域:嵌入式领域&人工智能&软件开发 前言:本程序使用stm32f429作为主控,使用串口1,使用的是标准库程序版本。(其它主控/串口x,实现过程类似)。本程序亲测无误。 目录…

如何制作可预约的上门维修服务小程序?

上门维修服务已经成为人们日常生活中不可或缺的一部分。为了满足这一需求,我们学习如何无经验自己制作上门维修服务小程序。 首先,打开乔拓云-门店系统的后台,可以看到有很多各行各业的模版。这些模版涵盖了各种行业,包括家电维修…

9.java——(杂例)组合,代理,向上转型static,fianl,关键字(有道云笔记复制粘贴,大家整体性的把握)

组合——内部有类(心中有对象!!!)(足球 和足球运动员梅西和脚下的足球一样) has和is的区别,has是组合,是有,持有的意思;is是继承,是…

MT9201 1.2MHz,3V~24V输入高效增压白色LED驱动器 丝印B9HB

描述 MT9201是一个升压转换器,设计用于从单电池锂离子电池驱动多达7系列白色led。MT9201使用电流模式,固定频率结构来调节LED电流,它通过外部电流感测电阻器来测量。其低200mV反馈电压降低了功率损耗,提高了效率。MT9201包括欠电压…

FlinkSQL中【FULL OUTER JOIN】使用实例分析(坑)

Flink版本:flink1.14 最近有【FULL OUTER JOIN】场景的实时数据开发需求,想要的结果是,左右表来了数据都下发数据;左表存在的数据,右表进来可以关联下发(同样,右表存在的数据,左表进…