URL: https://grafana.com/blog/2020/09/09/all-the-non-technical-advantages-of-loki-reduce-costs-streamline-operations-build-better-teams/

Description:

我们都知道为什么 Loki 对日志管理有很大帮助。但这里有所有的原因,为什么你公司的会计和运营团队也会喜欢 Loki。

为什么应该使用 Loki?

—— 降低成本,简化运营,建立更好的团队

除了技术方面的理由,以及它的可伸缩性之外,它的组织收益往往会被低估或忽视。

我想谈谈 Loki 所做的事情——或者更好的是,它能让你避免做什么。这些都是我吃了苦头才学会的。当你扩充人员、团队或项目而不是数据集时,这些事情可能是有意义的。

这大致可以分为两个阵营:成本和过程,假设成本是货币的,过程是组织的。

Loki 技术原理简介

首先是对 Loki 工作原理的简要介绍,这应该有助于其他方面的介绍。Loki 是一个具有成本效益的、可扩展的、无偏见的日志聚合器,它主要基于 Prometheus 标签范式,并与 Cortex 内部结构缝合在一起,以实现扩展。.

Loki 摄取了你的日志,并使它们可以被搜索。你知道,那些包含技术债务的无定形表现的文本文件。你的应用程序的脆弱的、试探性的故事情节。衡量标准的简短性永远无法表达的东西。调试日志在阳光和彩虹下看起来毫无用处,但在故障期间却价值连城。

从本质上讲,Loki 做出了两个选择,其他一切都继承了这个选择。

  1. 它只对元数据的一部分进行索引,而不是整个日志行。
  2. 它将其存储层解耦为一对可插拔的后端:一个用于索引,一个用于压缩日志。

为什么 Loki 只索引元数据

所以,Loki 只对元数据进行索引。这到底是如何使它的运行更具成本效益的,又有多少?

对于全文索引来说,索引本身最终会比它们所索引的数据大,这很常见。而索引的运行成本很高,因为它们需要更昂贵的硬件(通常是占用大量内存的实例)。

Loki 根本不对日志的内容进行索引,而只是对其来源的元数据进行索引(标签如app=apienvironment=prodmachine_id=instance-123-abc)。

因此,Loki 不需要维护昂贵的实例集群来提供大型的全文索引,而只需要担心一小部分的数据。根据经验,这比数据要小 4 个数量级(万分之一)。

因此,一开始,Loki 就把运行索引日志聚合器中通常操作成本最高的部分降到最低。

为什么 Loki 使用对象存储作为日志存储

我们刚刚介绍了 Loki 做出的索引决定;现在我们来看看 解耦存储 如何帮助降低成本。毕竟,Loki 也需要存储日志。它通过将它们以压缩块的形式发送到 AWS S3 这样的可插拔对象存储中。

与我们之前谈论的昂贵的内存饥饿实例相比,对象存储是白菜价便宜的,非常具有成本效益。日志一直在那里,直到被访问为止。从本质上讲,微小的标签索引被用来将请求路由到对象存储中的压缩日志,然后在商业硬件上以高度并行的方式解压缩和扫描。

为了帮助我们过渡到更多的面向过程的好处,我想指出的是,当日志记录很便宜时,它消除了减少日志记录的反常动机。不记录那些调试日志是一种反模式(因为它们的存储和检索成本很高)。当存储便宜的时候,我们可以避免这些艰难的决定,并确保我们在对抗故障时有我们需要的资源。

Loki 如何减少你的运营头痛问题

现在我们已经介绍了我们的会计人员喜欢 Loki 的原因,让我们来看看我们的运营团队为什么也喜欢 Loki 的细微原因。

因为 Loki 采取了非索引的日志记录方式,它避免了对结构化日志记录的依赖,以推动对日志数据的运营洞察力。这意味着不需要用预处理工具来协调模式定义,也不需要在多个应用程序或团队中尝试改变这些模式时进行后续的打怪游戏。

构建临时管道工具和向后兼容迁移的问题其实并不适用。然而,在避免预处理时,有必要提及权衡。在查询时,我们必须了解如何与数据进行有意义的互动。

但是,这种区分是多么的好啊!查询时间的技术债务可以用任何方式管理,并在很长一段时间内管理,或者根本不管理(这也是我们在查询时间使用logfmt进行可读性/grepping 的一个主要原因)。

另一方面,摄取时间的预处理需要巨大的前期努力,对变化极其脆弱,并导致组织摩擦。

