常见问题
一般问题
什么是 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]
),或者对于尚未正式发布的组件将明确传达。
为什么采用拉取而不是推送模式?
通过 HTTP 拉取具有许多优点:
- 你可以根据需要启动额外的监控实例,例如在开发更改时在你的笔记本电脑上。
- 你可以更轻松、更可靠地判断目标是否宕机。
- 你可以手动访问目标并使用网页浏览器检查其健康状况。
总的来说,我们认为拉取模式略优于推送模式,但在选择监控系统时,这不应被视为一个主要考虑因素。
对于必须推送的场景,我们提供了Pushgateway。
如何将日志导入 Prometheus?
简短回答:不要!请使用 Grafana Loki 或 OpenSearch 等其他工具。
详细回答:Prometheus 是一个收集和处理指标的系统,而不是一个事件日志系统。Grafana 的博客文章《日志、指标和图表,天哪!》提供了更多关于日志和指标之间差异的详细信息。
如果你想从应用程序日志中提取 Prometheus 指标,Grafana Loki 正为此设计。请参阅 Loki 的指标查询文档。
Prometheus 是谁编写的?
Prometheus 最初由 Matt T. Proud 和 Julius Volz 私下启动。其早期的大部分开发工作由 SoundCloud 赞助。
Prometheus 是在什么许可下发布的?
Prometheus 在 Apache 2.0 许可下发布。
Prometheus 的复数形式是什么?
经过广泛研究,已确定 'Prometheus' 的正确复数形式是 'Prometheis'。
如果你记不住,可以使用“Prometheus 实例”作为变通方案。
我可以重新加载 Prometheus 的配置吗?
是的,向 Prometheus 进程发送 SIGHUP
信号或向 /-/reload
端点发送 HTTP POST 请求将重新加载并应用配置文件。各个组件会尝试优雅地处理失败的更改。
我可以发送告警吗?
可以,通过 Alertmanager。
我们支持通过电子邮件、各种原生集成以及一个任何人都可以添加集成的 Webhook 系统发送告警。
我可以创建仪表盘吗?
可以,我们推荐在生产环境中使用 Grafana。也有控制台模板。
我可以更改时区吗?为什么所有时间都显示为 UTC?
为了避免任何形式的时区混淆,特别是在涉及到夏令时的情况下,我们决定在 Prometheus 的所有组件中内部只使用 Unix 时间,并以 UTC 格式显示。可以在用户界面中引入一个精心设计的时区选择功能。欢迎贡献。有关此项工作的当前状态,请参见 issue #500。
仪表化
哪些语言有仪表化库?
有许多客户端库可用于使用 Prometheus 指标对您的服务进行仪表化。详情请参阅客户端库文档。
如果您有兴趣为新语言贡献客户端库,请参阅暴露格式。
我可以监控机器吗?
可以,Node Exporter 在 Linux 和其他 Unix 系统上提供了一系列丰富的机器级别指标,例如 CPU 使用率、内存、磁盘利用率、文件系统占用率和网络带宽。
我可以监控网络设备吗?
可以,SNMP Exporter 允许监控支持 SNMP 的设备。对于工业网络,也有 Modbus Exporter。
我可以监控批处理作业吗?
可以,使用 Pushgateway。另请参阅监控批处理作业的最佳实践。
Prometheus 可以开箱即用地监控哪些应用程序?
请参阅Exporter 和集成列表。
我可以通JMX监控 JVM 应用程序吗?
可以,对于无法直接使用 Java 客户端进行仪表化的应用程序,你可以使用 JMX Exporter,无论是独立运行还是作为 Java Agent。
仪表化的性能影响是什么?
不同客户端库和语言的性能可能有所不同。对于 Java,基准测试表明,使用 Java 客户端递增计数器/仪表需要 12-17 纳秒,具体取决于竞争情况。对于除延迟最敏感的代码之外的所有情况,这都可以忽略不计。
实现
为什么所有样本值都是 64 位浮点数?
为了简化设计,我们限制所有样本值为 64 位浮点数。IEEE 754 双精度二进制浮点格式支持最高达 253 的整数精度。支持原生 64 位整数(仅)在您需要高于 253 但低于 263 的整数精度时才会有帮助。原则上,可以实现对不同样本值类型(包括某种大整数,甚至支持超过 64 位)的支持,但这目前不是优先事项。一个计数器,即使每秒递增一百万次,也只会在超过 285 年后才会遇到精度问题。