Loki: 一个更好的k8s日志管理解决方案

本文主要介绍如何使用类似kubectl logs -tail这类专业的工具实时查看应用日志,从而方便地了解开发过程中系统的运行情况,以及在为实际生产环境的k8s选择解决方案时需要考虑哪些问题。



无论你使用基于kubernetes的系统有多长时间,在你定位问题的工具包中一定存在:日志消息。
在开发过程中,使用kubectl logs -tail命令等工具实时查看日志输出,可以方便地了解系统中正在发生的事情。

然而,当你将容器部署到生产环境中时,维护这种级别的可观察性可能会成为一个负担,因为你试图管理和分析来自多个pod中执行的多个容器化应用程序的大量消息。在现代云原生环境中。必须收集、理解和研究不同来源的数百万条日志,才能理解应用程序运行时发生的事情。

传统日志解决方案根本无法跟上现代产品环境中复杂的分布式基础设施特点,因此找到一个简单而高效的解决方案来帮助你管理这种复杂性,是你进行k8s日志管理工作的关键。

走进Loki

你肯定听说过Grafana,这家公司凭借开源软件而闻名,其开源的软件可以轻松地可视化来自许多不同来源的数据。在k8s世界中,Grafana最著名的可能是监控指标可视化组件Prometheus。
但事情正在发生变化,最近,Grafana已经发展成为一个成熟的可观测性软件供应商,开发了新的项目,如Loki、Mimir和Tempo,解决了日志、链路追踪和指标等重要的可观测性需求。

Loki项目结合云原生架构,专注于管理分布式、高容量、高速增长的日志数据,其灵感来自Prometheus(事实上,Loki宣传自己“像Prometheus,但只针对日志”)。具备很多优势,非常适合现代环境的日志管理。

它易于设置和操作,只索引元数据,而不是完整的日志消息,使其轻量化,它与其他云原生工具(如Kubernetes)一起工作得很好,使用常见的对象存储解决方案,如Amazon S3。

Loki既可以使用自管理的开源版本,也可以用由Grafana云提供的托管服务,它是构成所谓的“PLG”技术栈的基础:Promtail用于日志流采集,Loki用于聚合、存储和查询日志,Grafana用于日志可视化。

再见ELK,你好PLG

看下PLG技术栈,很容易看出来它的确受到Prometheus设计的影响。



Promtail是一个代理(作为Loki产品的一部分提供),负责发现和检索日志数据流。它的功能类似于Prometheus的“scraper”,其配置文件在语法上与Prometheus使用的配置文件相同。本质上是“跟踪”Kubernetes主节点和pod日志文件,并将它们转发到Loki的核心系统。(值得注意的是,Loki支持由Grafana及其社区开发者提供的许多不同的代理,使用fluentd或logstash等的用户更容易迁移到基于PLG的解决方案。)
Loki当然是PLG方案的核心,是专门为处理日志数据而设计的。Loki的特性(我们将在后面更详细地讨论)使它在获取和查询日志数据时既高效又经济。

Grafana仪表板和可视化工具完善了“PLG”套件,提供了强大的功能来分析应用程序、pod和集群日志。

Loki工作原理

架构和部署方式

从架构上看,洛基由五个不同的组件组成:

  • distributor:是负责获取日志数据并将其转发给ingester的无状态组件。Distributor对数据进行预处理,检查其有效性,并确保其来自已配置的租户,这有助于系统扩展并保护其免受潜在的Dos攻击。这里Grafana很好地解释了Promtail(推荐的分发代理)如何处理数据。
  • ingester:是Loki架构的关键组件。从distributors接收到的数据由ingester写入云云原生存储服务。ingesters还与查询协作,返回内存中的数据以响应读请求。
  • Queriers:负责解析LogQL查询请求,并从ingesters或持久化存储中获取数据。
  • query fronted:可选组件-提供API接口,可用于加速读处理。该组件通过将读请求排队、将大请求拆分为多个小请求以及缓存数据来优化读处理。
    类似Prometheus,Loki支持告警和记录功能。这些特性是在ruler组件中实现的,该组件持续地计算一组查询,并根据结果执行已定义的操作,例如发送告警或预计算指标。

    对于可伸缩性,所有这些组件都可以按需跨系统分布。
    Loki可以选择两种本地部署方式:
  • 单体模式:在一个进程或Docker容器中运行Loki的所有二进制文件。这是了解产品更多信息的一个很好的开始。
  • 微服务部署模式:它允许Loki组件分布在多个系统中,并提供了高可伸缩性。
    另外一种本地部署模式,称为“简单可伸缩”模式,当你的需求超过单体模式的能力,但不需要大规模的微服务部署时,这是一个很好的中间步骤。当然,如果你根本不想管理Loki,那么可以考虑Grafana云服务。

