Loki 是什么

Loki 是 Grafana Lab开发的一套日志系统,使用Go语言实现。根据官方的介绍, Loki,高可用性,多租户的日志聚合系统,受到Prometheus的启发。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。如果用一句话介绍的话,就是 Like Prometheus, but for logs

Loki 能做什么

  • 日志采集。loki-stack中提供promtail,专为loki定制的日志采集组件
  • 日志压缩存储
  • 使用和prometheus相同的标签。根据日志元数据和标签对日志进行分组和索引。
  • 使用Grafana展示Loki中的日志,也可以使用API和CLI来查询日志。

Loki 和 ELK 对比

  • 轻量。 loki 使用go实现,并且除存储(也是可选的)外不依赖其他的中间件
  • 存储成本低。 由于loki只对元数据和标签进行索引,对日志文本进行压缩存储,存储成本是远低于ES
  • 检索能力低于ES。 loki 不会对文本日志进行分词和倒排索引,所以只能使用标签去匹配查询日志块,然后可以对搜索的日志块在内存进行grep
  • 日志分析能力。loki 可以提供兼容promethues的范围向量查询,如对查询的日志进行计数,kibana 则可以对任意文本进行查询分析。

Loki 架构



Loki 三个核心的组件

  • Distributor 是日志接收器,负责接收promtail的日志并转发到Ingester,在Distributor还会对日志进行校验,并且使用一致性Hash来保证chuck在Ingester上面的一致性。
  • Ingester接受日志流并构建数据块,其操作通常是压缩和追加日志。每个Ingester 的生命周期有PENDINGJOININGACTIVELEAVING 和 UNHEALTHY 五种状态。处于JOININGACTIVE状态的Ingester可以接受写请求,处于ACTIVELEAVING状态时可以接受读请求。Ingester 将收到的日志流在内存中打包成 chunks ,并定期同步到存储后端。由于存储的数据类型不同,Loki 的数据块和索引可以使用不同的存储。
  • Querier 用来查询日志,可以直接从 Ingester 和后端存储中查询数据。当客户端给定时间区间和标签选择器之后,Querier 就会查找索引来确定所有匹配 chunk ,然后对选中的日志进行 grep并返回查询结果。查询时,Querier先访问所有Ingester用于获取其内存数据,只有当内存中没有符合条件的数据时,才会向存储后端发起同样的查询请求。对于每个查询,单个 Querier 会 grep 所有相关的日志。目前 Cortex 中已经实现了并行查询,该功能可以扩展到 Loki,通过分布式的 grep 加速查询。此外,由于副本因子的存在,Querier可能会接收到重复的数据,所以其内置了去重的功能,对拥有同样时间戳、标签组和消息内容的日志进行去重处理。

Loki的索引存储可以是cassandra/bigtable/dynamodb,而chuncks可以是各种对象存储,Querier和Distributor都是无状态的组件。对于Ingester他虽然是有状态的但是,当新的节点加入或者减少,整节点间的chunk会重新分配,已适应新的散列环。

在生产环境中,Distributor、Ingester、Querier需要部署为不同的进程,同时Loki也提供了单进程模式来让用户可以快速尝试。

Loki 是否适合我们的场景

  1. 个人认为Loki是一个Pod日志索引而不是日志分析系统,更多的场景应该是面向kubernetes的运维团队,而不是业务团队。
  2. Loki 和 我们当前提供容器日志场景比较相似,但我们今天没有提供把日志分块压缩到OSS等廉价存储的能力,对于日志备份来说是我们缺失的。同时我们也没有提供分布式查询和grep日志流的能力。
  3. 当前Loki架构中没有MQ等日志缓冲组件(loki使用的是hash环和多副本来保证日志一致性),对于大规模生产使用还需要进行更多的测试。

Loki 功能截图

Loki 日志检索

Loki 日志Grep

参考:

https://blog.csdn.net/linkthaha/article/details/100575651

https://github.com/grafana/loki

https://grafana.com/docs/loki/latest/

写在最后

我的个人公众号”竹韵悠扬“开通也有一段时间了,因为自己的”懒惰“一直没有写过文章,今年开始决定把我在技术道路中的一些感悟和好玩的技术分享给大家,如果你对上面的文字感兴趣,那就订阅一下吧 ~

Loki 初体验的更多相关文章

  1. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  2. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  3. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  4. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  5. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  6. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  7. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  8. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

  9. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验

    Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...

随机推荐

  1. IPv6 Rapid Deployment, IPv6 6rd初探

    IPv6 Rapid Deployment: Provide IPv6 Access to Customers over an IPv4-Only Network 原文地址:https://www.c ...

  2. 区块链V1版本实现之四

    部分程序代码(添加区块): //添加区块 func (bc *BlockChain) AddBlock(data string) { //创建一个区块 //bc.Block的最后一个区块的Hash值就 ...

  3. 20201101_Python的虚拟环境问题

    虚拟环境使用总结: 1. 安装创建虚拟环境要使用的工具virtualenv  pip install virtualenv -i https://pypi.douban.com/simple/ #使用 ...

  4. Flink实战(102):配置(一)管理配置

    来源:http://www.54tianzhisheng.cn/2019/03/28/flink-additional-data/ 前言 如果你了解 Apache Flink 的话,那么你应该熟悉该如 ...

  5. Django搭建示例项目实战与避坑细节

    Django 开发项目是很快的,有多快?看完本篇文章,你就知道了. 安装 Django 前提条件:已安装 Python. Django 使用 pip 命令直接就可以安装: pip install dj ...

  6. Splay树求第k大模板

    今天上午借着休息日得机会手撸了一下模板,终于对着模板调出来了.prev和next占用了std namespace里面的东西,然后报警我上次给关了所以.....就花了3个小时吧. inline加不加无所 ...

  7. moviepy用VideoFileClip加载视频时报UnicodeDecodeError: utf-8 codec cant decode byte invalid start byte错误

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 使用moviepy用: clip1 = Video ...

  8. Pentaho Report Designer 入门教程(一)

    PentahoReport Designer 入门教程 采用Pentaho Report Designer5.1版本,也是最新的版本. 一.       安装和介绍 介绍部分内容略,首先安装jdk,并 ...

  9. Azure Cosmos DB (五) .Net Core 控制台应用

    一,引言 之前在讲Azure CosmosDB Core(SQL)核心的时候,使用了EF Core 的方式,引用了 "Microsoft.EntityFrameworkCore.Cosmos ...

  10. 课堂练习之疫情APP

    title: 课堂练习之疫情查询APP date: 2020-03-17 20:08:51 tags: 在之前的体温记录APP上改进,只写出疫情信息查询页面的代码. 实体类与上篇博客SSM整合中的Ci ...