数据库|日志系统新贵Loki,确实比笨重的ELK轻( 二 )
本文插图
读写 日志数据的写主要依托的是Distributor和Ingester两个组件,整体的流程如下:
本文插图
Distributor 一旦promtail收集日志并将其发送给loki , Distributor就是第一个接收日志的组件 。 由于日志的写入量可能很大 , 所以不能在它们传入时将它们写入数据库 。 这会毁掉数据库 。 我们需要批处理和压缩数据 。
Loki通过构建压缩数据块来实现这一点 , 方法是在日志进入时对其进行gzip操作 , 组件ingester是一个有状态的组件 , 负责构建和刷新chunck , 当chunk达到一定的数量或者时间后 , 刷新到存储中去 。 每个流的日志对应一个ingester,当日志到达Distributor后 , 根据元数据和hash算法计算出应该到哪个ingester上面 。
本文插图
此外 , 为了冗余和弹性 , 我们将其复制n(默认情况下为3)次 。
Ingester ingester接收到日志并开始构建chunk:
本文插图
基本上就是将日志进行压缩并附加到chunk上面 。 一旦chunk“填满”(数据达到一定数量或者过了一定期限) , ingester将其刷新到数据库 。 我们对块和索引使用单独的数据库 , 因为它们存储的数据类型不同 。
本文插图
刷新一个chunk之后 , ingester然后创建一个新的空chunk并将新条目添加到该chunk中 。
Querier 读取就非常简单了 , 由Querier负责给定一个时间范围和标签选择器 , Querier查看索引以确定哪些块匹配 , 并通过greps将结果显示出来 。 它还从Ingester获取尚未刷新的最新数据 。
对于每个查询 , 一个查询器将为您显示所有相关日志 。 实现了查询并行化 , 提供分布式grep , 使即使是大型查询也是足够的 。
本文插图
可扩展性 Loki的索引存储可以是cassandra/bigtable/dynamodb , 而chuncks可以是各种对象存储 , Querier和Distributor都是无状态的组件 。 对于ingester他虽然是有状态的但是 , 当新的节点加入或者减少 , 整节点间的chunk会重新分配 , 已适应新的散列环 。 而Loki底层存储的实现Cortex已经 在实际的生产中投入使用多年了 。 有了这句话 , 我可以放心的在环境中实验一把了 。
本文插图
- 基于 Apache Flink 的实时监控告警系统
- 关于数据中台的深度思考与总结(干干货)
- 日志收集Agent , 阴暗潮湿的地底世界
- 2020 继续踏踏实实的做好自己
本文插图
本文插图
你点的每个赞 , 我都当成了喜欢
推荐阅读
- 技术编程|如何利用数据库进行世界史研究
- 人工智能|敏捷开发框架的开发运用之智能办公管理系统的开发
- 产品|全国唯一户外15米远距离AI测温系统深兰猫头鹰获工信部嘉奖
- Android系统|超值的“超大杯”HiFi播放器,索尼NW-A105HN评测
- Android系统|国人笑而不语!Android 11新要求 相机默认不能设置为“美颜”模式
- IOS系统|苹果免签封装如何实现?苹果免签封装会不会掉签?
- 摄影|传音主导首个移动终端计算摄影系统国际标准获ITU-T正式立项
- Android系统|想玩转MIUI12全局小窗,你要先清楚它的各种打开方式
- windows系统|半年过去了:Win10 5月更新磁盘碎片整理工具问题依然存在
- Android系统,鲁大师|最新UI排名出炉:小米MIUI第九,魅族消失,黑马出现!
