企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# **FAQ** <br /> ## **常规问题 General** ### **Prometheus 是什么?** Prometheus 是一个拥有活跃生态的开源监控报警软件。可以查看概览。 ### **Prometheus 与其他监控系统相比如何?** 可以查看方案比较。 ### **Prometheus 有什么依赖?** 主要的 Prometheus server 运行单机模式,没有其他外部依赖。 ### **Prometheus 可以做到 HA 吗?** 是的,可以在两台或多台机器上运行相同的 Prometheus server。相同的报警会由 Alertmanager 进行数据去重。 ### **“Prometheus 不支持扩展“** 实际上,存在多种扩展和联合 Prometheus 的方法。可以初步阅读[扩展和联邦化 Prometheus]([https://www.robustperception.io/scaling-and-federating-prometheus](https://www.robustperception.io/scaling-and-federating-prometheus))。 ### **Prometheus 用什么编程语言开发的?** 大部分 Prometheus 组件是用 Go 开发的。有一些是用 Java、Python、Ruby 开发的。 ### **Prometheus 功能,存储格式,API的稳定性如何?** Prometheus GitHub 组织中所有已达到版本 1.0.0 的 Repository 都大致遵循语义版本控制。 重大更改以主要版本的增量表示。 实验组件可能会出现例外,声明中会明确标出此类例外。 通常,即使尚未达到 1.0.0 版 Repository 也相当稳定。 我们的目标是为每个 Repository 制定适当的发布流程并最终发布 1.0.0。 在任何情况下,重大更改都将在发行说明中指出(由 [CHANGE] 标记),或者对于尚未正式发行的组件进行清楚的表明。 ### **为什么是 Pull 而不是 Push?** 通过 HTTP 的 Pull 的方式由以下优点: * 当有开发更新时,您也可以在笔记本上运行监控。 * 您可以更简单的判断 target 是否已经 down。 * 您可以手动转到 target 并使用 Web 浏览器检查其运行状况。 总体而言,我们认为 Pull 比 Push 略好,但在考虑使用监控系统时,不应将其视为重点。 对于必须使用 Push 的情况,我们提供了 Pushgateway。 ### **如何将日志输入 Prometheus?** 简短回答:不要这么做!请使用 ELK stack 相关软件。 较长回答:Prometheus 是一个收集和处理 metrics 的系统,而不是事件记录系统。Raintank 博客 PO 了文章 [Logs and Metrics and Graphs, Oh My!](https://blog.raintank.io/logs-and-metrics-and-graphs-oh-my/) 提供了有关日志和指标之间差异的更多详细信息。 如果您想要从应用日志中抽取 Prometheus metrics,Google的[mtail](https://github.com/google/mtail) 可能会有帮助。 ### **谁开发了 Prometheus?** Prometheus 最初由 Matt T. Proud 和 Julius Volz 私人创立。 它的大部分初始开发是由 SoundCloud 赞助的。 现在,它已由众多公司和个人维护和扩展。 ### **Prometheus License** Prometheus 是根据 Apache 2.0 许可发布的。 ### **Prometheus 的复数是什么?** 经过[广泛研究](https://youtu.be/B_CDeYrqxjQ),已经确定 Prometheus 的复数是`Prometheis`。 ### **我能 Reload Prometheus 的配置吗?** 是的,将 SIGHUP 发送到 Prometheus 进程或将 HTTP POST 请求发送到 /-/ reload endpoint 将重新加载并应用配置文件。 各种组件都能够优雅地处理失败的修改。 ### **我能发送报警吗?** 可以,通过 Alertmanager。 目前,支持以下外部系统: * Email * Generic Webhooks * HipChat * OpsGenie * PagerDuty * Pshover * Slack ### **我能创建 Dashboards 吗?** 是的,我们建议您使用 Grafana 进行生产。 也有[控制台模板(Console templates)]([https://prometheus.io/docs/visualization/consoles/](https://prometheus.io/docs/visualization/consoles/))。 ### **我能改变时区吗?为什么一切都是 UTC?** 为避免任何时区混乱,特别是在涉及所谓的夏时制时,我们决定在 Prometheus 的所有组件中内部专门使用 Unix time 和 UTC 进行显示。 可以将精心选择的时区选择引入 UI。 欢迎提供 Contributions。 有关此工作的当前状态,请参阅 issue #500。 ## **检测 Instrumentation** ### **哪个语言有检测库(instrumentation libraries)?** 有许多客户端库可使用 Prometheus metrics 来检测您的服务。 有关详细信息,请参见客户端库文档。 如果您有兴趣为新语言的客户库提供帮助,请参阅[暴露格式(Exposition Formats)]([https://prometheus.io/docs/instrumenting/exposition\_formats/](https://prometheus.io/docs/instrumenting/exposition_formats/))。 ### **我能够监控机器吗?** 是的,[Node Exporter](https://github.com/prometheus/node_exporter) 在 Linux 和其他 Unix 系统上能够暴露一组广泛使用的机器级别指标,例如 CPU 使用率,内存,磁盘使用率,文件系统完整性和网络带宽。 ### **我能监控网络设备吗?** 是的,[SNMP Exporter](https://github.com/prometheus/snmp_exporter) 允许监控支持 SNMP 的设备。 ### **我能监控批处理任务吗?** 是的,使用 [Pushgateway](https://prometheus.io/docs/instrumenting/pushing/)。参考[最佳实践](https://prometheus.io/docs/practices/instrumentation/#batch-jobs)中监控批处理任务部分。 ### **Prometheus 可以直接监控哪些应用程序?** 参考 [Exporters 和 Integrations 列表](https://prometheus.io/docs/instrumenting/exporters/) ### **我可以通过 JMX 监控 JVM 应用程序吗?** 是的,对于无法直接使用 Java 客户端进行检测的应用程序,可以单独使用 [JMX Exporter](https://github.com/prometheus/jmx_exporter) 或将其用作 Java 代理。 ### **Instrumentation 的性能影响是什么?** 客户端库和语言之间的性能可能会有所不同。 对于 Java,基准测试表明,根据对比,使用 Java 客户端增加计数器/表将花费 12-17ns。 除了对延迟最关键的代码之外,所有其他代码都可以忽略不计。 ## **Troubleshooting** ### **我的 Prometheus 1.x 服务器需要花费很长时间才能启动,并且通过崩溃恢复的大量日志发送垃圾邮件** 您的关机操作并不干净。 SIGTERM 之后,Prometheus 必须彻底关闭,对于频繁使用的服务器可能需要一段时间。 如果服务器崩溃或死机(例如,OOM 被内核杀死,或者您的运行级别系统在等待 Prometheus 关闭时处于繁忙状态),则必须执行崩溃恢复,在正常情况下,恢复时间应少于一分钟,但是可能在某些情况下要花很长时间。 有关详细信息,请参见[崩溃恢复](https://prometheus.io/docs/prometheus/1.8/storage/#crash-recovery)。 ### **我的 Prometheus 1.x 服务器内存不够(out of memory)** 请参阅[有关内存使用的部分](https://prometheus.io/docs/prometheus/1.8/storage/#memory-usage),以配置 Prometheus 的可用内存量。 ### **我的 Prometheus 1.x 服务器报告处于紧急模式(rushed mode)或存储需要节流(storage needs throttling)** 您的存储负载较高。 阅读[有关配置本地存储的部分](https://prometheus.io/docs/prometheus/1.8/storage/),了解如何调整设置以获得更好的性能。 ## **实现 Implementation** ### **为什么所有样本值都是 64 位浮点数?我想要整数** 我们将自己限制在 64 位浮点数上,以简化设计。 [IEEE 754 双精度二进制浮点格式](https://en.wikipedia.org/wiki/Double-precision_floating-point_format)支持最大精度为 253 的整数精度。仅当需要大于 253 但小于 263 的整数精度时,支持本机 64 位整数(仅)会有所帮助。原则上,支持不同的样本值类型 (包括某种大整数,甚至支持 64 位以上)都可以实现,但现在并不是优先考虑的事情。 计数器即使每秒增加一百万次,也只会在超过 285 年后才会出现精度问题。 ### **为什么 Prometheus server 组件不支持 TLS 或权限?我能添加这些吗?** 注意:Prometheus 团队在 2018 年 8 月 11 日的开发峰会上已改变了立场,该项目的[Roadmap](https://prometheus.io/docs/introduction/roadmap/#tls-and-authentication-in-http-serving-endpoints)现已支持对 TLS 和服务端点中的身份验证的支持。更改代码后,将更新此文档。 尽管 TLS 和身份验证是经常需要的功能,但我们故意没有在 Prometheus 的任何服务器端组件中实现它们。两者都有太多不同的选项和参数(仅 TLS 就有 10 多个选项),我们决定专注于构建最佳监视系统,而不是在每个服务器组件中都支持完全通用的 TLS 和身份验证解决方案。 如果您需要 TLS 或身份验证,我们建议在 Prometheus 前面放置一个反向代理。例如,参见[使用 Nginx 向 Prometheus 添加基本身份验证](https://www.robustperception.io/adding-basic-auth-to-prometheus-with-nginx/)。 这仅适用于入站连接。 Prometheus 支持[抓取启用 TLS 和 auth 的目标](https://prometheus.io/docs/operating/configuration/#%3Cscrape_config%3E),并且其他创建出站连接的 Prometheus 组件也具有类似的支持。