使用 Prometheus 查詢日誌

Prometheus 從 2.16.0 版本開始,能夠將引擎執行的所有查詢記錄到一個日誌檔案中。本指南演示瞭如何使用該日誌檔案、其中包含哪些欄位,並提供了關於如何操作日誌檔案的高階技巧。

啟用查詢日誌

查詢日誌可以在執行時切換。因此,當您想要調查 Prometheus 例項上的慢查詢或高負載時,可以啟用它。

要啟用或停用查詢日誌,需要兩個步驟:

  1. 修改配置以新增或刪除查詢日誌配置。
  2. 重新載入 Prometheus 伺服器配置。

將所有查詢記錄到檔案

此示例演示如何將所有查詢記錄到名為 /prometheus/query.log 的檔案中。我們假設 /prometheus 是資料目錄,並且 Prometheus 對其具有寫入許可權。

首先,修改 prometheus.yml 配置檔案

global:
  scrape_interval:     15s
  evaluation_interval: 15s
  query_log_file: /prometheus/query.log
scrape_configs:
- job_name: 'prometheus'
  static_configs:
  - targets: ['localhost:9090']

然後,重新載入 Prometheus 配置

$ curl -X POST http://127.0.0.1:9090/-/reload

或者,如果 Prometheus 未使用 --web.enable-lifecycle 啟動,並且您不在 Windows 上執行,則可以透過向 Prometheus 程序傳送 SIGHUP 訊號來觸發重新載入。

檔案 /prometheus/query.log 現在應該存在,並且所有查詢都將記錄到該檔案中。

要停用查詢日誌,請重複操作,但從配置中刪除 query_log_file

驗證查詢日誌是否啟用

Prometheus 方便地暴露了指標,指示查詢日誌是否已啟用並正常工作:

# HELP prometheus_engine_query_log_enabled State of the query log.
# TYPE prometheus_engine_query_log_enabled gauge
prometheus_engine_query_log_enabled 0
# HELP prometheus_engine_query_log_failures_total The number of query log failures.
# TYPE prometheus_engine_query_log_failures_total counter
prometheus_engine_query_log_failures_total 0

第一個指標 prometheus_engine_query_log_enabled 在查詢日誌啟用時設定為 1,否則為 0。第二個指標 prometheus_engine_query_log_failures_total 指示未能記錄的查詢數量。

查詢日誌格式

查詢日誌是 JSON 格式的日誌。以下是查詢中存在的欄位概述:

{
    "params": {
        "end": "2020-02-08T14:59:50.368Z",
        "query": "up == 0",
        "start": "2020-02-08T13:59:50.368Z",
        "step": 5
    },
    "stats": {
        "timings": {
            "evalTotalTime": 0.000447452,
            "execQueueTime": 7.599e-06,
            "execTotalTime": 0.000461232,
            "innerEvalTime": 0.000427033,
            "queryPreparationTime": 1.4177e-05,
            "resultSortTime": 6.48e-07
        }
    },
    "ts": "2020-02-08T14:59:50.387Z"
}
  • params: 查詢引數。起始和結束時間戳、步長以及實際的查詢語句。
  • stats: 統計資訊。目前,它包含內部引擎計時器。
  • ts: 查詢結束時的時間戳。

此外,根據觸發請求的來源,JSON 行中將包含其他欄位。

API 查詢和控制檯

HTTP 請求包含客戶端 IP、方法和路徑。

{
    "httpRequest": {
        "clientIP": "127.0.0.1",
        "method": "GET",
        "path": "/api/v1/query_range"
    }
}

如果設定了 Web 字首,路徑將包含該字首,並且也可以指向控制檯。

客戶端 IP 是網路 IP 地址,不考慮 X-Forwarded-For 等標頭。如果您希望記錄代理後面的原始呼叫者,則需要在代理本身中進行此操作。

記錄規則和告警

記錄規則和告警包含一個 ruleGroup 元素,其中包含檔案的路徑和組的名稱。

{
    "ruleGroup": {
        "file": "rules.yml",
        "name": "partners"
    }
}

輪換查詢日誌

Prometheus 不會自行輪換查詢日誌。相反,您可以使用外部工具來完成此操作。

其中一個工具是 logrotate。它在大多數 Linux 發行版中預設啟用。

這是一個您可以新增為 /etc/logrotate.d/prometheus 的檔案示例:

/prometheus/query.log {
    daily
    rotate 7
    compress
    delaycompress
    postrotate
        killall -HUP prometheus
    endscript
}

這將每天輪換您的檔案,並保留一週的歷史記錄。

本頁內容