日志查询使用指南
运维平台基于 Loki 提供日志查询能力,左侧"日志"组下有两个面板,按数据来源拆分:
| 面板 | 数据来源 | 主要 stream label | 适用场景 |
|---|---|---|---|
| 容器控制台 | Docker 容器 stdout/stderr(由 alloy 采集) | container / service_name / log_source=docker | 排查中间件、基础设施层日志(MySQL、Redis、Kafka 等容器) |
| 服务日志 | HAP 内部微服务的结构化 JSON 日志(serilog 直推 Loki) | service_name / hostname / action / level / extras / stack | 排查业务调用、异常 stack trace、特定参数(手机号、用户 ID 等) |
公共过滤器
两个面板顶部都有:
- 搜索关键字(textbox):全文匹配(不区分大小写)
- 多选下拉过滤器:容器控制台是「容器」,服务日志是「服务」+「级别」
时间窗口默认最近 30 分钟,可在右上角调整。
容器控制台
典型使用
查看某个容器的日志
- 「容器」下拉选择 container 名(如
milvus-etcd、script-app-1) - 列表显示该容器近期的 stdout 输出
按关键字筛选
- 「搜索关键字」输入要搜的内容(支持中文)
服务日志
自动展开的 stream label
服务日志面板的每条日志会自动把结构化字段展开显示在原始 line 下方:
2026-05-13 17:43:22.911 {"Message":"未配置短信服务","level":"error"}
⏵ action: /MD.SmsService.Sms/SendMessage
⏵ level: error
⏵ elapsed_ms: 0
⏵ extras: [[Mobile, +8618596683881], [Message, 您的验证码是144249...]]
⏵ stack: 未配置短信服务
at MD.Sms.GrpcService.Implements.SmsImplement.PreValidAsync...
| Stream Label | 含义 |
|---|---|
service_name | HAP 微服务名(如 smssenderservice、workflow、worksheetservice) |
action | 业务调用方法(gRPC 接口路径或 Java/Net 类方法) |
detected_level | 日志级别(info / warn / error) |
elapsedmilliseconds | 调用耗时(毫秒) |
extras | 业务参数(请求/响应详情,常含手机号、ID 等业务数据) |
stack | 异常调用栈(.NET / Java 完整 stack trace) |
hostname | 服务运行的容器 hostname |
典型查询场景
1. 按服务过滤
「服务」下拉选 smssenderservice → 只看短信服务相关日志。
2. 搜手机号 / 用户 ID / traceID
「搜索关键字」输入 18596683881 → 单 query 同时匹配日志正文和所有 stream label(手机号通常在 extras 而非正文)。
3. 只看错误
「级别」选 error,或在「搜索关键字」输入 error。
4. 跨服务追踪一个 trace
搜索 traceID 关键字(如 traceID=4a45ebccbdd91418)即可看到所有相关服务的调用链日志。
Loki 数据保留时长
默认保留 30 天(ENV_LOKI_RETENTION=720h),可在 ops.yaml / ConfigMap 中调整。
进阶 LogQL
需要更复杂的查询(聚合、统计、复杂正则)时,进入 Grafana 的 Explore 视图(左下角 Grafana 图标 → Explore)直接写 LogQL,参考:
{service_name="smssenderservice", detected_level="error"}— 短信服务所有 error{hostname=~".+"} |~ "(?i)18596683881"— 全 HAP 微服务搜手机号sum(rate({hostname=~".+"}[5m])) by (service_name)— 各服务最近 5 分钟日志速率{container=~"milvus-.*"} |= "error" | json— milvus 容器的 error 日志并 JSON 解析
更多语法参考 LogQL 官方文档。