自从Linux系统诞生之始,监控系统就随之出现。

当然说到监控系统,我们就必须聊到SNMP协议,SNMP分为管理端(NMP)和被管理端。

管理端周期性的到被监控端采集数据,被监控端还需要有权限收集数据,然后将数据回馈给NMS。

SNMP是一种常见的协议,众多网络工具和众多操作系统都支持。

比如常见的路由交换都内置SNMP的agent,既可以作为管理端又可以作为被管理端。

linux有net-snmp这个包。SNMP大致有三个版本,比较通行v2c,无论是v1还是v2安全性都很差,数据传输是明文的,认证机制也很薄弱,但尽管如此,v3仍不通行。

但好在支持网络管理的功能。很多开源的监控软件都有自己开发的agent,这样安全性就会好了很多。

如果想简单的获取数据,使用SNMP会比较快捷。SNMP只负责数据采集,数据采集之后如何存储、如何分析是个问题。

早期的cacti监控系统,就是调用SNMP的功能,然后进行一些其它操作。使用PHP编写。不需要安装agent。支持模板,使用rrd(轮转数据库)。

cacti利用SNMP采集数据,利用rrd保存数据并绘图。cacti本身没有报警功能,可以安装插件来进行报警。

cacti只是比较原始的、功能比较单一的监控系统,后面陆续有Nagios、Zabbix、Prometheus等监控系统出现。

监控对象也从原来的对服务器、程序、web页面等方面衍生到了对容器等多方面的监控。

下面会简要说明常见的一些监控系统:

1.Nagios

Nagios原名为NetSaint,由Ethan Galstad开发并维护。Nagios是一个老牌监控工具,由C语言编写而成。
主要针对于主机监控(CPU、内存、磁盘等)和网络监控(SMTP、POP3、HTTP和NNTP等),也支持用户自定义监控脚本。

Nagios的整体架构非常清晰,它通过Plugin采集各种监控数据。
Nagios数据被保存在RRD环形数据库中,特别适合存储时序数据。

总体来说,Nagios的报警功能还是非常强大,支持软状态切换、支持依赖关系定义。
但是Nagios只关心正常与否的问题,不适合实时监控,你无法的获取某个监控项时间段的状态。
与Zabbix一样,在大规模集群、高性能服务要求等场景下,Nagios会显得有点力不从心。

2.Zabbix

Zabbix基本上可以满足中小型公司对于监控的需求,其支持多种采集方式、支持多种协议。
基本上可以做到监控一切需要监控的监控项,其发展已经非常成熟,有非常完善的内置监控项,
同时组件较少,上手难度不高,管理也特别方便,是很多创业公司的首选。

zabbix的组件并不是非常多,虽然清晰明确,但是制约了其性能。主要组件有以下部分:
(1)Zabbix Server
Zabbix的核心组件,由C语言编写而成,主要负责接收Agent发送的监控信息,并进行汇总存储。主要工作内容有以下三点:
设备注册:将需要监控的对象纳入监控系统中,有手动配置和自动发现两种方式。
数据收集:包括主动收集和被动收集,然后将数据保存到数据库中。
数据清理和告警触发:通过触发器与采集的数据匹配,满足条件则会进行告警。

Zabbix Server把基本能做的事情都做了,这样非常制约其性能,在其后出现的监控系统中都会将其功能进行拆分。

(2)Zabbix Database
用于存储配置信息及Zabbix收集到的监控数据,支持多种类型的数据库,包括MySQL、Oracle、PostgreSQL等。
由于Zabbix诞生的时间比较久远,采用的都是关系型数据库,
因此在监控大规模集群或者监控项繁多的情况下可能会存在问题。

(3)Zabbix Web
Zabbix的GUI组件,由PHP编写而成,通常与Server运行在同一台机器上,
提供监控数据的展现和系统配置,主要配置包括监控模板、告警等。

(4)Proxy
可选组件,常用于分布式监控环境中,代理Server收集部分被监控的监控数据,
并按照一定的频率统一发往Server端。Proxy有自己的数据库,主要为了解决以下两个问题。
Server和Agent之间网络不连通。
减轻Server的压力。

Proxy并不能完全解决Server组件负载的过重的麻烦。

(5)Agent
主要用来采集被监控端的数据。

3.Open-Flacon

Open-Falcon是小米开源的企业级监控工具,由Go语言开发而成,包括小米、滴滴、美团在内的互联网公司都在使用。
Open-Falcon是一款灵活、可扩展并且高性能的监控方案。

