025 云原生之 Prometheus 介绍
在云原生架构下,Kubernetes 并不保存日志,也不提供日志存储解决方案,而是依赖第三方解决方案。
在伴生容器中使用日志代理会导致资源损耗。此外,一旦启用日志代理,日志就不能再由 kubelet 管理,用户不能再使用 kubectl logs 命令来访问 Pod 的日志。
监控不应该与日志记录混淆,日志用于调试、开发和观察运行情况,它记录了应用程序的内部功能和流程。尽管可以从日志计算度量,但是需要额外的聚合服务(例如 Elasticsearch)和处理。日志记录一般使用 ELK 套件(Elasticsearch+Logstash+Kibana)。
Prometheus 具有以下特点:
● 强大的多维度数据模型:
✧ 时间序列数据通过 metric 名和键值对来区分。
✧ 所有 metrics 都可以设置任意的多维标签。
✧ 数据模型更随意,不需要刻意设置为以点分隔的字符串。
✧ 可以对数据模型进行聚合、切割和切片操作。
✧ 支持双精度浮点类型,标签可以设为全 unicode。
● 灵活而强大的查询语句(PromQL):在同一个查询语句中可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。
● 易于管理:Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。● 高效:平均每个采样点仅占 3.5B,且一个 Prometheusserver 可以处理数百万的度量值。
● 使用拉取(pull)模式采集时间序列数据,这样不仅有利于本机测试,而且可以避免有问题的服务器推送坏的度量值。
● 可以采用 push gateway 方式把时间序列数据推送至 Prometheus server 端。
● 可以通过服务发现或者静态配置获取监控的目标(target)。
● 有多种可视化图形界面。
● 易于伸缩。
Prometheus 生态圈中包含了多个组件,其中许多组件是可选的。
● Prometheus server:用于收集和存储时间序列数据。
● 客户端库(Client Library):为需要监控的服务生成相应度量值并暴露给 Prometheus server。当 Prometheus server 来抓取时,直接返回实时状态的 metrics。
● 推送网关(Push Gateway):主要用于短期执行的程序。由于这类程序运行时间较短,可能在 Prometheus 抓取之前就执行完毕了,为此,这类程序可以直接向 Prometheus server 端推送它们的度量值。这种方式主要用于服务层面的度量,对于机器层面的度量,需要使用 node exporter。
● Exporters:用于暴露已有第三方服务的度量给 Prometheus。
● 报警管理器(Alert manager):从 Prometheus server 端接收到警报后,会去除重复数据、分组,并路由到报警服务,发出报警。常见报警方式有:电子邮件、短信、OpsGenie、钉钉、webhook 等。
Prometheus 体系结构
Prometheus 中存储的数据为时间序列,是由度量的名称和一系列的标签(键值对)组成的唯一标识,不同的标签代表不同的时间序列。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/c8ff55d07e3c64d7f1ea92bc3】。文章转载请联系作者。
评论