问题始终是,内部各组之间存在着各种各样的使用案例、格式和专业知识。但是这些记录方法中的一个给了我们围绕这个问题的灵活性,而另一个则没有。

Loki 缺乏正式的模式 (202204 有了),这并不是说它不能用于分析。但它是为开发者和操作者量身定做的,更倾向于实现事件响应而不是历史分析。也就是说,Loki 的下一个版本将带来强大的分析能力,用于临时性的指标。

它也不只是 grep。它的 LogQL 查询语言以 Prometheus 的 PromQL 为模型,能够快速证明假设并在日志和指标之间无缝切换。例如,从日志条目中快速生成错误率,就像这样简单。

如前所述,我最喜欢 Loki 的一些东西是它使我们能够避免做的事情。

还记得我们的小索引和无模式的数据模型吗?Loki 允许我们避免处理冷热索引、生命周期管理,以及当审计问题出现时,为重新激活旧数据而进行的一次性归档数据取回处理。只要把你的旧数据运送到廉价的对象存储中,就不用担心在昂贵的硬件上管理连续的以性能为重点的索引层。

Loki 会自动创建、旋转和过期自己的微小索引,确保它不会增长得太大,并使用户能够透明地查询任何数据,只要你指定保留时间。

Loki 还能无缝地处理其内部存储版本的升级。想利用一些新的改进吗?没问题。Loki 为这些之间的边界保持一个参考,在它们之间透明地分割查询,并将它们缝合在一起。不需要担心卸载和重新加载旧的模式版本的兼容性问题。

Loki 如何改善你的团队

接下来,我想谈一谈 dev 和 ops。将这两者结合起来已经变得越来越流行(而且有充分的理由)。

不过这里有一个区别--不要把理解软件的部署方式/地点与运行可观察性系统混为一谈。让你的应用程序开发人员记录他们想要的东西,而不用担心他们需要使用哪种日志模式来确保不会破坏他们的观察工具的一些预处理管道。

如前所述,我们在 Grafana Labs 更喜欢 logfmt,因为它的简单输出可以实现 grep 友好的查询时间过滤/操作。重点是,某种程度的一致性是好的,但不是必须的。让你的开发者和运维专注于他们所需要的本质,而不用担心你的可观察性系统的范式。

Loki 缺乏用户定义的模式,而且它的非索引性质消除了开发人员和运维人员的认知负担,使他们能够重新关注他们工作的本质,然后在需要时转向查询 Loki。

让你的运营团队了解运行和扩展 Loki,包括配置 promtail(或你使用的任何代理)的辅助需求。我建议使用标签来给你的日志附加环境标识符,比如application=apienv=prodcluster=us-central等。然后,用户可以混合和匹配标签过滤器,以快速细化问题发生的地方,并利用 Loki 的读取路径的大规模并行性质,以低成本在潜在的巨大数据集上进行任意的查询。

而且不用担心-- Loki 是开源的。它确保了解 Loki 的入门门槛相对较低。不需要觉得只从其他大型组织中招聘,也不需要担心新来的工程师没有使用你所选择的工具的经验。

Loki 可以在单机上以单二进制模式运行(像 Prometheus),然后在你的用例因规模、冗余或可用性问题而增长时横向扩展。我们有大量的用户在从树莓派到大规模、水平扩展的集群中运行 Loki。

Loki 并不是什么都能做,但我们认为它对其使用情况做了很好的权衡:一个快速、经济、高度可扩展的日志聚合器,与 Prometheus 标签模型有很好的集成,可以毫不费力地在指标和日志之间切换。

Grafana 系列文章

Grafana 系列文章

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

