Loki 初体验
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 的生命周期有
PENDING
,JOINING
,ACTIVE
,LEAVING
和UNHEALTHY
五种状态。处于JOINING
和ACTIVE
状态的Ingester可以接受写请求,处于ACTIVE
和LEAVING
状态时可以接受读请求。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 是否适合我们的场景
- 个人认为Loki是一个Pod日志索引而不是日志分析系统,更多的场景应该是面向kubernetes的运维团队,而不是业务团队。
- Loki 和 我们当前提供容器日志场景比较相似,但我们今天没有提供把日志分块压缩到OSS等廉价存储的能力,对于日志备份来说是我们缺失的。同时我们也没有提供分布式查询和grep日志流的能力。
- 当前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 初体验的更多相关文章
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- 百度EChart3初体验
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
随机推荐
- Java基础教程——继承
继承 一个类 可以 继承自 另一个类: 派生的类(子类)继承父类的方法和数据成员: 关键字:子类 extends 父类. public class 继承 { public static void ma ...
- python语法元素的名称
变量 什么是变量? """ 变量是保存和表示数据值的一种语法元素,在程序中十分常见.顾名思义,变量的值是可以改变的,能够通过赋值(使用等号"=")方式 ...
- 树莓派RTL8723BU_LINUX驱动安装
1.安装前准备:sudo apt-get -y update;sudo apt-get -y upgrade;sudo apt-get -y dist-upgrade;sudo apt-get ins ...
- python核心高级学习总结4-------python实现进程通信
Queue的使用 Queue在数据结构中也接触过,在操作系统里面叫消息队列. 使用示例 # coding=utf-8 from multiprocessing import Queue q = Que ...
- PyQt(Python+Qt)学习随笔:窗口部件大小策略sizePolicy与SizeConstraint布局大小约束的关系
在<PyQt(Python+Qt)学习随笔:Qt Designer中部件的三个属性sizeHint缺省尺寸.minimumSizeHint建议最小尺寸和minimumSize最小尺寸>. ...
- NET CORE通过NodeService调用js
在 .NET Framework 时,我们可以通过V8.NET等组件来运行 JavaScript,不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core ,我们如何在 .NET C ...
- Go语言的context包从放弃到入门
目录 一.Context包到底是干嘛用的 二.主协程退出通知子协程示例演示 主协程通知子协程退出 主协程通知有子协程,子协程又有多个子协程 三.Context包的核心接口和方法 context接口 e ...
- Day2 Scrum 冲刺博客
线上会议: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 纪昂学 总结会议内容,思考自己所分配到的任务 创建一个Cell类,用 ...
- 百度前端技术学院-基础-day25-27
倒数开始 滴答滴 滴答滴 task1 题目: 我们现在来做一个最简单的时钟,通过小练习来学习 Date,复习定时,然后再练习一下函数的封装具体需求如下: 在页面中显示当前日期及时间,按秒更新 格式为 ...
- URLEncoder使用踩坑
URLEncoder使用 背景介绍 今天需要传一些描述信息给前端,需要写在header里面,所以要先编码成utf-8的格式,再有前端解码获取. 工作过程 前提:我要传给前端的文字是我从中台那边拿到的. ...