在项目启动初期,考虑到 ELK 的资源消耗较重,我们选用了更为轻量的 Loki 作为分布式日志存储方案。默认设置下,Loki 并未启用日志过期策略,这意味着数据会持续累积而不会被删除。若采用本地存储方式,磁盘空间将极易被占满。Loki 支持使用 filesystem 本地文件系统进行存储,也可对接第三方对象存储服务,如亚马逊 S3、谷歌 GCS 以及阿里云 OSS 等。本文将仅针对使用 filesystem 存储时的过期策略配置。
Loki Memberlist - Ring 采用类似 Gossip 协议的去中心化集群状态管理机制,用以替代 Consul 或 etcd 这类传统的 KV 存储,实现服务发现与组件状态同步。这一特性很适合中小型企业在日志存储方面的需求 。
loki配置说明(基于v2.9.1):
auth_enabled: false
server:
http_listen_port: 3100
# 用于组件间通信
grpc_listen_port: 9096
common:
# 是当前节点的IP地址,确保集群通信正确 ,这里如果设置成127.0.0.1可能会有问题
instance_addr: 172.31.0.10
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
kvstore:
# 基于 gossip 协议的kv存储
store: memberlist
memberlist:
join_members:
- 172.31.0.10:7946
- 172.31.0.11:7946
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: filesystem
schema: v11
index:
prefix: index_
period: 24h
#table_manager:
# retention_deletes_enabled: true
# retention_period: 48h
limits_config:
# 数据保留周期
retention_period: 6480h
compactor:
working_directory: /tmp/loki/retention
compaction_interval: 30m
retention_enabled: true
retention_delete_delay: 1h
retention_delete_worker_count: 150
ruler:
alertmanager_url: http://localhost:9093
一开始开启了table_manager,发现没有生效,后面开启compactor才生效,具体原因没有深究。
最后,访问 http://172.31.0.10:3100/ring 可以看到返回的两个节点示例。现在配置任意一个节点,另外一个节点都可以访问到数据。