1. 监控的意义和目的
监控是管理基础设施的核心工具。没有监控,我们将无法了解系统环境、进行诊断故障、制定容量计划,最糟的就是,故障发生了也不会被发现。
从技术角度来看,监控是衡量和管理技术系统的工具和流程。监控将系统和应用程序生成的指标转换为对应的业务价值。监控系统需要在基于容器的微服务中自动且快速地识别生命周期,并持续地提供实时的监控检测。
在上一节中,我们已经使用WeaveScope搭建了一个容器监控管理系统,并带有一些基本的监控功能。但它对于自定义数据获取、自动告警、细化监控指标和展示的时候,生态、功能性和扩展性都有欠缺,系统及需求复杂时难以满足我们的定制化的监控需求。这时,我们就需要围绕Premetheus,配合其生态及相关工具,配置我们的监控平台。
2. Prometheus
Prometheus 的灵感来自 Google 的 Borgmon, 是由前 Google 工程师从 2012 年开始在 Soundcloud以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了 Prometheus 作为监控告警工具。Prometheus 的开发者和用户社区非常活跃,它现在是一个独立的开源项目,可以独立于任何公司进行维护。
Prometheus 已被全球众多企业广泛使用,以满足上面提到的复杂的监控需求,当然,它也可以用来监控属于传统架构的资源。
Prometheus 的整体架构以及生态系统组件如下图所示:
2.1 基本原理
Prometheus 专注于现在正在发生的事情,而不是追踪数周或数月前的数据。Prometheus 通常不用于长期数据保留,默认保存 15 天的时间序列数据。它有这样一个前提,即大多数监控查询和警报都是从最近的数据中生成的。
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。
输出被监控组件信息的HTTP接口被叫做exporter 。常用的组件大部分都有exporter可以直接使用,比如Nginx、MySQL、Linux系统信息等等。
大致工作流程如下:
Prometheus定时去目标上抓取指标监控数据,抓取目标需要暴露一个http服务的接口给它定时抓取。对于不能直接抓取的目标,Prometheus支持这些应用服务主动推送监控指标到PushGateway,而后Prometheus定时去这些网关上抓取数据。
Prometheus在本地存储保存抓取的数据,并按规则进行过滤和整理数据。
Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
2.2 Prometheus 的优势
Prometheus 的主要优势有:
- 由指标名称和和键/值对标签标识的时间序列数据组成的多维数据模型;
- 强大的查询语言 PromQL;
- 不依赖分布式存储;单个服务节点具有自治能力;
- 时间序列数据是服务端通过 HTTP 协议主动拉取获得的;
- 也可以通过中间网关来推送时间序列数据;
- 可以通过静态配置文件或服务发现来获取监控目标;
- 支持多种类型的图表和仪表盘。
3. Prometheus 的组件与生态
3.1 cAdvisor
Prometheus 支持了多种方法来监控 Docker,推荐的方法是使用 Google 的 cAdvisor 工具。cAdvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行cAdvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。
cAdvisor是一个简单易用的工具,用户不用再登录到服务器中即可以可视化图表的形式查看主机上所有容器的运行状态。cAdvisor 作为 Docker 容器运行,它可以对宿主机上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况。
cAdvisor默认只保存几分钟分钟的监控数据,Prometheus 支持通过它导出指标,并将数据传输到存储系统中。
3.2 Grafana
Prometheus本身的界面比较简洁,为了给 Prometheus 添加一个功能更全面的可视化界面,我们可以与开源仪表板工具 Grafana 集成。
Grafana 接受来自不同数据源的数据,提供可视化仪表板。它支持多种数据源。
3.3 Alertmanager
Prometheus 服务器没有内置警报工具,而是将警报从 Prometheus 服务器推送到 Alertmanager警报管理器的单独服务器。Alertmanager 可以管理、整合和分发各种警报到不同目的地,并能够防止重复发送。
我们将在 Prometheus 服务器上编写警报规则 ,这些规则将使用我们收集的指标并在指定的阈值或标准上触发警报。当指标达到阈值时,会生成一个警报,并将其推送到 Alertmanager。
4. 小结
目前,Prometheus 已成为企业构建容器云架构的首选开源监控工具。下一节我们将进入实战环节,运用这些工具,搭建一个完整的监控平台。