常见问题解答

常规问题

Prometheus 是什么?

Prometheus 是一个开源的系统监控和告警工具包,拥有一个活跃的生态系统。它是唯一直接被 Kubernetes 支持的系统,并且是整个 云原生生态系统 中事实上的标准。请参阅概述

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

请参阅比较页面。

Prometheus 有哪些依赖项?

Prometheus 主服务器以单个整体二进制文件的形式独立运行,没有外部依赖项。

这是云原生吗?

是的。

云原生是一种灵活的运营模式,它打破了旧的服务边界,以实现更灵活和可扩展的部署。

Prometheus 的服务发现与大多数工具和云集成。其维度数据模型和可扩展至数千万活跃时间序列的能力,使其能够监控大型云原生部署。在运行服务时总需要进行权衡,而 Prometheus 将可靠地向人类发送告警置于首位。

Prometheus 能否实现高可用性?

是的,在两台或更多台独立的机器上运行相同的 Prometheus 服务器即可。Alertmanager会对相同的告警进行去重。

Alertmanager 通过互连多个 Alertmanager 实例来构建 Alertmanager 集群,从而支持高可用性。集群中的实例使用基于 HashiCorp 的 Memberlist 库管理的 Gossip 协议进行通信。

我听说 Prometheus “无法扩展”。

这通常更多的是一种营销说辞,而非事实。

单个 Prometheus 实例的性能可能比某些自称为 Prometheus 长期存储解决方案的系统还要高。您可以可靠地运行拥有数千万活跃时间序列的 Prometheus。

如果您需要更多,有几种选择。Robust Perception 博客上的扩展和联邦 Prometheus是一个很好的起点,我们集成页面上列出的长期存储系统也是不错的选择。

Prometheus 是用什么语言编写的?

大多数 Prometheus 组件是用 Go 编写的。有些也用 Java、Python 和 Ruby 编写。

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

Prometheus GitHub 组织中所有达到 1.0.0 版本的仓库都广泛遵循语义化版本。重大更改通过主版本的增加来表示。实验性组件可能会有例外,这些组件在公告中会明确标出。

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

为什么是拉取(pull)而不是推送(push)?

通过 HTTP 拉取数据有许多优点:

  • 您可以根据需要启动额外的监控实例,例如在开发更改时在您的笔记本电脑上运行。
  • 您可以更容易、更可靠地判断一个目标是否宕机。
  • 您可以手动访问目标,并使用 Web 浏览器检查其健康状况。

总的来说,我们认为拉取比推送稍好,但在考虑监控系统时不应将其视为一个主要因素。

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

如何将日志输入 Prometheus?

简短回答:不要这样做!请使用像 Grafana LokiOpenSearch 这样的工具。

详细回答:Prometheus 是一个用于收集和处理指标的系统,而不是一个事件日志系统。Grafana 的博客文章《日志、指标和图表,天哪!》提供了关于日志和指标之间差异的更多细节。

如果您想从应用程序日志中提取 Prometheus 指标,Grafana Loki 正是为此设计的。请参阅 Loki 的指标查询文档。

谁编写了 Prometheus?

Prometheus 最初由 Matt T. ProudJulius Volz 私下启动。其大部分初期开发由 SoundCloud 赞助。

现在由广泛的公司个人共同维护和扩展。

Prometheus 使用什么许可证发布?

Prometheus 在 Apache 2.0 许可证下发布。

Prometheus 的复数形式是什么?

经过广泛研究,确定‘Prometheus’的正确复数形式是‘Prometheis’。

如果您记不住,用“Prometheus 实例”也是一个不错的替代方案。

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

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

我可以发送告警吗?

是的,使用 Alertmanager

我们支持通过电子邮件、各种原生集成以及一个任何人都可以添加集成的 webhook 系统来发送告警。

我可以创建仪表盘吗?

是的,我们推荐在生产环境中使用 Grafana。此外,还有控制台模板

我可以更改时区吗?为什么所有东西都是 UTC 时间?

为了避免任何时区混乱,尤其是在涉及所谓的夏令时的情况下,我们决定在 Prometheus 的所有组件中内部统一使用 Unix 时间,并在显示时使用 UTC。可以在 UI 中引入一个经过仔细设计的时区选择功能。欢迎贡献。有关此项工作的当前状态,请参阅问题 #500

埋点

哪些语言有埋点库?

有许多客户端库可用于为您的服务埋点 Prometheus 指标。详情请参阅客户端库文档。

如果您有兴趣为一种新语言贡献客户端库,请参阅暴露格式

我可以监控机器吗?

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

我可以监控网络设备吗?

是的,SNMP Exporter 允许监控支持 SNMP 的设备。对于工业网络,还有一个 Modbus 导出器

我可以监控批处理作业吗?

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

Prometheus 开箱即用可以监控哪些应用程序?

请参阅导出器和集成列表

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

是的,对于无法直接使用 Java 客户端进行埋点的应用程序,您可以使用 JMX Exporter,既可以独立运行,也可以作为 Java Agent 使用。

埋点对性能有多大影响?

不同客户端库和语言的性能可能会有所不同。对于 Java,基准测试表明,使用 Java 客户端增加一个计数器/计量器的值需要 12-17 纳秒,具体取决于竞争情况。这对于除了对延迟最敏感的代码之外的所有情况都是可以忽略不计的。

实现

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

为了简化设计,我们限制自己只使用 64 位浮点数。IEEE 754 双精度二进制浮点格式支持高达 253 的整数精度。支持原生 64 位整数(仅仅)在您需要高于 253 但低于 263 的整数精度时才有用。原则上,可以实现对不同样本值类型的支持(包括某种大整数,支持超过 64 位),但目前这不是一个优先事项。一个计数器,即使每秒增加一百万次,也要超过 285 年才会遇到精度问题。

本页内容