You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Loki无法存储数据至AWS S3,求配置排查

Loki无法存储数据到AWS S3的排查建议

问题背景

Docker部署的Loki服务运行正常,但日志数据仅存储在本地文件系统,指定的AWS S3存储桶始终为空。已配置带编程访问权限的IAM用户,且验证该用户可正常向存储桶上传文件,相关配置如下:

IAM策略配置

{"Version": "2012-10-17","Statement": [{"Sid": "LokiStorage","Effect": "Allow","Action": ["s3:ListBucket","s3:PutObject","s3:GetObject","s3:DeleteObject"],"Resource": ["arn:aws:s3:::__myBucket__","arn:aws:s3:::__myBucket__/*"]}]}

Docker Compose配置

version: "3.8"
volumes:
    loki_data: {}
services:    
  loki:
    image: grafana/loki:2.1.0
    networks:
      - my-overlay
    ports:
      - 3100:3100
    volumes:
      - ./loki/loki-config.yml:/etc/loki/local-config.yml
      - loki_data:/loki
    command: -config.file=/etc/loki/local-config.yaml

Loki配置文件(loki-config.yaml)

---
auth_enabled: false
ingester:
  chunk_idle_period: 3m
  chunk_block_size: 262144
  chunk_retain_period: 1m
  max_transfer_retries: 0
  lifecycler:
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h
compactor:
  working_directory: /loki/boltdb-shipper-compactor
  shared_store: aws
schema_config:
  configs:
    - from: 2020-07-01
      store: boltdb-shipper
      object_store: aws
      schema: v11
      index:
        prefix: loki_index_
        period: 24h
server:
  http_listen_port: 3100
storage_config:
  aws:
    s3: s3://__myAccessKey__:__mySecretAccessKey__@eu-west-1/__myBucket__
  boltdb_shipper:
    active_index_directory: /loki/index
    shared_store: s3
    cache_location: /loki/boltdb-cache
  chunk_store_config:
    max_look_back_period: 0s
  table_manager:
    retention_deletes_enabled: false
    retention_period: 0s

排查建议

1. 修复配置文件路径的拼写错误

Docker Compose中挂载的配置文件是/etc/loki/local-config.yml(.yml后缀),但启动命令指定的是-config.file=/etc/loki/local-config.yaml(.yaml后缀),两者后缀不一致会导致Loki无法加载自定义配置,转而使用默认配置将数据存储在本地。请统一后缀,比如修改启动命令为:

command: -config.file=/etc/loki/local-config.yml

2. 优化S3配置格式,避免编码问题

当前S3配置将密钥直接放在URL中,如果密钥包含特殊字符(如/、+、=)会导致解析失败。建议拆分配置项:

storage_config:
  aws:
    access_key_id: "__myAccessKey__"
    secret_access_key: "__mySecretAccessKey__"
    region: eu-west-1
    bucket: "__myBucket__"

这种方式无需URL编码,配置更清晰。

3. 查看Loki容器日志定位错误

执行以下命令查看容器日志,重点查找与S3相关的错误信息(如权限校验失败、连接超时、存储桶不存在等):

docker logs <your-loki-container-name>

4. 统一配置中的存储标识

配置中compactor.shared_store为aws,但boltdb_shipper.shared_store为s3,建议统一为aws保持一致性:

boltdb_shipper:
  active_index_directory: /loki/index
  shared_store: aws
  cache_location: /loki/boltdb-cache

5. 验证容器内的S3连通性

进入Loki容器,手动测试S3上传,排查网络或凭证问题:

# 进入容器
docker exec -it <your-loki-container-name> sh
# 安装AWS CLI(Alpine镜像用apk,Debian/Ubuntu用apt)
apk add aws-cli
# 配置临时凭证
export AWS_ACCESS_KEY_ID=__myAccessKey__
export AWS_SECRET_ACCESS_KEY=__mySecretAccessKey__
export AWS_DEFAULT_REGION=eu-west-1
# 测试上传
echo "test" > test.txt
aws s3 cp test.txt s3://__myBucket__/test.txt

如果测试失败,说明容器内网络或凭证存在问题;如果成功,则问题出在Loki的配置逻辑上。

6. 检查Loki版本兼容性

当前使用的Loki 2.1.0版本较旧,boltdb-shipper对S3的支持存在一些已知问题,建议升级到2.4.x及以上的稳定版本,再测试存储功能。

7. 确认S3存储桶区域匹配

验证S3存储桶的实际区域是否为eu-west-1,区域不匹配会导致连接失败,可在AWS控制台查看存储桶的区域信息。


内容的提问来源于stack exchange,提问作者ilricca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:30:54