博客/工程

如何做自动注释与Grafana和洛基

2019年12月9日3分钟

Grafana注释是伟大的!它们清楚地标记了事件的发生,以帮助操作员和开发人员将事件与指标关联起来。您可能没有意识到这一点,但Grafana可以通过查询Loki自动注释图形。下面来看看如何使用这个功能。

Grafana洛基注释

洛基查询可以用来自动生成注释在Grafana仪表板从6.4.0。对于从查询返回的每一行日志,文本都会在适当的时候自动显示为注释。

要添加注释查询,只需导航到仪表板设置->注释-> New并选择一个Loki数据源。键入一个查询,选择要显示为注释的日志行,然后就可以开始了:

添加注释查询
添加注释查询

注意,我们显式地查询loki名称空间中名为ingester的部署的任何更改。如果我们直接查询这些日志,它们看起来是这样的:

查询日志
查询日志

kubernetes-diff-logger

在上面的示例中,我们正在查询一个名为的应用程序记录的行kubernetes-diff-logger.这是一个简单的开源应用程序,它可以记录我们想要监视的一组Kubernetes对象的任何更改。它目前支持监视部署、状态集和守护进程集,但可以轻松扩展以支持更多。欢迎踊跃投稿!

记录器的原始输出如下所示:

{“时间戳”:“2019 - 10 - 30 t12:48:52z”、“动词”:“更新”、“类型”:“部署”,“笔记”:“[Template.Spec.Containers.slice[0]。图片:grafana/loki:master-d5758e3 != grafana/loki:master-d080e46]","name":"ingester","namespace":"tempo-dev"} {"timestamp":"2019-10-30T13:38:59Z","verb":"updated","type":"deployment","notes":"[template . specs . container .slice[0]. "图片:grafana/loki:master-d080e46 != grafana/loki:master-38d803a]","name":"ingester","namespace":"tempo-dev"} {"timestamp":"2019-10-30T18:35:54Z","verb":"updated","type":"deployment","notes":"[template . specs . containers .slice[0]. "图片:grafana/loki:master-38d803a != grafana/loki:master-dd4c138]","name":"ingester","namespace":"tempo-dev"}

注意,这个应用程序使用JSON进行登录。让我们使用Promtail next提取可以直接作为Loki标签查询的关键字段。

Promtail配置

推广内容包括高度可配置的管道我们将使用它来提取JSON字段作为Loki标签,并重写日志行本身。

—match: selector: '{name="kube-diff-logger"}' stages:—json: expression: diff_name: name diff_namespace: namespace diff_type: type diff_verb:动词notes: notes timestamp: timestamp - timestamp: format: RFC3339 source: timestamp - labels: diff_name: "" diff_namespace: "" diff_type: "" diff_verb: "" - output: source: "" - output: source: "

该配置提取的名字名称空间类型而且动词JSON字段,并使它们可用于直接查询使用Logql查询是这样的:

{container_name="kube-diff-logger", diff_namespace="loki", diff_type= " deployment ", diff_name="ingester"}

此外,输出的值将重写日志行笔记字段。这很重要,因为它将用作如下所示注释的注释。

把碎片拼在一起

现在我们已经设置了注释查询并记录了所需的事件,我们应该开始在仪表板上看到注释。

下面的内存使用指示板在Loki摄取器部署更新时显示注释。当然,这与内存使用重置有关,因为Kubernetes pod正在滚动。使用这种技术,您可以将更改与延迟、成功率或任何其他指标直接关联到部署中的更改。

内存使用仪表板
内存使用仪表板

将鼠标移到注释上就会显示准确的更改!在这种情况下,图像被改变了;也就是说,构建并推出了应用程序的新版本。

将鼠标移到注释上
将鼠标移到注释上

最终的想法

自动注释是一种极好的方式,可以保证应用程序的Kubernetes基础设施的任何更改都清晰地标记在Grafana图上。今天就试试吧!

同样,如果kubernetes-diff-logger如果缺少一些您感兴趣的特性,请随意提交问题或PR。这是一个有很大潜力的小项目,也是参与开源开发的有趣方式!