监控与指标分析工具Grafana添加原生云计算日志平台Loki

Grafana团队发布Loki项目Alpha测试版,这是一个捆绑Grafana指标查找与可视化功能的日志平台,Loki增加了一个新的客户端代理Promtail,以及服务器端的日志元数据索引和存储日志组件。

Grafana是用来监控与分析指标的工具,提供Graphite、InfluxDB和Prometheus仪表板功能。 Grafana提供完整的时间串行数据的仪表板解决方案,支持超过40个数据来源,官方提到,现在仪表板故事(Dashboarding Story)已经成熟,他们希望把仪表板解决方案转变成可观察的平台,成为调试系统的首选。

由于指标是事件回应的关键,警示则通常会以时间串行为条件写入,但是指标只能用于披露可预期的行为,需要预先声明而且基数有限,因此指标只能用来叙述仪表板故事的一半,为了了解完整的事故原因,工程师通常会使用日志来获得更详细的信息。

事件的处理通常从警示开始,接着查找仪表板,以找出发生错误的服务、主机或是执行实例,而后工程师会尝试从各日志中找出错误发生的根本原因。但由于目前的状况,是将指标和日志存储在两个不同的系统中,因此工程师需要转换查找,转换语言成另一个系统的语言与接口。

日志聚合方法可以简化这样的程序,有许多SaaS供应商与开源项目提供了像是时间串行监控项目,几乎所有的解决方案都使用全文搜索系统以检索日志,虽提供丰富强大的功能集,允许进行复杂的查找,但对于日志聚合来说,反而有规模复杂、资源密集且难以操作的问题。 Grafana团队提到,在这些系统执行日志聚合工作,简直就像杀鸡用牛刀。

由于Grafana团队对于现有的所有解决方案都不满意,因此开始着手设计自有的系统Loki。 Loki的设计目标,就是要最小化日志和指标之间上下文切换,而这将有助于事故回应时间和改善用户体验。 Loki由客户端的Promtail代理和服务器端的Distributor与Ingester组件组成。

Distributor从Promtail代理接收日志数据,从标签和日志数据中用户产生一致散列,并且发送到多个Ingester中。 Ingester接收条目构建成一组具特别标签与时间跨度的日志,并以gzip进行压缩。 Ingester使用元数据而非日志内容建志索引,以便简单地供用户进行查找,还能与时间串行指标标签相关联。官方表示,这是在功能与操作复杂性中权衡的结果。

查找API接受以时间范围和标签选择器为条件,并且能与Ingester沟通尚未更新的最新数据。搜索可以使用正规表达式,但由于日志内容未编入索引,因此对内容搜索的速度会比较缓慢。

经安排的日志会定期更新至Amazon S3这类的对象存储中,并指向Cassandra、Bigtable或DynamoDB等数据库。 AWS与GCP等公有云供应商提供自定义的指标萃取,AWS还提供从指标导航到日志的功能,两者都使用不同的查找语言以查找日志数据,而Loki可以简化这个过程,并解决日志从短暂来源Kubernetes pod崩溃时丢失的问题。