重要特性

Loki实现了一些令人惊叹的特性,这些特性专门用于分配负载、保护系统不受攻击,并利用有效的存储机制。

Labels(标签)

和许多日志处理系统不同,Loki不对日志数据执行全文索引。相反,它利用了从Prometheus中借来的概念—标签—从日志数据中提取和标记信息,然后仅对标签本身进行索引。这极大地提高了写和读路径上的性能,并且—在我们看来同样有价值—不管输入源是什么,都能实现一致的标签分类。

由于这是Loki的一个重要优点,让我们深入研究Loki文档中的一个示例。假设你有一个Loki的“scrape配置”,如下图所示:


这个配置的标签部分特别重要。在本节中path变量定义了要读取的日志文件,关键字job定义了要查找的标签和用于过滤日志的值。使用此配置,Loki分发器将“跟踪”日志文件,在每个记录中查找一个名为job的变量,该变量的值为syslog,然后创建包含此关键字和值的Loki记录“流”。最后将job标签的索引以及包含标签和值的数据块写入持久化存储。
这个记录流可以使用简单的LogQL查询查询: {job="syslog"}。
在处理查询时,Loki查询器组件将找到指向job标签为syslog记录的索引,然后检索这些记录。

云原生后端存储

由于原始日志数据本身没有索引,Loki可以通过利用云原生对象存储服务(如Amazon S3、Amazon DynamoDB或Cassandra)作为后端数据存储库来提高系统的成本。为了改进查询处理,Loki使用云服务将数据存储为“块”(原始日志数据)和“索引”(规范化和索引标签以及从日志记录中提取的数据)。查询器使用更有效的索引来查找请求的分块日志数据。

LogQL

Loki实现了一种名为LogQL的日志查询语言,它大量借鉴了Prometheus的PromQL语言。LogQL既可以直接使用,也可以通过Grafana前端仪表板使用。为日志和指标提供一致的查询语言可以简化学习曲线,并促进动态过滤和转换。

在k8s集群中部署PLG技术栈

Loki有几种安装机制:Tanka(Grafana自己的云部署),Helm charts用于“简单可伸缩”的微服务部署,使用Docker / Docker Compose机制,以及可下载的二进制文件。如果需要,你还可以从Github存储库下载Loki源代码,并在本地编译。Grafana在这里为每种安装方法提供了说明。

Loki: 是一个更好的k8s日志管理解决方案

跟踪Kubernetes应用程序、pod和集群日志文件是一种非常有用的技术,可以近乎实时地跟踪容器化应用程序的运行情况。Grafana的Loki产品将其提升到一个新的水平,其功能受到流行的Prometheus指标系统的启发,甚至是在高度复杂的环境也易于扩展,以及一些增强性功能,使日志文件的处理比以往任何时候都简单。如果你正在寻找更好的Kubernetes日志管理解决方案,Loki绝对值得一试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 175,490评论 5 419
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 74,060评论 2 335
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 124,407评论 0 291
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 47,741评论 0 248
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 56,543评论 3 329
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 43,040评论 1 246
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 34,107评论 3 358
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 32,646评论 0 229
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 36,694评论 1 271
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 32,398评论 2 279
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 33,987评论 1 288
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 30,097评论 3 285
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 35,298评论 3 282
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 27,278评论 0 14
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 28,413评论 1 232
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 38,397评论 2 309
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 38,099评论 2 314

推荐阅读更多精彩内容