CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/Prometheus/使用 Prometheus 查询日志
文档目录
Docker Swarm使用 Prometheus 查询日志使用 TLS 加密保护 Prometheus API 和 UI 端点使用基本认证保护 Prometheus API 和 UI 端点使用 cAdvisor 监控 Docker 容器指标为 Prometheus 对 Go 应用程序进行插桩理解和使用多目标 Exporter 模式将 Prometheus 用作 OpenTelemetry 后端Prometheus 中的 UTF-8

Prometheus

使用 Prometheus 查询日志

从 2.16.0 版本开始,Prometheus 具有将引擎运行的所有查询记录到日志文件的能力。本指南演示如何使用该日志文件、它包含哪些字段,并提供关于如何操作日志文件的高级技巧。 查询日志可以在运行时切换。因此,当你想要调查 Prometheus 实例的缓慢或高负载问题时,可以激活它。 要启用或禁用查询日志,需要两个步骤: 1. 修改配置以添加或移除查询日志配置。 1. 重新加载...

从 2.16.0 版本开始,Prometheus 具有将引擎运行的所有查询记录到日志文件的能力。本指南演示如何使用该日志文件、它包含哪些字段,并提供关于如何操作日志文件的高级技巧。

启用查询日志

查询日志可以在运行时切换。因此,当你想要调查 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
}

这将每天轮转文件并保留一周的历史记录。

文章大纲