搭建 Loki 高可用日志平台

适用场景

需要低成本、可水平扩展的日志聚合,和 Prometheus/Grafana 使用同一套标签体系。适合 Kubernetes 容器日志、多租户日志和长期归档。

前置条件

步骤

  1. 安装分布式 Loki:
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install loki grafana/loki \
  --namespace logging --create-namespace \
  --set deploymentMode=Distributed \
  --set loki.storage.type=s3 \
  --set loki.storage.s3.endpoint=minio.storage:9000 \
  --set loki.storage.s3.bucketnames.chunks=loki-chunks \
  --set loki.storage.s3.bucketnames.ruler=loki-ruler \
  --set loki.storage.s3.accessKeyId=minio \
  --set loki.storage.s3.secretAccessKey=minio123 \
  --set loki.storage.s3.s3ForcePathStyle=true
  1. 确认各组件就绪:
kubectl -n logging get pods
kubectl -n logging get svc

分布式模式包含 distributor、ingester、querier、query-frontend、compactor 和 index-gateway。

  1. 部署采集端。Kubernetes 环境可用 Alloy 或 Promtail:
helm install alloy grafana/alloy --namespace logging \
  --set 'alloy.configMap.content=...'

采集端需要打上 cluster、namespace、pod、container 等标签。

  1. 配置保留和压缩:
--set loki.limits_config.retention_period=720h
--set loki.compactor.retention_enabled=true
  1. 配置多租户和限流:
--set loki.limits_config.ingestion_rate_mb=10
--set loki.limits_config.ingestion_burst_size_mb=20
--set loki.limits_config.max_query_length=721h
  1. 在 Grafana 添加 Loki 数据源,使用 LogQL 查询:
{namespace="prod"} |= "error"
sum by (pod) (rate({namespace="prod"} |= "error" [5m]))

验证

回滚

常见坑

相关命令