• 常见问题
    • " level="2">一般问题
      • " level="3">Prometheus 是什么?
      • " level="3">Prometheus 与其他监控系统相比如何?
      • " level="3">Prometheus 有哪些依赖?
      • " level="3">Prometheus 可以配置为高可用吗?
      • " level="3">Prometheus 没有扩展和收缩
      • " level="3">Prometheus 使用什么语言编写而成?
      • " level="3">Prometheus 功能,存储格式和 API 的稳定性如何?
      • " level="3">为什么使用数据拉取方式而不是数据推送方式?
      • " level="3">Prometheus 如何处理日志?
      • " level="3">Prometheus 是谁写的?
      • " level="3">Prometheus 基于什么协议?
      • " level="3">Prometheus 的复数是什么?
      • " level="3">我可以重新加载 Prometheus 的配置吗?
      • " level="3">可以发送告警吗?
      • " level="3">可以创建仪表板吗?
      • " level="3">可以更改时区吗?为什么所有内容都采用 UTC 时间?
    • " level="2">工具
      • " level="3">有哪些语言的工具库?
      • " level="3">可以监控机器吗?
      • " level="3">可以监视网络设备吗?
      • " level="3">可以监控批处理作业吗?
      • " level="3">Prometheus 可以直接监控哪些应用程序?
      • " level="3">可以通过 JMX 监控 JVM 应用程序吗?
      • " level="3">什么影响工具的性能?
    • " level="2">故障排查
      • " level="3">Prometheus 1.x 服务需要花费很长时间才能启动,日志中显示有大量崩溃恢复的信息
      • " level="3">Prometheus 1.x 服务内存不足
      • " level="3">Prometheus 1.x 服务报告处于 “紧急模式” 或 “存储需要节流”
    • " level="2">实践
      • " level="3">为什么所有样本值都是 64 位浮点数?我想要整数
      • " level="3">为什么 Prometheus 服务组件不支持 TLS 或身份验证?我可以添加那些吗?

    常见问题

    一般问题

    Prometheus 是什么?

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

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

    请参阅比较页面。

    Prometheus 有哪些依赖?

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

    Prometheus 可以配置为高可用吗?

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

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

    Prometheus 没有扩展和收缩

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

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

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

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

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

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

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

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

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

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

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

    Prometheus 如何处理日志?

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

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

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

    Prometheus 是谁写的?

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

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

    Prometheus 基于什么协议?

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

    Prometheus 的复数是什么?

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

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

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

    可以发送告警吗?

    可以,使用 Alertmanager

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

    可以创建仪表板吗?

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

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

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

    工具

    有哪些语言的工具库?

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

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

    可以监控机器吗?

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

    可以监视网络设备吗?

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

    可以监控批处理作业吗?

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

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

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

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

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

    什么影响工具的性能?

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

    故障排查

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

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

    Prometheus 1.x 服务内存不足

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

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

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

    实践

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

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

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

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

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

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

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