# **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加密