它的主要组件有以下部分:
(1)Falcon-agent
用Go语言开发的Daemon程序,运行在每台Linux服务器上,用于采集主机上的各种指标数据。
主要包括CPU、内存、磁盘、文件系统、内核参数、Socket连接等,目前已经支持200多项监控指标。
并且,Agent支持用户自定义的监控脚本,脚本必须返回Agent指定的数组格式。Agent采集的数据会通过RPC方式上报到Tranfer。
为了避免单个Transfer发生故障,Agent支持配置多个Transfer地址,还可以忽略多余的监控指标。
Agent本身也可以成为一个Proxy-gateway代理网关,接收第三方HTTP请求并将其转发到Transfer中。

类似zabbix的agent,Kubernetes自带监控体系中的cAdvisor,Nagios中的Plugin,
本质就是一个被封装的SNMP协议的客户端,都是用来进行数据采集的,也是监控系统中必备的组件了。

(2)Hearthbeat server
简称HBS(心跳服务),每个Agent都会周期性地通过RPC方式将自己地状态上报给HBS,
主要包括主机名、主机IP、Agent版本和插件版本,Agent还会从HBS获取自己需要执行的采集任务和自定义插件。

(3)Transfer
负责监控agent发送的监控数据,并对数据进行处理,在过滤后通过一致性Hash算法将数据发送到Judge或者Graph。
为了支持存储大量的历史数据,Transfer还支持OpenTSDB。Transfer本身没有状态,可以随意扩展。

数据的处理和汇总也是每个监控系统必须的流程,类似的组件由Heapster、Logstash。

(4)Jedge
告警模块,Transfer转发到Judge的数据会触发用户设定的告警规则,如果满足,则会触发邮件、微信或者回调接口。
这里为了避免重复告警,引入了Redis暂存告警,从而完成告警合并和抑制。

(5)Graph
RRD数据上报、归档、存储的组件。Graph在收到数据以后,会以RRDtool的数据归档方式存储数据,同时提供RPC方式的监控查询接口。

在Nagios和catia中,也是将数据保存在RDD环形数据库中,Zabbix的存储数据相对多样,可以是MySQL、Oracle等
而在kubernetes自带的监控体系中,也是可以保存到多种存储系统中,例如InfluxDB、Kafka等
灵活的存储的体系是开源软件的一种必要的设计原则。

(6)API
主要提供查询接口,不但可以从Grapg里面读取数据,还可以对接MySQL,用于保存告警、用户等信息。

(7)Dashboard
由Python开发而成,提供Open-Falcon的数据和告警展示,监控数据来自Grash,Dashboard允许用户自定义监控面板。

(8)Aggregator
聚合组件,聚合某集群下所有机器的某个指标的值,提供一种集群视角的监控体验。
通过定时从Graph获取数据,按照集群聚合产生新的监控数据并将监控数据发送到Transfer。

总的说来,小米的这套Open-Falcon监控系统设计的还是特别合理,功能也特别丰富。
但是这类系统相比于Zabbix来说,管理起来还是相对复杂,同时对于二次开发还是有一定要求。
其相对于其它一些常见的开源监控杆系统来说,其监控的业务场景更大,不像Zabbix免费版本只适合中小型企业。
它能够支持中大型公司复杂业务监控场景的高可用的需求。

4.Prometheus

Prometheus的基本原理是通过HTTP周期性抓取被监控组件的状态,
任意组件只要提供对应的HTTP接口并且符合Prometheus定义的数据格式,就可以接入Prometheus监控。

Prometheus Server负责定时在目标上抓取metrics(指标)数据,
每个抓取目标都需要暴露一个HTTP服务接口用于Prometheus定时抓取。

TSDB通过一定的规则清理和整理数据,并把得到的结果存储到新的时间序列中。一般有以下两种存储方式:
一种是本地存储。通过Prometheus自带的时序数据库将数据保存到本地磁盘,为了性能考虑,建议使用SSD。
另一种是远端存储,适用于存储大量监控数据。通过中间层的适配器的转化,
目前Prometheus支持OpenTSDB、InfluxDB、Elasticsearch等后端存储,
通过适配器实现Prometheus存储remote write和remote read接口,便可以接入Prometheus作为远端存储使用。
HDD代表硬盘,SSD是固态硬盘。

Prometheus通过PromQL和其它API可视化地展示收集地数据。
Prometheus支持多种方式地图标可视化,例如Grafana、自带的PromDash及自生提供的模板引擎。
Prometheus还提供HTTP API拆查询方式、自定义所需的输出。

Prometheus提供了PushGateway的支持,这些系统主动推送metrics到PushGateway,而后Prometheus定时去gateway上抓取数据。

AlertManager是独立于Prometheus的一个组件,在触发了预先设置在Prometheus中的高级规则后,Prometheus会推送告警信息到AlertManager。
AlertManager提供了非常灵活的告警方式,可以通过邮件、slack等途径推送。
AlertManager支持高可用部署,为了解决多个AlertManager重复告警的问题,引入Gossip,在多个AlerManager之间通过Gossip同步告警信息。

5.Heapster+InfuxDB+Grafana

