常见问题

' class="reference-link">

一般问题

' class="reference-link">

Prometheus 是什么?

Prometheus 是具有活跃生态系统的开源系统监视和警报工具包。请参阅概述

' class="reference-link">

Prometheus 与其他监控系统相比如何?

请参阅比较页面。

' class="reference-link">

Prometheus 有哪些依赖?

Prometheus 主服务独立运行,没有外部依赖。

' class="reference-link">

Prometheus 可以配置为高可用吗?

可以,在两台或多台独立的机器上运行相同的 Prometheus 服务。相同的告警将由 Alertmanager 进行重复数据删除。

关于 Alertmanager 的高可用,您可以在 Mesh 集群中运行多个实例,并配置 Prometheus 服务器向每个实例发送通知。

' class="reference-link">

Prometheus 没有扩展和收缩

实际上,存在多种缩放和联合 Prometheus 的方法。阅读 Robust Perception 的 Scaling and Federating Prometheus 博客开始使用。

' class="reference-link">

Prometheus 使用什么语言编写而成?

大多数 Prometheus 组件使用 Go 编写的。有些使用 Java,Python 和 Ruby 编写。

' class="reference-link">

Prometheus 功能,存储格式和 API 的稳定性如何?

Prometheus GitHub 组织中所有已达到版本 1.0.0 的仓库都大致遵循语义版本控制。 重大更改以主要版本的增量表示。实验性组件可能会出现例外,声明中会明确标明例外情况。

通常,即使尚未达到 1.0.0 版的仓库也相当稳定。我们的目标是为每个仓库制定适当的发布流程并最终发布 1.0.0。在任何情况下,都会在发行说明中指出重大更改(由[CHANGE]标记),或者对于尚未正式发行的组件进行明确传达。

' class="reference-link">

为什么使用数据拉取方式而不是数据推送方式?

通过 HTTP 拉取数据的方式有很多优点:

  • 开发更改时,可以在笔记本电脑上运行监控。
  • 您可以更轻松地判断目标是否已关闭。
  • 您可以手动转到目标并使用 Web 浏览器检查其运行状况。

总体而言,我们认为拉取数据比推送数据略好,但在考虑使用监控系统时,不应将其视为重点。

对于必须推送的情况,我们提供了 Pushgateway

' class="reference-link">

Prometheus 如何处理日志?

简短的回答:不要使用 Prometheus 处理日志!请改用类似于 ELK 栈工具

更长的答案:Prometheus 是一个收集和处理指标的系统,而不是事件记录系统。Raintank 博客文章 Logs and Metrics and Graphs,Oh My!提供了有关日志和指标之间差异的更多详细信息。

如果您想从应用程序日志中提取 Prometheus 指标,Google 的 mtail 可能会有所帮助。

' class="reference-link">

Prometheus 是谁写的?

Prometheus 最初由 Matt T. ProudJulius Volz 私人创立。它的大部分初始开发是由 SoundCloud 赞助的。

现在,它已由众多公司和个人维护和扩展。

' class="reference-link">

Prometheus 基于什么协议?

Prometheus 是根据 Apache 2.0 许可发布的。

' class="reference-link">

Prometheus 的复数是什么?

经过广泛的研究,已经确定 “Prometheus” 的正确复数是 “Prometheis”。

' class="reference-link">

我可以重新加载 Prometheus 的配置吗?

可以,将SIGHUP信号发送到 Prometheus 进程或将 HTTP POST请求发送到/-/reload 端点将重新加载并应用配置文件。各种组件将尝试优雅地处理失败的更改。

' class="reference-link">

可以发送告警吗?

可以,使用 Alertmanager

目前,支持以下外部系统发送告警信息:

' class="reference-link">

可以创建仪表板吗?

可以,我们建议您使用 Grafana 用于生产。也有内置的控制台模板

' class="reference-link">

可以更改时区吗?为什么所有内容都采用 UTC 时间?

为避免任何形式的时区混乱,特别是在涉及所谓的夏时制时,我们决定在 Prometheus 的所有组件中内部专门使用 Unix time 和 UTC 进行显示。可以将精心完成的时区选择引入 UI。 欢迎贡献。 有关此工作的当前状态,请参阅 issue #500

