服务日志查询
功能概述
服务日志查询模块通过内嵌 WebView 打开 Grafana 日志查看器(Explore 页面),用于查看和分析系统各服务的运行日志。系统会自动检测目标地址是否为 Grafana 实例,并完成免密登录,用户无需手动输入账号密码。
日志系统架构
系统采用 Promtail + Loki + Grafana 三件套实现分布式日志管理:
各服务器上的应用日志文件
│
▼
Promtail(日志收集)
每台产生日志的服务器都需安装
│
▼ 推送到 Loki
Loki(日志处理引擎)
中心化部署,只需安装一个
负责日志存储、索引、查询
│
▼ 数据源对接
Grafana(日志查看器)
中心化部署,只需安装一个
提供 Explore 页面进行日志查询
│
▼ WebView 内嵌显示
本系统"服务日志查询"页面
自动完成 Grafana 登录各组件职责:
| 组件 | 部署方式 | 作用 |
|---|---|---|
| Promtail | 每台日志服务器都安装 | 监听日志文件变化,采集并推送到 Loki |
| Loki | 中心化部署一个 | 接收、存储、索引日志数据,提供查询 API |
| Grafana | 中心化部署一个 | 连接 Loki 数据源,提供可视化日志查询界面 |
操作说明
打开日志查看器
- 登录系统后,在菜单中选择 系统管理 → 服务日志查询
- 系统自动在 WebView 中打开 Grafana Explore 页面(地址如
http://10.11.5.49:3000/explore) - 系统自动检测目标地址是否为 Grafana 实例(通过
/api/health接口验证) - 如果尚未登录,系统会自动完成 Grafana 登录并将 Session Cookie 注入 WebView,用户无需手动操作
查询日志
在 Grafana Explore 页面中:
- 选择数据源:在左上角选择 Loki 数据源
- 输入查询条件:在查询栏输入 LogQL 查询语句,例如:
- 查询某应用的所有日志:
{app="RMES-APP-53"} - 按日志级别筛选:
{app="RMES-APP-53"} |= "ERROR" - 按时间范围筛选:在右上角设置时间范围
- 查询某应用的所有日志:
- 点击 Run query 或按
Shift + Enter执行查询 - 查看查询结果,支持按时间线浏览和搜索高亮
常用查询示例
| 查询需求 | LogQL 语句 |
|---|---|
| 查看某应用全部日志 | {app="RMES-APP-53"} |
| 只看 ERROR 级别日志 | {app="RMES-APP-53"} |~ "(?i)error" |
| 只看 WARN 级别日志 | {app="RMES-APP-53"} |~ "(?i)warn" |
| 搜索包含特定关键字的日志 | ` |
| 排除包含某文本的日志 | {app="RMES-APP-53"} != "DEBUG" |
| 按日志文件名筛选 | {app="RMES-APP-53", filename="xxx.log"} |
提示
日志的 app 标签对应 Promtail 配置中的 labels.app 值,filename 标签由 Promtail 自动从日志文件路径中提取。
Grafana 自动登录机制
系统通过 HmxGrafanaUIWebViewPlugin 插件实现免密登录:
- 检测:WebView 加载 URL 时,插件调用
/api/health接口判断是否为 Grafana 实例 - 登录:如果 WebView 中没有有效的
grafana_sessionCookie,插件通过 HTTP POST/login接口自动登录 - 注入:将获取到的 Session Cookie 注入 WebView,有效期 30 天
- 缓存:Grafana 实例的检测结果会被缓存,避免重复请求
日志文件格式
应用日志由 NLog 生成,格式为:
2026-09-16 10:30:15.123 INFO 日志消息内容
2026-09-16 10:30:15.456 ERROR 发生错误的详细信息Promtail 配置了多行日志合并规则:以时间戳格式 YYYY-MM-DD HH:MM:SS.mmm 开头的行被视为新日志的起始行,超出 3 秒未匹配到新起始行则强制分割。
关键配置参考
Promtail 配置要点
| 配置项 | 值 | 说明 |
|---|---|---|
| http_listen_port | 3188 | Promtail 服务端口 |
| clients.url | http://<Loki地址>:3100/loki/api/v1/push | Loki 推送地址 |
| labels.app | 应用标识(如 RMES-APP-53) | 应用名称标签 |
| path | 日志文件路径(支持通配符) | 如 D:\mes-apps\logs\*\*.log |
Loki 配置要点
| 配置项 | 值 | 说明 |
|---|---|---|
| http_listen_port | 3100 | Loki 服务端口 |
| retention_period | 2160h(90天) | 日志保留时长 |
| reject_old_samples_max_age | 168h(7天) | 超过7天的日志拒绝写入 |
Grafana 配置要点
| 配置项 | 说明 |
|---|---|
| 默认端口 | 3000 |
| 默认账号 | admin |
| 数据源类型 | Loki |
| 数据源地址 | http://<Loki地址>:3100 |