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