博客/工程

Loki是普罗米修斯启发的开源日志记录系统

2020年5月12日 6分钟

每个应用程序都创建日志。Web服务器、防火墙、Kubernetes集群上的服务、公共云服务等等。对于公司来说,能够收集和分析这些日志是至关重要的。微服务、物联网、网络安全和云的日益普及带来了新型日志数据的爆炸式增长。这就是为什么日志管理是一个超过20亿美元的巨大市场同比增长14%。

关键日志分析用例

有很多重要的问题公司想问他们的日志。这些问题可以大致分为5个关键用例。

调试和故障排除。为了帮助开发、DevOps和SRE团队快速得到以下问题的答案:

  • 为什么我的应用程序崩溃了?

  • 为什么客户达不到我的服务?

  • 为什么我的Kubernetes pod不断重启?

监控。很多人都用普罗米修斯和石墨指标用于监控,但你也可以从你的日志创建指标,这样你就可以监控网站的错误率,并在它超过阈值时得到警报,例如。

网络安全。几乎每天都有重大泄露的消息。实时日志分析可以检测正在进行的黑客攻击,日志可以帮助取证,以了解哪些服务器受到了损害。

遵从性。受监管行业需要保留3-5年的审计日志,以符合行业法规。此外,当地执法部门可能要求保留和访问公司日志。

商业智能。从业务数据中创建可操作的见解是一个常青的用例。例如,日志可以帮助您了解从广告渠道到公司网站的转化率。

当前日志管理解决方案bob彩票中奖计划

在这个超过20亿美元的巨大市场中,有很多供应商。最流行的是Splunk(具有大量开箱即用功能的封闭源代码)和Elasticsearch(主要是具有大量功能的开放源代码,尽管需要一些汇编)。像AWS Cloudwatbob彩票中奖计划ch和谷歌Stackdriver这样的公共云解决方案是由您的云提供商提供的明智的默认值。还有很多其他公司,如Graylog, Sumologic和Loggly。

但现有玩家数量庞大并不意味着日志管理问题已得到解决。

传统日志管理工具面临的三大挑战

1.很难大规模经营

随着公司存储越来越多的日志,传统的解决方案最初不是为pb级设计的,在如此大的容量下往往难以操作。bob彩票中奖计划Elasticsearch就是一个很好的例子,它最初是作为全文搜索索引来支持亚秒级的复杂查询结果。尽管随着时间的推移已经有了很多改进,但对大多数公司来说,大规模运营仍然不是一件容易的事情。这会对TCO产生负面影响,因为你需要一个更大的运营团队来保持事情的顺利运行。

2.昂贵的

除了人力成本之外,传统的日志管理工具往往资源匮乏。想想快速的CPU,大量的RAM和大量的ssd。这也增加了TCO。最重要的是,像Splunk这样的专有解决方案的授权成本真的令人难以置信。bob彩票中奖计划

3.这和普罗米修斯的指标关系不大

传统解决方案是在Prombob彩票中奖计划etheus作为云原生和Kubernetes的标准开源度量监控解决方案兴起之前创建的。由于Prometheus查询语言和数据模型与Elasticsearch或Splunk查询语言非常不同,这使得相关指标和日志更加困难。许多Prometheus用户使用Grafana作为他们的可视化和探索工具,这些差异要求他们每次都重新构建查询上下文。

洛基不一样

这些传统日志聚合解决方案的关键挑战促使Grafana实验室产品副总裁Tom Wilkie创建了bob电竞频道bob彩票中奖计划Grafana洛基2018年初。这个100%开源的日志聚合工具在日志管理中采用了独特的方法,因为它只索引每个日志行的一小部分元数据。通过设计,Loki数据模型和查询语言也与Prometheus极其相似.这些特点为用户带来了以下好处:

  • (几个)比传统解决方案操作和运行便宜的数量级。bob彩票中奖计划(在Grbob电竞频道afana实验室,我们的由Loki提供支持的托管bob彩票中奖计划日志解决方案定价为每GB 0.50美元,保留1个月)。

  • 水平可扩展——想想拍字节的规模。

  • 非常适合Kubernetes,普罗米修斯,和可视化在Grafana。

这些属性使它非常适合调试和故障排除用例。这在开源社区中引起了共鸣。自第一次发布以来,Loki就受到了大量的关注和大量的生产部署。

洛基只索引元数据吗?

那么“只索引元数据”是什么意思呢?让我们比较一下Elasticsearch和Loki通常如何从web服务器上索引单个日志行。下面是我们的例子:

10.185.248.71 - - [09/Jan/2015:19:12:06 +0000] 808840 "GET /inventoryService/purchaseItem?userId=20253471&itemId=23434300 HTTP/1.1" 500 17 "-" Apache-HttpClient/4.2.6 (java 1.5)"

Elasticsearch解析完整的字符串,包括高基数字段,如order_iduser_id,并将所有字段值存储在一个大索引中。这种方法的好处是可以非常快地执行复杂的查询,但缺点是索引有时甚至比原始数据还要大。这是Elasticsearch架构所固有的;它是建立在Lucene搜索引擎项目,专为低写/高读场景而设计。那就是:花大力气写作,让阅读更有效率。然而,这与日志完全相反,日志通常是高写/低读。使Elasticsearch扩展到高容量日志聚合是可行的,但需要大量昂贵的计算资源和高水平的操作复杂性。

Elasticsearch通常如何索引logline的示例:

时间戳= 09年/ 0000年1月/ 2015:19:12:06 + Client_ip = 10.185.248.71 URI = /中/ purchaseItem用户id = 20253471 itemId = 20253471 =方法得到大小= 808840时间= 17 HTTPStatus = 500 = HTTP / 1.1协议代理= Apache-HttpClient / 4.2.6 (java 1.5)味精=“10.185.248.71——[09年/ 808840年1月/ 2015:19:12:06 + 0000]“GET /中/ purchaseItem ?用户id = 20253471, itemId = 23434300 HTTP / 1.1“500 17”-“Apache-HttpClient / 4.2.6 (java 1.5)”

洛基如何索引相同的日志线的例子:

时间戳= 09/Jan/2015:19:12:06 +0000方法= GET HTTPStatus = 500

Loki只在前面索引几个低基数字段,所以Loki索引非常小。我们可以通过时间范围和索引字段(在Loki中称为标签)对日志进行过滤来查询日志洛基给最佳实践贴标签然后使用子字符串搜索或正则表达式扫描剩余的日志行集。从长远来看,这是更有效的,并且非常适合调试和故障排除用例,在这种用例中,您需要在众所周知的大海捞针,并将Prometheus度量与日志关联起来。

从格拉夫娜·洛基开始

你可以在几分钟内和洛基开始Grafana云.我们有新的免费和付费Grafana云计划,以适应每一个用例-现在免费注册

如果Grafana Loki的日志聚合方法引起了您的兴趣,请查看我的(稍微更具技术性)如何开始使用Grafana Loki的视频:

从格拉夫娜·洛基开始- 4分钟以内

开始在谷歌Kubernetes引擎上使用Grafana Loki- 5分钟以内

如何使用Promtail, FluentD和Fluent-bit将日志发送到Grafana Loki

仔细看看新的Grafana度量和日志相关特性

对于Grafana Loki的介绍,更深入地了解建筑决策,我推荐洛基最新的网络研讨会


感谢Christine Wang, Dave Russell, Julie Dam, Malcolm Holmes, Marcus Olsson, Peter Štibraný和David Dorman对这篇博客的帮助。