Grafana 系列文章(十):为什么应该使用 Loki的更多相关文章

  1. NHibernate系列文章十五:NHibernate组件

    摘要 前面文章介绍了NHibernate对简单.net数据类型的映射对照表.NHibernate也可以映射复杂数据类型,这里介绍通过组件映射NHibernate值对象. 1. NHibernate引用 ...

  2. NHibernate系列文章十六:使用程序集管理NHibernate项目(附程序下载)

    摘要 在实际的项目中,经常是将NHibernate的实体关系映射类做成独立的工程(assembly dll),只对外提供Session调用的接口.这个程序集作为数据访问层,可以被上面的多个工程(ASP ...

  3. NHibernate系列文章十八:NHibernate关系之一对多(附程序下载)

    摘要 这篇文章介绍NHibernate最实用的内容:关系映射. NHibernate的关系映射方式有三种: Set:无序对象集合,集合中每一个元素不能重复. List:有序对象集合,集合中的元素可以重 ...

  4. NHibernate系列文章十二:Load/Get方法

    摘要 NHibernate提供两个方法按主键值查找对象:Load/Get. 1. Load/Get方法的区别 Load: Load方法可以对查询进行优化. Load方法实际得到一proxy对象,并不立 ...

  5. NHibernate系列文章十四:NHibernate事务

    摘要 NHibernate实现事务机制非常简单,调用ISession.BeginTransaction()开启一个事务对象ITransaction,使用ITransaction.Commit()提交事 ...

  6. NHibernate系列文章十:NHibernate对象二级缓存下

    摘要 上一节对NHibernate二级缓存做了简单介绍,NHibernate二级缓存是由SessionFactory管理的,所有Session共享.这一节介绍二级缓存其他两个方面:二级缓存查询和二级缓 ...

  7. NHibernate系列文章十九:NHibernate关系之多对多关系(附程序下载)

    摘要 NHibernate的多对多关系映射由many-to-many定义. 从这里下载本文的代码NHibernate Demo 1.修改数据库 添加Product表 添加ProductOrder表 数 ...

  8. 《神经网络和深度学习》系列文章十二:Hadamard积,s⊙t

    出处: Michael Nielsen的<Neural Network and Deep Learning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR本科生 王宇轩 ...

  9. Web 开发人员和设计师必读文章推荐【系列三十】

    <Web 前端开发精华文章推荐>2014年第9期(总第30期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  10. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

随机推荐

  1. onps栈移植说明(1)——onps栈的配置及裁剪

    onps栈的移植涉及几个部分:1)系统配置及裁剪:2)基础数据类型定义:3)RTOS适配层实现:4)编写网卡驱动并注册网卡.本文作为onps栈移植的指导性文件将给出一般性的移植说明及建议,具体的移植样 ...

  2. Substring 在BCL和CLR里面搞了啥

    楔子 还是做点事情,不要那么散漫. 本文以简单的Substring(int startindex,int Length)函数为例,来递进下它在托管和非托管的一些行为. 以下均为个人理解,如有疏漏请指正 ...

  3. 【深入浅出 Yarn 架构与实现】2-2 Yarn 基础库 - 底层通信库 RPC

    RPC(Remote Procedure Call) 是 Hadoop 服务通信的关键库,支撑上层分布式环境下复杂的进程间(Inter-Process Communication, IPC)通信逻辑, ...

  4. 【翻译】Thymeleaf – Spring Security集成模块

    原文链接:Thymeleaf - Spring Security integration modules 来源:thymeleaf/thymeleaf-extras-springsecurity自述文 ...

  5. SCI简介和写作顺序

    一.SCI论文组成部分简介 一篇完整的 sci 论文主要包括以下几个主要的组成部分,从前往后依次分别是 Title 就是说这个文章的标题其次是 Abstract 也就是这个文章的摘要.接下来是 Int ...

  6. nydusd 源码理解(一)

    " 尝试通过 nydus[1] 源码理解工作流程.可能由于代码变动导致和本文记录的内容有出入. 1. 环境准备 git clone https://github.com/dragonflyo ...

  7. 两行CSS让页面提升了近7倍渲染性能!

    前言 对于前端人员来讲,最令人头疼的应该就是页面性能了,当用户在访问一个页面时,总是希望它能够快速呈现在眼前并且是可交互状态.如果页面加载过慢,你的用户很可能会因此离你而去.所以页面性能对于前端开发者 ...

  8. c3 linearization详解

    MRO MRO 全称方法解析顺序(Method Resolution Order),在多重继承和多继承存在的时候,寻找属性及方法的顺序. 深度优先(DFS)与广度优先(BFS) python2 所用的 ...

  9. Springboot自动装配源码及启动原理理解

    Springboot自动装配源码及启动原理理解 springboot版本:2.2.2 传统的Spring框架实现一个Web服务,需要导入各种依赖JAR包,然后编写对应的XML配置文件 等,相较而言,S ...

  10. MasaFramework -- 领域驱动设计

    概念 什么是领域驱动设计 领域驱动的主要思想是, 利用确定的业务模型来指导业务与应用的设计和实现.主张开发人员与业务人员持续地沟通和模型的持续迭代,从而保证业务模型与代码的一致性,实现有效管理业务的复 ...