Grafana日志可视化
介绍
Grafana是一个开源的指标分析和可视化平台,与Loki深度集成后,能够将日志数据转化为直观的图表和仪表盘。本章将指导初学者通过Grafana探索Loki存储的日志数据,实现从原始日志到可视化洞察的完整流程。
基础概念
1. Loki数据源配置
首先需在Grafana中添加Loki数据源:
yaml
# grafana配置示例 (datasources.yaml)
datasources:
- name: Loki
type: loki
url: http://loki:3100
access: proxy
2. LogQL查询语言
通过LogQL筛选日志:
logql
{app="nginx"} |= "error" | json | latency > 500ms
提示
|=
是字符串匹配操作符,| json
会自动解析JSON格式日志字段
可视化实战
1. 时间序列日志统计
logql
sum by (level) (
count_over_time(
{app="myapp"} | json | level=~"(error|warn)" [1h]
)
)
2. 日志字段提取表格
使用line_format
格式化输出:
logql
{container="frontend"}
| json
| line_format "{{.user}} ({{.ip}}) - {{.method}} {{.path}}"
实际案例:电商系统监控
场景需求
监控用户下单流程中的异常日志:
- 支付超时(包含"payment timeout")
- 库存校验失败(statusCode=500且path包含"/stock")
解决方案
logql
{app="ecommerce"}
|~ "payment timeout"
or
(statusCode=500 and path=~"/stock/.*")
| rate [5m]
最佳实践
建议为高频查询添加缓存:
Loki配置 -> query_range -> max_entries
高级技巧
1. 多数据源关联
将日志指标与Prometheus指标联合查询:
logql
# 关联错误日志与CPU负载
(avg_over_time({app="api"} |= "panic" [5m])) by (pod)
+
on(pod) group_left
(container_cpu_usage_seconds_total)
2. 变量模板化
创建可交互的仪表盘:
grafana
# 在Dashboard设置中添加变量
Variables -> name=level -> Query: label_values(logs, level)
总结
关键知识点回顾:
- Loki数据源的基础配置方法
- LogQL的过滤/统计语法
- 时间序列与表格两种可视化形式
- 实际业务场景的查询设计模式
延伸学习
推荐练习:
- 创建一个显示不同namespace错误率的趋势图
- 设计包含日志样本和统计数据的混合面板
- 实现基于日志内容的告警规则
附加资源:
- Grafana官方日志可视化教程
- LogQL语法速查手册
- 性能优化白皮书