Heapster是Google专门面向Kubernetes开发的性能数据集中监控系统,可以与多种系统对接,构成完整的监控平台。

主要组件如下所示:
(1)cAdvisor

是Google开发的容器监控组件,部署在每一个Kubernetes Node节点上,
负责收集所在主机及该主机上所有容器的性能数据,包括CPU、Memory、FileSystem、Network I/O等
Heapster:负责汇总各Node节点上cAdvisor的数据,并可以保存多种后端存储系统(例如InfluxDB、Kafka等)。
Heapster的工作流程:访问master节点,获取当前集群节点的信息,然后访问各节点的Kubelet组件API,再通过调用cAdvisor的API来收集该节点上所有容器的性能数据。
Heapster对采集到的数据进行聚合,将结果保存(sink)到多种后端存储,例如InfluxDB、Elasticsearch等,为容器集群的监控和性能分析提供了强大的支持。

(2)InfluxDB

是用一种Go语言编写的分布式时序数据库,能够存储监控数据、应用数据、IoT传感数据等各种场景中大规模带时间戳的数据,
支持使用类SQL语句进行实时查询,提供可定制的数据存储保留策略,还提供RESTful API进行数据的存储和访问。

(3)Grafana

是一款页面展示工具,提供多种分析插件,可以支持多种主流数据库(InfluxDB、Elasticsearch、Graphite、CloudWatch等)的数据展示。
它可将保持在InfluxDB中的数据以图表、曲线等形式进行展示,方便运维人员实时监控整个集群的运行状态。

总的来说,Heapster只是针对kubernetes来设计的监控平台。
因为其是通过调用kubelet的API接口,kubelet再调用cAdvisor的API接口来进行数据的收集。
随后通过Heapster将数据存储到数据库,最后通过其它的组件展示出来。

下面针对Prometheus、Zabbix、Nagios和Open-Falcon这几种监控系统的对比:

从开发语言上看,为了应对高并发和快速迭代的需求,监控系统的开发语言已经慢慢从C转移到了Go。
不得不说,Go凭借简洁的语法和优雅的并发,在Java占据业务开发领域,C占领底层开发领域的情况下,
准确定义中间件开发需求,在当前的开源中间件产品中被广泛应用。

从系统成熟方面来看,Zabbix和Nagios都是老牌监控系统:Zabbix诞生于1998年,Nagios诞生于1999年,系统功能都比较稳定,成熟度较高。
而Prometheus和Open-Falcon都是最近几年才诞生,虽然功能还在不断迭代、更新,但是毕竟还很年轻,
而Heapster则完全要依赖于kubernetes,因此更加年轻。

从系统扩展性能来看,Zabbix和Open-Falcon都可以自定义各种监控脚本,Zabbix不仅可以做到主动推送,还可以做到被动拉取。
Prometheus则定义了一套监控数据规范,并通过各种exporter扩展系统采集能力。

从数据存储方面来看,Zabbix采用关系型数据库存储数据,这极大限制了Zabbix的数据采集能力。
Nagios和Open-Falcon都采用了RDD数据存储方式。Open-Falcon还加入了一致性Hash算法进行数据分片,
并且可以对接到OpenTSDB,而且Prometheus自己开发了一套高性能时序数据库,
在V3版本时可以达到每秒千万级别的数据存储,可通过对接第三方时序数据库扩展对历史数据的存储性能。

从社区活跃度方面来看,目前Zabbix和Nagios的社区活跃度比较低,
尤其是Nagios和Open-Falcon的社区虽然也比较活跃,但基本都是国内的公司在参与。
Prometheus的社区活跃度很高,并且得到CNCF的支持,后期的发展值得期待。

从容器支持方面来看,由于Zabbix和Nagios出现的比较早,当时容器还没有诞生,所以它们对容器的支持自然比较差。
Open-Falcon虽然提供了容器监控的功能,但支持力度有限。
Prometheus的动态发现机制,不仅支持Swarm原生集群,还支持Kubernetes容器集群监控,是目前容器集群监控的最佳方案。
总的来说,Nagios在网络监控方面有广泛应用,zabbix在传统的服务器监控相关方面占绝对优势。
Prometheus则是容器领域的标配,Heapster在kubernetes1.11版本之后,逐渐被废弃。

转载于:https://www.cnblogs.com/yangmingxianshen/p/11208224.html

