Loki 存储架构
介绍
Grafana Loki是一个水平可扩展、高可用的多租户日志聚合系统,其存储架构专为日志数据优化设计。与传统的全文索引系统不同,Loki通过只索引元数据的方式大幅降低存储开销,同时使用对象存储作为主要存储后端,这使得它成为成本效益极高的云原生日志解决方案。
核心组件
Loki的存储架构由三个关键部分组成:
- 索引存储:存储日志流的元数据(标签集)
- 块存储:存储压缩后的日志内容
- 缓存层:加速查询性能
存储模式详解
1. 单存储模式 (Monolithic)
适合中小规模部署,所有组件共享同一存储后端:
yaml
storage_config:
boltdb_shipper:
active_index_directory: /loki/index
cache_location: /loki/cache
filesystem:
directory: /loki/chunks
2. 微服务模式
生产环境推荐架构,各组件独立扩展:
存储后端支持
Loki支持多种存储后端:
存储类型 | 索引存储示例 | 块存储示例 |
---|---|---|
本地文件系统 | boltdb | filesystem |
云对象存储 | aws-dynamodb | aws-s3 |
键值数据库 | cassandra | gcs |
内存存储 | inmemory (仅测试用) | inmemory |
生产环境建议
对于生产环境,推荐组合使用:
- 索引存储:DynamoDB/Cassandra
- 块存储:S3/GCS
实际配置案例
AWS部署示例
yaml
storage_config:
aws:
s3: s3://access-key:secret-key@region/bucket-name
dynamodb:
dynamodb_url: dynamodb://access-key:secret-key@region
本地开发配置
yaml
storage_config:
boltdb_shipper:
active_index_directory: /tmp/loki/index
cache_location: /tmp/loki/cache
filesystem:
directory: /tmp/loki/chunks
数据生命周期管理
Loki通过compactor
组件管理数据保留:
yaml
compactor:
working_directory: /loki/compactor
shared_store: s3
compaction_interval: 10m
retention_enabled: true
retention_delete_delay: 2h
retention_delete_worker_count: 10
重要配置
确保retention_period
与存储后端策略一致,避免意外删除:
yaml
limits_config:
retention_period: 720h # 30天
性能优化实践
-
批量写入:调整
ingester
配置减少小文件yamlingester:
chunk_idle_period: 1h
chunk_block_size: 262144 -
查询缓存:启用
results_cache
yamlquery_range:
results_cache:
cache:
enable_fifocache: true
fifocache:
max_size_bytes: 500MB
总结
Loki的存储架构设计体现了以下核心思想:
- 元数据与数据分离存储
- 充分利用廉价对象存储
- 通过缓存层弥补对象存储延迟
- 水平扩展能力
延伸学习
-
尝试在不同存储后端之间迁移数据:
bashloki-table-manager --config.file=loki.yaml --target-store gcs --source-store s3
-
监控关键指标:
loki_ingester_chunk_stored_bytes_total
loki_querier_store_chunks_downloaded_bytes
-
官方资源: