Distributor
1、
promtail收集日志并将其发送给loki
Distributor就是第一个接收日志的组件
Loki通过构建压缩数据块来实现批处理和压缩数据
2、
组件ingester是一个有状态的组件
负责构建和刷新chunck
当chunk达到一定的数量或者时间后
刷新到存储中去
3、
每个流的日志对应一个ingester
当日志到达Distributor后
根据元数据和hash算法计算出应该到哪个ingester上面
4、为了冗余和弹性,我们将其复制n(默认情况下为3)次
Ingester
ingester接收到日志并开始构建chunk
将日志进行压缩并附加到chunk上面
一旦chunk“填满”(数据达到一定数量或者过了一定期限)
ingester将其刷新到数据库
我们对块和索引使用单独的数据库
因为它们存储的数据类型不同
刷新一个chunk之后
ingester然后创建一个新的空chunk并将新条目添加到该chunk中
Querier
1、 由Querier负责给定一个时间范围和标签选择器
Querier查看索引以确定哪些块匹配
并通过greps将结果显示出来
它还从Ingester获取尚未刷新的最新数据
2、
对于每个查询
一个查询器将为您显示所有相关日志
实现了查询并行化
提供分布式grep
即使是大型查询也是足够的
拓展性
- Loki的索引存储可以是cassandra/bigtable/dynamodb
- chuncks可以是各种对象存储
- Querier和Distributor都是无状态的组件
- 对于ingester他虽然是有状态的 但当新的节点加入或者减少整节点间的chunk会重新
- 分配,以适应新的散列环
环境搭建(使用docker编排来实现)
安装loki、promtail、grafana
- 编写docker编排配置文件
vim docker-compose.yaml version: "3" networks: loki: services: loki: image: grafana/loki:1.5.0 ports: - "3100:3100" command: -config.file=/etc/loki/local-config.yaml networks: - loki promtail: image: grafana/promtail:1.5.0 volumes: - /var/log:/var/log command: -config.file=/etc/promtail/docker-config.yaml networks: - loki grafana: image: grafana/grafana:latest ports: - "3000:3000" networks: - loki
- 启动安装
docker-compose up -d