常见问题
通用
什么是 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 Loki 或 OpenSearch 等替代方案。
更长的回答:Prometheus 是一个用于收集和处理指标的系统,而不是事件日志系统。Grafana 的博客文章 Logs and Metrics and Graphs, Oh My! 提供了关于日志和指标之间差异的更多细节。
如果你想从应用程序日志中提取 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 用于生产环境。还有 Console 模板。
可以更改时区吗?为什么一切都是 UTC?
为避免任何时区混淆,尤其是在涉及所谓的夏令时时,我们决定在 Prometheus 的所有组件中内部仅使用 Unix 时间,并以 UTC 作为显示目的。可以在 UI 中引入一个经过仔细考虑的时区选择。欢迎贡献。有关此工作的当前状态,请参阅 issue #500 。
仪器
哪些语言有仪器库?
有许多用于仪器化服务以获取 Prometheus 指标的客户端库。请参阅 客户端库 文档了解详情。
如果您有兴趣为新语言贡献客户端库,请参阅 暴露格式。
可以监控机器吗?
是的,Node Exporter 在 Linux 和其他 Unix 系统上公开了广泛的机器级指标,例如 CPU 使用率、内存、磁盘利用率、文件系统饱满度以及网络带宽。
可以监控网络设备吗?
是的,SNMP Exporter 允许监控支持SNMP的设备。对于工业网络,还有一个Modbus exporter 。
我能监控批处理作业吗?
是的,使用Pushgateway。也可以参考关于监控批处理作业的最佳实践。
Prometheus可以开箱即用地监控哪些应用程序?
请参阅exporter和集成列表。
我可以通过JMX监控JVM应用程序吗?
是的,对于您无法使用Java客户端直接进行instrumentation的应用程序,您可以使用JMX Exporter ,可以是独立运行的,也可以作为Java Agent使用。
Instrumentation的性能影响是什么?
客户端库和语言之间的性能可能会有所不同。对于Java,基准测试 显示,使用Java客户端递增计数器/gauge将花费12-17ns,具体取决于争用情况。这对几乎所有代码来说都是微不足道的,除了那些对延迟要求极高的代码。
实现
为什么所有样本值都是64位浮点数?
我们为了简化设计而限制为64位浮点数。 IEEE 754双精度二进制浮点格式 支持整数精度,最高可达253。支持本地64位整数仅在您需要超过253但低于263的整数精度时才有帮助。原则上,可以实现对不同样本值类型(包括某种大整数,支持超过64位)的支持,但目前不是优先事项。一个计数器,即使每秒增加一百万次,也需要超过285年才会出现精度问题。