# **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 组件也具有类似的支持。
- 介绍(Introduction)
- 概览(Overview)
- First steps
- 方案比较
- FAQ
- Roadmap
- Media
- 术语表(Glossary)
- 概念(Concepts)
- 数据模型(Data model)
- 指标类型(Metric types)
- 作业和实例(Jobs and instances)
- Prometheus
- Getting started
- 安装
- 配置
- 配置
- 记录规则(Recording Rules)
- 报警规则(Alerting Rules)
- 模版示例
- 模版参考
- Rules的单元测试
- Querying
- Basics
- Operators
- Functions
- Examples
- HTTP API
- 存储(Storage)
- 联邦(Federation)
- 管理API(Management API)
- 迁移(Migration)
- API稳定性
- 可视化(Virsualization)
- Instrumenting
- 客户端库
- 开发客户端库
- 推送metrics
- exporters & 集成
- 开发exporters
- 格式一览(Exposition formats)
- Operating
- 安全
- 集成
- 报警(Alerting)
- 报警概览
- Alertmanager
- 配置
- 客户端
- 通知模版参考
- 通知模版样例
- 管理API
- Best Practices
- Metric & label 名称
- Instrumentation
- console & dashboard
- Histogram & summary
- 报警
- 记录规则(Recording rules)
- 何时使用Pushgateway
- Remote write tuning
- Guides
- 使用cAdvisor监控Docker容器
- 使用基于文件的服务发现来发现抓取target
- Basic auth
- 使用node exporter来监控Linux宿主机metrics
- Instrumenting一个Go应用程序
- TLS加密