' class="reference-link">

工具

' class="reference-link">

有哪些语言的工具库?

有许多客户端库可使用 Prometheus 指标来检测您的服务。有关详细信息,请参见客户端库文档。

如果您有兴趣贡献新语言的客户库,请参见exposition formats

' class="reference-link">

可以监控机器吗?

可以,Node Exporter 在 Linux 和其他 Unix 系统上暴露了大量的计算机级别指标,例如CPU使用率,内存,磁盘使用率,文件系统完整性和网络带宽。

' class="reference-link">

可以监视网络设备吗?

可以,SNMP Exporter 允许监控支持 SNMP 的设备。

' class="reference-link">

可以监控批处理作业吗?

可以,使用 Pushgateway。另请参阅监视批处理作业的最佳实践

' class="reference-link">

Prometheus 可以直接监控哪些应用程序?

请参阅导出器及集成的列表

' class="reference-link">

可以通过 JMX 监控 JVM 应用程序吗?

可以,对于不能直接使用 Java 客户端进行检测的应用程序,可以将 JMX Exporter 单独使用或作为 Java 代理使用。

' class="reference-link">

什么影响工具的性能?

客户端库和语言之间的性能可能会有所不同。对于 Java,基准测试表明,取决于争用情况,使用Java客户端增加计数器/表将花费 12-17ns。除了对延迟最关键的代码之外,所有其他代码都可以忽略不计。

' class="reference-link">

故障排查

' class="reference-link">

Prometheus 1.x 服务需要花费很长时间才能启动,日志中显示有大量崩溃恢复的信息

不完全关闭造成的。在接收到SIGTERM信号之后,Prometheus 必须彻底关闭,这对于频繁使用的服务器可能需要一段时间。如果服务器崩溃或被强制杀死(例如,由于 OOM 被内核杀死或在等待 Prometheus 关闭时,您的运行级别系统不耐烦),则必须执行崩溃恢复,在正常情况下,恢复时间应少于一分钟,但在某些情况下要花很长时间。有关详细信息,请参见崩溃恢复

' class="reference-link">

Prometheus 1.x 服务内存不足

请参阅有关配置 Prometheus 的内存使用情况的部分以获取可用内存量。

' class="reference-link">

Prometheus 1.x 服务报告处于 “紧急模式” 或 “存储需要节流”

您的存储设备负担重。阅读有关配置本地存储的部分,以了解如何调整设置以获得更好的性能。

' class="reference-link">

实践

' class="reference-link">

为什么所有样本值都是 64 位浮点数?我想要整数

我们将自己限制在 64 位浮点数以简化设计。IEEE 754 双精度二进制浮点格式支持最大精度为2^53的整数精度。仅当需要大于$2^53但小于2^63的整数精度时,支持本机 64 位整数(仅)会有所帮助。原则上,支持不同的样本值类型(包括某种大整数,甚至支持64位以上)都可以实现,但目前不是优先事项。计数器即使每秒增加一百万次,也只会在超过 285 年后才会出现精度问题。

' class="reference-link">

为什么 Prometheus 服务组件不支持 TLS 或身份验证?我可以添加那些吗?

注意:Prometheus 团队在 2018 年 8 月 11 日的开发峰会上已改变了立场,该项目的路线图现已支持对 TLS 和服务端点中的身份验证的支持。更改代码后,将更新此文档。

尽管 TLS 和身份验证是经常需要的功能,但我们故意没有在 Prometheus 的任何服务端组件中实现它们。两者都有太多不同的选项和参数(仅TLS就有 10 多个选项),我们决定专注于构建最佳监视系统,而不是在每个服务器组件中都支持完全通用的 TLS 和身份验证解决方案。

如果您需要 TLS 或身份验证,我们建议在 Prometheus 前面放置一个反向代理。例如,参见使用 Nginx 向 Prometheus 添加基本身份验证

这仅适用于入站连接。 Prometheus 支持从启用 TLS 和 auth 的目标采集数据,并且其他创建出站连接的 Prometheus 组件也具有类似的支持。