Grafana tempo是最近发布的的分布式追踪后端,跟踪发现依赖于其他数据源集成。Tempo的工作是存储大量跟踪,将其放置在对象存储中,并通过ID检索它们。日志和其他数据源使用户能够比以往更快,更强大地直接跳转到跟踪。
以前,我们使用Loki和示例程序[1]研究了发现traces。在本文中,我们探索使用另一个日志记录替代方案Elasticsearch和Grafana来直接建立从日志到traces的链接。
开始
让我们使用一个演示存储库[2],它将引导我们完成设置Elasticsearch和Tempo来存储日志和trace记录。此外,我们将使用Grafana可视化我们的数据源,并提供一种简单的机制来从日志中发现trace。如果您也想尝试一下,则readme文件中将包含分步说明!
还应该注意的是,我与Elasticsearch专家相距甚远,因为我们在Grafana Labs使用Loki。如果您发现任何明显的问题,请随时对示例进行PR更新!
Elasticsearch数据链接
设置从Elasticsearch到Tempo的链接的技巧是使用data-link。在Elasticsearch数据源配置中,它类似于以下内容:
使用此配置,Grafana将查找名为traceID
的Elasticsearch字段。如果找到一个,Grafana将使用该ID建立指向Tempo数据源的链接。
正确设置此链接后,然后在Explore中,我们可以直接从日志跳转到trace:
现在,您还可以使用Elasticsearch日志记录后端的所有功能来查找trace!
关于logfmt的说明
Elasticsearch生态系统似乎主要针对JSON日志记录,但是在Grafana Labs中,logfmt是日志的首选格式。为了从Elasticsearch字段获取工作链接,我们需要提取logfmt key/value并将其作为Elasticsearch字段插入。
我们使用Filebeat和自定义管道处理器来完成此操作,但是似乎logstash和第三方处理器可能是更好的方法。
通过以上配置,输出以下日志行…
代码语言:javascript复制level=info msg="HTTP client success" status=200 url=http://tns-db duration=2.213011ms traceID=2bd4c457541a72fa
…在Elasticsearch中被解析为以下字段:
最后的想法
Tempo是用于大量trace集成的绝佳新工具,但它依赖外部资源进行trace发现。在过去的文章中,我们研究了使用Loki和示例,但我们也知道Elasticsearch是一个极其常见的日志记录后端。
希望那些喜欢使用Elastic作为日志存储的人可以在此处使用示例和信息来设置自己的日志到trace流程并开始发现trace!
引用链接
[1]
Loki和示例程序: https://grafana.com/blog/2020/11/09/trace-discovery-in-grafana-tempo-using-prometheus-exemplars-loki-2.0-queries-and-more/
[2]
演示存储库: https://github.com/joe-elliott/tempo-elastic-example
[3]
原文: https://grafana.com/blog/2020/12/07/how-to-find-traces-in-tempo-with-elasticsearch-and-grafana/?src=tw&mdm=social