Loki 如何配置 S3 作为存储后端?
Loki 3.x 使用 TSDB v13 与 S3 存储日志块和索引;配置 bucket、region 与凭据来源,保留本地 WAL 和活动索引,说明 MinIO 兼容端与版本边界。
以下按 Loki 3.x 配置:在 schema_config 中设 object_store: s3,并配置 storage_config.aws。tsdb_shipper.shared_store 已在 Loki 3.0 移除;日志块与索引上传对象存储后,本地仍需 WAL、活动索引与缓存,并非只留缓存。
完整配置示例
auth_enabled: false
server:
http_listen_port: 3100
common:
path_prefix: /loki
instance_addr: 127.0.0.1
replication_factor: 1
ring:
kvstore:
store: inmemory
ingester:
chunk_idle_period: 5m
max_chunk_age: 1h
wal:
enabled: true
dir: /loki/wal
schema_config:
configs:
- from: 2024-01-01
store: tsdb
object_store: s3
schema: v13
index:
prefix: index_
period: 24h
storage_config:
tsdb_shipper:
active_index_directory: /loki/index
cache_location: /loki/cache
aws:
bucketnames: my-loki-logs
region: us-east-1
这是单进程、单副本示例,不是生产高可用拓扑。先创建 bucket、填写实际 region、授予工作负载权限,并为 /loki 配置可写存储,WAL 应持久化。auth_enabled: false 不提供 HTTP 身份认证,应配置入口访问控制。新部署的 schema 日期需早于写入数据;已有部署按迁移流程追加配置,保留历史条目。
要点说明
- WAL 应持久化:用于崩溃恢复,但磁盘丢失、损坏或空间耗尽等情况下不能保证零丢失;
- MinIO/对象存储兼容端:按实际地址设置
endpoint,常用s3forcepathstyle: true,是否必需取决于 DNS/寻址配置;仅 HTTP 端点使用insecure: true。若配置${AWS_ACCESS_KEY_ID}等环境变量占位符,启动必须加-config.expand-env=true; - 生产用 IAM 角色:EKS 用 IRSA 给 Pod 授权,密钥不落配置。
常见问题(FAQ)
Q:报 403 SignatureDoesNotMatch? 密钥错或时钟漂移;MinIO 场景先确认 s3forcepathstyle。
Q:旧索引格式 boltdb-shipper 还能用吗? 能用但官方推荐 tsdb,新部署直接上 v13 schema。