Loki 与 Grafana
loki、与 prom 组合。
25 分钟
Loki 与 Grafana 日志栈
Grafana Loki 受 Prometheus 启发:只索引 labels,不索引全文,日志内容压缩存对象存储,成本远低于 Elasticsearch。与 Prometheus + Grafana 同 UI 关联,是 K8s 原生团队的热门选择。本课讲 Promtail 采集与 LogQL;指标栈见 prometheus-essentials 与 prom-grafana,理论见 observability-essentials,DevOps 见 /roadmaps/devops。
学习目标
- 理解 Loki labels 索引 + chunk 存储 与 ES 全文索引的差异
- 用 Promtail 采集 K8s Pod 日志并打
service、namespace标签 - 编写 LogQL:rate、filter、与 Prometheus 指标 同屏关联
架构
Pod stdout
└─ Promtail(DaemonSet)
└─ Loki :3100
└─ Grafana(Metrics + Logs 同一 Dashboard)
# promtail scrape 概念配置
scrape_configs:
- job_name: kubernetes-pods
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
target_label: app
- source_labels: [__meta_kubernetes_namespace]
target_label: namespace
pipeline_stages:
- json:
expressions:
level: level
trace_id: trace_id
- labels:
level:
trace_id:
LogQL 示例
# 最近 5 分钟 backend ERROR 条数/秒
sum(rate({app="coderoadmap-backend"} |= "ERROR" [5m]))
# 带 trace_id 过滤
{app="coderoadmap-backend"} | json | trace_id="abc123"
# 与 metrics 同图:左 PromQL QPS,右 LogQL error rate
限制:Loki 不适合 heavy 全文 Google 式搜索;复杂 ad-hoc 文本分析仍选 dob-elastic。优势:与 prom-k8s kube-prometheus-stack 一键 Helm 部署。
练习
- 在 Grafana Explore 用 LogQL 查一次带 trace_id 的 ERROR 日志
- 建 Dashboard:Panel A PromQL QPS,Panel B LogQL error count,共享 time range
- 说明 Loki 为何不索引 message 全文,对查询习惯有何影响