Linux监控系统概览相关推荐

  1. Linux监控系统之Zabbix

    Linux监控系统之Zabbix Zabbix介绍 Zabbix是由 Zabbix 是由 Alexei Vladishev 开发的一种网络监视.管理系统,基于 Server-Client 架构.可用于 ...

  2. sharpssh远程linux监控系统,利用SharpSsh远程执行linux的shell命令

    利用SharpSsh远程执行linux的shell命令 (2011-07-26 14:38:02) SharpSSH是一个C#的开源项目,可以利用SSH连接linux系统.并执行shell等命令. 而 ...

  3. linux下北斗测试程序,北斗用户终端Linux监控软件系统的开发

    摘要: 定位系统应用广泛,其移动终端是该系统的重要部分,主要有两项核心技术:通讯和定位.计算机和通信技术的飞速发展解决了定位系统的移动终端的通讯问题,而北斗卫星定位系统的建立,为全球范围内的用户提供了 ...

  4. Red Hat Enterprise Linux Server release 6.3下ganglia监控系统的搭建

    ganglia 是分布式的监控系统,有两个Daemon, 分别是:客户端Ganglia Monitoring Daemon (gmond)和服务端Ganglia Meta Daemon (gmetad ...

  5. 基于Linux+Nagios+Centreon+Nagvis等构建海量运维监控系统

    参考书目:<海量运维监控系统规划与部署 基于Linux+Nagios+Centreon+Nagvis等> 付哲著 系统环境规划: 基于阿里云centos6.8镜像升级到centos6.9, ...

  6. linux 车载视频监控,基于Linux平台车载视频监控系统研发-计算机科学与技术专业论文.docx...

    基于Linux平台车载视频监控系统研发-计算机科学与技术专业论文 目录 HYPERLINK \l "_bookmark0" 第一章 绪论1 HYPERLINK \l "_ ...

  7. Linux日常运维管理技巧(一)监控系统状态、监控网卡流量、监控IO性能、查看系统进程、查看网络状态、Linux下抓包tcpdump、Linux网络相关、DNS配置

    目录 监控系统状态 监控网卡流量 监控IO性能 查看系统进程 查看网络状态 Linux下抓包 Linux网络相关 监控系统状态 w/uptime查看系统负载 [root@zyshanlinux-01 ...

  8. linux服务器系统_利用Zabbix监控系统监测Linux服务器系统时间是否准确完美实现...

    服务器时间校准是非常重要的,因为很多应用服务都是需要基于时间的,服务器系统时间如果不准确的话就会产生很多问题.虽然我们可以通过部署NTP时间服务器来进行校准,但是有时候感觉还不够保险,而这往往也是很多 ...

  9. linux 安装监控系统,CentOS7安装性能监控系统

    目录 系统描述. 开发环境. 开始之前. 安装influxdb数据库. 安装collectd 安装Grafana FAQ influxdb的web界面没反应. 系统描述 想打造 New Relic 那 ...

最新文章

  1. ::operator new、sgi stl alloc、dlmalloc测试结果
  2. J - 数据结构实验:哈希表
  3. Vue+axios(interceptors) 实现http拦截 + router路由拦截 (双拦截)+ 请求自带loading效果...
  4. php怎么控制递归多少次,关于一个PHP递归处理统计的问题
  5. 俄罗斯无人机公司Hoversrf紧随Volocopter步伐,酷炫“方程式”飞行汽车来袭
  6. php gif 透明,解决PHP剪切缩略图生成png,gif透明图时,黑色背景问题
  7. spring boot的多环境部署
  8. 11.频域里的卷积——介绍,傅里叶变换和卷积,快速傅里叶变换(FFT)_1
  9. SDK中利用COM打印helloworld时报错DONE pin is not high on target FPGA的一种可能的解决办法
  10. python动态演示数据gdp_荐爬取世界各国历年的GDP数据
  11. 如何把门禁卡做成你用不起的样子?B站up主自制迷你卡片,公司小区通刷,还带墨水屏的那种...
  12. FTP工具 CuteFTP Pro使用方法
  13. QQ三国推举孝廉答题工具使用说明
  14. MySQL 常见的 9 种优化方法
  15. matlab解坐标方程,matlab程序(解泊松方程)
  16. 网络编程之Socket零基础入门Demo
  17. 厦门大学计算机学院离散数学复试,2019年厦门大学计算机考研复试办法
  18. 【CZY选讲·Triangle】
  19. 光是无限远服务器的花海,第21次云垂纵横计划服务器互通投票结果公告
  20. 华为消费者业务公布2017上半年智能手机收入暴涨

热门文章

  1. VueHub:我用 ChatGPT 开发的第一个项目,送给所有 Vue 爱好者
  2. GD32F4—RTC闹钟及自动唤醒中断配置详解
  3. 查题接口 源码 php 爬题,知到网课答案WEB程序设计(PHP)查题公众号
  4. VIM实用指南(1)字符串替换
  5. 14、守护线程(thread.setDaemon(true))
  6. Java开发和测试开发面试杂记
  7. 图形和函数图像的绘制
  8. matlab 矩阵元素求和、求均值(期望)和均方差
  9. 为什么要进行傅立叶变换?如何用Matlab实现快速傅立叶变换?
  10. java 重写函数_JAVA函数的重载和重写