技术文章:Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
优采云 发布时间: 2022-11-28 20:15技术文章:Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
️网址:
Grafana实验室简介
Grafana 是事实上的时间序列数据仪表板解决方案。它支持近百种数据源。Grafana Labs 想要从仪表板解决方案转型为可观察性平台,成为您需要调试系统时的第一站。
完全可观察性
可观察性。这意味着什么有很多定义。可观察性就是关于系统的可见性以及它们的行为和行为方式。这种模式的典型特征是可观察性可以分解为三个部分(或支柱):指标、日志和跟踪;每个部分相互补充并帮助您快速查明问题。
这是 Grafana Labs 博客和演示文稿中重复出现的图表:
当今的现实:不同的系统,不同的数据
Slack 提醒我有问题,我在 Grafana 上打开服务的相关仪表板。如果我在某个面板或图表中看到异常,我会在 Prometheus 的 UI 中打开查询以深入挖掘。例如,如果我看到其中一项服务抛出 500 错误,我会尝试查明是特定处理程序/路由抛出错误,还是所有实例都抛出错误,等等。
接下来,一旦我对出了什么问题有了一个模糊的心理模型,我就会查看日志(比如在 splunk 上)。在使用 Loki 之前,我曾经使用 kubectl 获取相关日志以查看错误是什么以及是否可以对此做些什么。这对错误很有用,但有时我会因为高延迟而放弃。之后,我从跟踪(如 AppD)中获得更多关于什么是缓慢的以及哪个方法/操作/功能是缓慢的信息。或者使用 Jaeger 获取跟踪信息。
虽然他们并不总是直接告诉我哪里出了问题,但他们通常允许我足够仔细地查看代码并找出问题所在。然后我可以扩展服务(如果服务过载)或部署修复。
Loki项目背景
Prometheus 工作正常,Jaeger 越来越好,kubectl 也很不错。标签模型足够强大,可以让我找到错误服务的根本原因。如果我发现 ingester 服务做错了什么,我会这样做:kubectl --namespace prod logs -l name=ingester | grep XXX 获取相关日志并通过它们进行 grep。
如果我发现某个特定实例有问题,或者如果我想跟踪某个服务的日志,我必须使用单独的 pod 来跟踪,因为 kubectl 不允许您基于标签选择器进行跟踪。这并不理想,但适用于大多数用例。
只要 pod 没有崩溃或被替换,这就很好。如果 pod 或节点终止,日志将永远丢失。另外,kubectl 只存储最近的日志,所以当我们想要前一天或更早的日志时,我们是盲目的。此外,必须从 Grafana 跳转到 CLI 并返回并不理想。我们需要一种能够减少上下文切换的解决方案,而我们探索的许多解决方案都很昂贵或无法很好地扩展。
这是意料之中的,因为它们所做的不仅仅是 select + grep,而这正是我们所需要的。在查看现有解决方案后,Grafana Labs 决定构建自己的解决方案。
洛基
对任何开源解决方案都不满意,Grafana Labs 开始与人交谈,发现很多人都有同样的问题。事实上,Grafana Labs 已经意识到,即使在今天,许多开发人员仍在他们的机器上进行 SSH 和 grep/tail 日志。他们使用的解决方案要么过于昂贵,要么不够稳定。事实上,人们被要求减少日志记录,Grafana Labs 认为这是一种反模式。Grafana Labs 认为构建可以在 Grafana Labs 和更广泛的开源社区中使用的东西是可能的。Grafana Labs 有一个主要目标:
• 把事情简单化。仅支持 grep!
来自@alicegoldfuss 的这条推文不支持 Loki,只是为了说明 Loki 试图解决的问题
Grafana 实验室还有其他目标:
" />
• 原木应该便宜。不应要求任何人少登录。• 易于操作和扩展 • 指标、日志(以及后来的跟踪)需要协同工作
最后一点非常重要。Grafana Labs 已经从 Prometheus 采集
了指标元数据,因此希望使用此元数据进行日志关联。例如,Prometheus 用命名空间、服务名称、实例 IP 等标记每个指标。当收到警报时,使用元数据找出在何处查找日志。如果我们设法用相同的元数据标记日志,我们就可以在指标和日志之间无缝切换。您可以在此处查看由 Grafana Labs 编写的内部设计文档 [1]。这是 Loki 演示视频的链接:
️Loki演示视频[2]
建筑学
基于 Grafana Labs 构建和运行 Cortex 的经验——作为服务运行的 Prometheus 的水平可扩展分布式版本——出现了以下架构:
洛基建筑
指标和日志之间的元数据匹配对我们来说非常重要,以至于 Grafana Labs 最初决定只针对 Kubernetes。这个想法是在每个节点上运行一个日志采集
代理,用它来采集
日志,与 kubernetes API 对话,找出日志的正确元数据,并将它们发送到可用于显示它们的中央服务采集
到的 Grafana 日志。
该代理支持与 Prometheus 相同的配置(重新标记规则)以确保元数据匹配。我们称此代理为 promtail。
深入了解 Loki——可扩展的日志采集
引擎:
Loki 内部架构
写路径和读路径(query)相互解耦,分别说明:
Loki写路径
经销商
一旦 promtail 采集
并发送日志给 Loki,Distributor 是第一个接收日志的组件。现在,Loki 可能每秒接收数百万次写入,我们不想在它们进入时将它们写入数据库。那会搞砸任何数据库。数据进来时需要进行批处理和压缩。
Grafana Labs 通过构建压缩数据块(chunks)并使用 gzip 压缩日志来实现这一点。ingester 组件是一个有状态的组件,负责构建块然后刷新它们。Loki 有多个摄取器,属于每个流的日志应该总是在同一个摄取器中结束,因为所有相关的条目都在同一个块中。它通过构建一个摄取环并使用一致的哈希来实现这一点。当一个entry进来的时候,Distributor对log的tag进行hash,然后根据hash值查找将entry发送到哪个ingester。
Loki 分发器组件
此外,Loki 将其复制 n 次(默认情况下为 3 次)以实现冗余和弹性。
摄取器
现在 Ingester 将接收条目并开始构建块。
" />
Loki Ingester 构建块
这基本上 gzip 日志并追加。一旦块被“填满”,我们就将其刷新到数据库中。我们对块(ObjectStorage)和索引使用不同的数据库,因为它们存储不同类型的数据。
Loki Ingester构建块,将索引刷入索引库,将块刷入块库
生成块后,Ingester 会创建一个新的空块并向其中添加新条目。
查询器
读取路径非常简单,查询器完成了大部分繁重的工作。给定一个时间范围和标签选择器,它会查看匹配块的索引,搜索它们,并为您提供结果。它还与摄取器对话以获取尚未刷新到存储库的最新数据。
请注意,在 2019 版本中,对于每个查询,Ingester 都会为您搜索所有相关日志。Grafana Labs 使用前端在 Cortex 中实现了查询并行化,同样的方法可以扩展到 Loki 以提供分布式 grep,这将使大型查询足够快。
Loki 查询器组件
可扩展性
1. Loki将块数据放在对象存储中,使其可以扩展。2. Loki将索引放在Cassandra/Bigtable/DynamoDB或者Loki内置的索引db中,同样具有可扩展性。3.分发器和查询器是无状态组件,可以水平扩展。
说到摄取器,它是一个有状态的组件,但 Loki 内置了完整的分片和重新分片生命周期。当部署工作完成时,或者当摄取器按比例放大或缩小时,环形拓扑会发生变化,并且摄取器会重新分配它们的块以匹配新拓扑。这主要是从 Cortex 中获取的代码,它已经在生产环境中运行了 5 年多。
总结
Loki:像 Prometheus,但用于日志。
Loki 是受 Prometheus 启发的水平可扩展、高可用性、多租户日志聚合系统。它的设计非常经济高效且易于操作。它不索引日志的内容,而是为每个日志流提供一组标签。
Grafana系列文章
Grafana系列文章[3]
参考
[1] 这里:#heading=h.c90a30a5yw3i
[2]️洛基演示视频:
[3] Grafana系列文章:
分享:dz一键采集微信文章:如此多网友在探讨,大伙断定不要来参与下?
看到本文内容不要惊讶,因为本文由考拉SEO平台批量编辑,仅用于SEO引流。使用Kaola SEO,轻轻松松一天产出几万篇优质SEO文章!如果您还需要批量编辑SEO文章,可以进入平台用户中心试用!
这几年大家特别关注dz一键采集
微信文章和这个资料,咨询我的人特别多。其实在说这些信息之前,大家应该先研究一下如何在网站优化上编辑原创
信息!对于想吸引流量的SEOer来说,文章内容的好坏绝对不是主要目标。SEOer很在意权重和浏览量。一个优秀的网站内容写在一个低权重的网站上,然后推送到一个老牌平台上,最终的排名和流量是天壤之别!
" />
急于分解dz一键采集
微信文章的客户,毕竟急于关注的就是上面提到的问题。事实证明,写一篇好的搜索文章非常容易,但一篇SEO文案所能产生的流量其实可以忽略不计。我希望通过内容页面布局来达到流量的目的。最重要的一点是量化!如果一篇文章能产生1次访问(每24小时),如果我们能写10000篇文章,一天的访问量可以增加10000。但简单来说,实际写作时,一个人一天只能写30篇左右,很多人只能写70篇。就算用伪原创系统,也会有100多篇!浏览到这里后,
seo认为的人为创造是什么?网站原创不一定是每个词的原创输出!在各个搜索引擎的平台定义中,独创性不等同于不重复的句子。也就是说,只要我们的文章不与其他网站内容重叠,被收录的概率就会大大提高。1 高质量的内容,充满亮点,坚持同一个核心思想,只要没有重复的段落,那么文章还是很有可能被认可,甚至成为引流的好文章。比如这篇文章,你可能会用搜索引擎搜索dz一键采集
微信文章,最后点击查看。负责人会告诉你:我的文章被Koala SEO的智能文章编辑工具快速导入。从!
" />
本站智能原创平台,准确的说是原创文章系统,每天可以完成上千条长尾词优化文案。我们的页面质量通常足够高,索引率可以高达77%。具体的应用步骤,*敏*感*词*介绍和新手引导都放在了用户首页,大家不妨简单的尝试一下吧!非常抱歉,小编一键采集
微信文章没能给大家详细的解释,让大家看这样的空话。但是如果你对考拉SEO工具感兴趣,请打开导航栏,这样你的优化结果每天增加几千个UV,可能吗?