本地运行Loki 2.8.2遇InvalidAccessKeyId错误求助
问题:Loki 2.8.2本地运行时触发InvalidAccessKeyId错误
运行Loki时出现以下错误:
"failed to delete corrupted cluster seed file, deleting it" err="InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.\n\tstatus code: 403, request id: XXXXX, host id: XXXXXYYYZZZ"
环境信息
- loki - 2.8.2
- macOS Ventura 13.5
- aws-cli/2.13.11 Python/3.11.4
- 已通过aws cli正确配置AWS凭证
启动命令
loki -config.file=loki-local-config.yaml -config.expand-env=true
配置文件loki-local-config.yaml
auth_enabled: false server: http_listen_port: 3100 grpc_listen_port: 9096 ingester: wal: enabled: true dir: /tmp/loki/wal lifecycler: address: 127.0.0.1 ring: kvstore: store: inmemory replication_factor: 1 final_sleep: 0s chunk_idle_period: 1h max_chunk_age: 1h chunk_target_size: 1048576 chunk_retain_period: 30s max_transfer_retries: 0 query_range: results_cache: cache: embedded_cache: enabled: true max_size_mb: 100 schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: s3 schema: v11 index: prefix: index_ period: 24h storage_config: boltdb_shipper: active_index_directory: /tmp/loki/index cache_location: /tmp/loki/index_cache cache_ttl: 24h resync_interval: 5s shared_store: s3 aws: endpoint: s3.us-west-1.amazonaws.com bucketnames: loki-poc-devops-ops-efficiency region: us-west-1 access_key_id: aws_access_key_id secret_access_key: aws_secret_access_key insecure: false sse_encryption: false http_config: idle_conn_timeout: 90s response_header_timeout: 0s insecure_skip_verify: false s3forcepathstyle: true compactor: working_directory: /tmp/loki/compactor shared_store: s3 compaction_interval: 5m shared_store_key_prefix: index/ limits_config: reject_old_samples: true reject_old_samples_max_age: 168h retention_period: 744h table_manager: retention_deletes_enabled: true retention_period: 24h
原因分析与解决办法
核心原因
配置文件中AWS凭证的写法错误,结合-config.expand-env=true的启动参数,Loki无法正确读取有效AWS密钥:
- 配置里的
access_key_id: aws_access_key_id和secret_access_key: aws_secret_access_key是字面字符串,而非环境变量占位符,导致Loki直接将这两个无效字符串作为密钥发送给AWS,自然匹配不到有效记录。 - 即使AWS CLI已配置凭证,Loki的配置优先级高于默认凭证链,会优先使用配置中硬写的无效值。
解决步骤
1. 修正配置文件的凭证占位符
将storage_config.aws下的凭证配置改为环境变量占位符,让Loki通过-config.expand-env=true读取系统环境变量:
storage_config: aws: # 其他配置保持不变 access_key_id: ${AWS_ACCESS_KEY_ID} secret_access_key: ${AWS_SECRET_ACCESS_KEY}
2. 设置环境变量(或使用AWS默认凭证链)
- 临时设置:在启动Loki的终端窗口中执行以下命令:
export AWS_ACCESS_KEY_ID="你的有效Access Key" export AWS_SECRET_ACCESS_KEY="你的有效Secret Key" - 长期生效:将上述命令添加到
~/.zshrc或~/.bashrc中,终端重启后自动加载。 - 替代方案:如果不想设置环境变量,可直接删除配置文件中的
access_key_id和secret_access_key字段,Loki会自动读取AWS CLI配置的~/.aws/credentials文件中的默认凭证。
3. 验证凭证有效性
执行AWS CLI命令测试是否能访问目标S3 bucket,确认密钥有效且具备权限:
aws s3 ls s3://loki-poc-devops-ops-efficiency --region us-west-1
如果命令能正常返回bucket内容,说明凭证权限没问题;若仍报错,需检查密钥是否正确、bucket名称是否拼写错误,或IAM用户是否具备S3的读写权限。
4. 重启Loki
修改配置或设置环境变量后,重新启动Loki服务,观察错误是否消失。
内容的提问来源于stack exchange,提问作者Sagar Nikam
相关产品推荐
相关产品推荐

