跳到主要内容

日志查询

基于 Loki 的日志检索,左侧「日志管理」下有两个面板,按来源分工:

面板来源适用场景
容器控制台Docker 容器 stdout/stderr(Alloy 采集)排查中间件、基础设施容器日志(MySQL / Redis / Kafka 等)
服务日志HAP 微服务结构化 JSON 日志(serilog 直推)排查业务调用、异常堆栈、按参数(手机号 / 用户 ID / traceID)搜索

两个面板顶部都有搜索关键字(全文、不分大小写)和多选下拉过滤器;时间窗默认最近 1 天,右上角可调。

容器控制台

「容器」下拉选容器名(如 script-app-1milvus-etcd),即可看该容器近期 stdout;配合搜索关键字定位内容。

容器控制台

服务日志

「服务日志」查的是 HAP 各微服务通过 serilog 直推到 Loki 的结构化日志。

接入步骤

HAP 侧必须显式打开写入开关,否则平台这边一条日志也查不到。

  1. 在 HAP 侧配置 ENV_LOKI_URL,指向本平台的 Loki:

    ENV_LOKI_URL=http://<运维平台主机IP>:3100

    写在 HAP 私有部署的环境变量里(单机在 docker-compose.yaml / .env,集群在对应 ConfigMap)。

  2. 重启 HAP 服务使变量生效。

  3. 确认网络可达:跨主机部署时,HAP 容器要能访问到运维平台主机的 3100 端口。

    # 在 HAP 任一容器内执行
    curl -s -o /dev/null -w '%{http_code}\n' http://<运维平台主机IP>:3100/ready
  4. 触发一次业务调用(登录、发验证码等),微服务只有实际跑过才会写日志。回到本页刷新即可看到。

两个 ENV_LOKI_URL 不是一回事
  • HAP 私有部署侧ENV_LOKI_URL = 写入开关,默认空,不配就不写日志(安装器据此把 StoreInLoki 设为 false)。
  • 运维平台侧ENV_LOKI_URL = 查询地址,默认 http://ops-loki:3100,标准拓扑下无需配置。

要配的是前者。只改后者不会有任何效果——这是本项最常见的误配。

进阶 LogQL

复杂查询(聚合 / 统计 / 正则)进 Grafana Explore(左下角 Grafana 图标 → Explore)直接写 LogQL:

{service_name="smssenderservice", detected_level="error"} # 短信服务所有 error
{hostname=~".+"} |~ "(?i)13800138000" # 全微服务搜手机号
sum(rate({hostname=~".+"}[5m])) by (service_name) # 各服务 5m 日志速率

语法见 LogQL 官方文档

备注

日志默认保留 30 天(ENV_LOKI_RETENTION=720h),可在 ops.yaml / ConfigMap 调整;磁盘紧张建议配 S3/MinIO 后端。