监控系统是整个 IT 架构中的重中之重,小到故障排查、问题定位,大到业务预测、运营管理,都离不开监控系统,可以说一个稳定、健康的 IT 架构中必然会有一个可信赖的监控系统。
但是,难道监控就只是监控年来,对于监控的术语一直都有很多困惑,一些很糟糕的工具也宣称能够以一种格式完成所有事情。
在 DevOps 和云原生时代,今年,“可观察性”(Observability)被引入到了 IT 领域,其首先表现为 CNCF-Landscape 出现了 Observability 分组。从该分组的内容看包含了监控,日志,Tracing 等领域的项目。可观察性与监控有什么不同单说来,后者是前者的一个子集。监控关注系统的失败因素,从而定义出系统的失败模型。它的核心是运维,是监控设施。而可观察性除了关注失败之外,其核心是研发,是应用,是对系统的一种自我审视。是站在创造者的角度去探究系统应如何恰当的展现自身的状态。一个由外向内,一个由内向外。
观察工具包括:度量聚合(Metrics aggregation)(主要是时序数据),日志聚合(Log aggregation),告警/可视化(Alerting/visualizations),分布式追踪(Distributed tracing)。
监控工具
Prometheus
Prometheus 是云原生应用程序最受认可的时间序列监控解决方案,由 CNCF 托管,使用 Go 语言开发,是 Google BorgMon 监控系统的类似实现。
Prometheus 使用的是 Pull 模型,Prometheus Server 通过 HTTP 的 pull 方式到各个目标拉取监控数据。它使用局部配置来描述要收集的端点和收集所需的间隔。 每个端点都有一个客户端收集数据并在每次请求时更新该表示(或者客户端是配置的)。 收集此数据并将其保存在本地磁盘上的高效存储引擎中。 存储系统使用每个度量标准的仅附加文件。
Graphite 的另一个有趣功能是能够存储与时序指标相关的任意事件。可以在 Graphite 中添加和跟踪应用程序或基础架构部署, 这允许运维人员或开发人员对问题进行故障排除,能获得正在调查的异常行为环境中更多的背景信息。
Graphite 监控上手指南:http://www.infoq.com/cn/articles/graphite-intro
InfluxDB
InfluxDB 是一个相对较新的时序数据库,使用 Go 语言编写,无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统。
其设计目标是实现分布式和水平伸缩扩展。
InfluxDB 的一些主要特征:
- 无结构 (无模式):可以是任意数量的列
- 可以设置 metric 的保存时间
- 支持与时间有关的相关函数 (如min、max、sum、count、mean、median 等),方便统计
- 支持存储策略: 可以用于数据的删改。(influxDB没有提供数据的删除与修改方法)
- 支持连续查询: 是数据库中自动定时启动的一组语句,和存储策略搭配可以降低 InfluxDB 的系统占用量。
- 原生的 HTTP 支持,内置 HTTP API
- 支持类似 sql 语法
- 支持设置数据在集群中的副本数
- 支持定期采样数据,写入另外的measurement,方便分粒度存储数据
- 自带 web 管理界面,方便使用 (登入方式:http://< InfluxDB-IP>:8083)
OpenTSDB
OpenTSDB 是基于 Hbase 的分布式的,可伸缩的时序数据库,确切地说,它只是一个 HBase 的应用。OpenTSDB 主要用途就是做监控系统;譬如收集大规模集群(包括 络设备、操作系统、应用程序、环境状态)的监控数据并进行存储,查询。
OpenTSDB 可以动态的增加 metrics,灵活支持任何语言的收集器,极大的方便了运维人员,降低了开发和维护成本。
存储到 OpenTSDB 的数据,是以 metric 为单位的,metric 就是一个监控项,譬如服务器的话,会有 CPU 使用率、内存使用率这些 metric;
OpenTSDB 使用 HBase 作为存储,由于有良好的设计,因此对 metric 的数据存储支持到秒级别;
OpenTSDB 支持数据永久存储,即保存的数据不会主动删除;并且原始数据会一直保存(有些监控系统会将较久之前的数据聚合之后保存)
ELK 堆栈还通过 Kibana 提供了出色的可视化工具,但它缺乏警 功能。 Elastic 在付费 X-Pack 插件中提供警 功能,但开源系统中没有内置任何功能。Yelp 为这个问题提供了名为 ElastAlert 的解决方案,可能还有其他类似的工具。这个额外的软件非常强大,但它进一步增加了 ELK 堆栈的复杂性。
ELK Stack 在最近两年迅速崛起,和传统的日志处理方案相比,ELK Stack 具有如下几个优点:
- 处理方式灵活。Elasticsearch 是实时全文索引,不需要像 storm 那样预先编程才能使用 ;
- 配置简易上手。Elasticsearch 全部采用 JSON 接口,Logstash 是 Ruby DSL设计,都是目前业界最通用的配置语法设计 ;
- 检索性能高效。虽然每次查询都是实时计算,但是优秀的设计和实现基本可以达到全天数据查询的秒级响应;
- 集群线性扩展。不管是 Elasticsearch 集群还是 Logstash 集群都是可以线性扩展的 ;
- 前端操作炫丽。Kibana界面上,只需要点击鼠标,就可以完成搜索、聚合功能,生成炫丽的仪表板。
Graylog
Graylog 是强大的日志管理、分析工具,基于 Elasticsearch, Java 和 MongoDB,这使得它像 ELK 堆栈一样运行起来很复杂,甚至更加复杂。但是,Graylog 开源版本带有内置的警 ,以及其他一些值得注意的功能,如流式传输,消息重写和地理定位。
流式传输功能允许数据在处理时能实时路由到特定 Stream。使用此功能,用户可以在一个 Stream 中查看所有数据库错误,在另一个 Stream 中查看 Web 服务器错误。当添加新项目或超过阈值时,告警甚至可以基于这些 Stream。延迟可能是日志聚合系统的最大问题之一,Graylog 中的 Streams 中消除了这个问题,一旦日志进入,无需处理即可通过 Stream 路由到其他系统。
消息重写功能使用开源规则引擎 Drools,允许根据用户定义的规则文件来评估所有传入消息。该文件可以丢弃消息(称为黑名单),添加或删除字段,以及修改信息。
Graylog 最酷的功能可能是地理位置功能,它支持在地图上绘制 IP 地址。这样功能相当常见,Kibana 中也有这个功能,但 Graylog 中增加了很多价值,特别是你想将它用作 SIEM 系统时。地理定位功能在 Graylog 的开源版本中提供。
Fluentd 使用强大的插件系统,有超过 500 个插件可供使用,可快速轻松地集成不同的数据源和数据输出,涵盖你的大部分用例。
Fluentd 内存要求低(仅几十兆字节),有高吞吐量,因此是 Kubernetes 环境中的常见选择。在像 Kubernetes 这样的环境中,每个 Pod 都有一个 Fluentd side-car,内存消耗将随着每个新 Pod 的创建而线性增加。使用 Fluentd 将大大降低系统利用率。
告警和可视化工具
通过名称就可以知道告警和可视化工具的用途,告警和可视化系统专注于理解其他系统的输出。这就是他们被归为一组的原因。可视化和警 工具可以将系统输出结构化地表示出来。
告警和可视化常见类型
首先,我们要弄清楚哪些不是告警。如果响应人员无法对问题采取任何措施,那么告警就不应该发送。这种情景包括发送给多个人,但只有少数人可以响应的的告警。
例如,如果操作员每天从警 系统收到数百封电子邮件,他将忽略来自警 系统的所有电子邮件,只有在遇到问题,客户发送电子邮件或老板打电话时才会回应真实事件。在这种情况下,警 已失去其意义和用途。
警 不应该是一连串的信息或状态更新。它们只是许多系统称为警 的数据点,代表了一些应该被知晓但没有被响应的事件。这些信息通常是警 工具的可视化系统的一部分,而不是触发实际通知的事件。
告警可以分为两类:内部中断和外部中断。在这个模型中,系统性能降级被视为中断,因为通常不知道每个用户的影响有多严重。
内部中断的优先级低于外部中断,但仍需要快速响应。内部中断通常涉及公司员工使用的内部系统或仅对公司员工可见的应用程序组件。
外部中断包括任何会立即影响客户的系统中断。这些不包括影响系统更新发布的系统中断,但包括面向客户的应用程序故障,数据库中断和 络分区等,还包括可能对用户没有直接影响的工具故障。
可视化
常见的可视化和理解系统的方案有:
折线图:折线图可能是最常见和最普遍的可视化。随着时间的推移,折线图可以很好地理解系统。也可以堆叠折线图以显示关系。例如,你可能希望单独查看每个服务器上的请求,但也可以聚合查看。
gauge:gauge 是单值计量可视化。gauge 的面貌可以是半圆表或全圆表。您可以自定义内线和外线的厚度以达到所需的设计美学效果。测量仪和文本的颜色可根据一组规则完全自定义。
告警工具
Bosun
Bosun 是一个新型的监控和告警系统,由 Stack Exchange 团队打造,使用 golang 编写,支持定义复杂的告警规则,支持 OpenTSDB、Graphite、Logstash-Elasticsearch 等数据源。Bosun 将是 zabbix、nagios 的有力竞争者。
Vizceral
Vizceral 是 Netflix 发布的一个开源项目,用于近乎实时地监控应用程序和集群之间的 络流量。
Vizceral 是一组采用 WebG 标准实现的动态展示线路图组件,可以实现数据的查看以及交互,分为全局、部分区域、水平三个维度,使数据更为直观明了的展示。
Vizceral 组件可以采取多个流量图,并将生成一个“全局”图,显示所有传入的流量到每个“区域”,支持跨区域通信。

Netflix 区域间流量图
根据 https://opensource.com/article/18/8/now-available-open-source-guide-devops-monitoring-tools 整理
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!