博客/工程

如何最大化跨度摄入同时限制将每秒写入“锡拉”后端Jaeger跟踪吗

2020年7月30日 5分钟

Jaeger主要支持两个后端:卡桑德拉和Elasticsearch。我们使用在Grabob电竞频道fana实验室“锡拉”,一个开源Cassandra-compatible后端。在本帖里,我们将看看我们在规模和运行“锡拉”分享一些技术来减少负载,同时摄取更多的跨越。我们也会分享一些关于Jaeger的内部指标负载和“锡拉”后端性能。

特别感谢“锡拉”团队,花费一些时间与我们谈论性能和配置!

“锡拉”的表现

即使在一个非优化配置“锡拉”令人称羡。“锡拉”警告的性能影响运行在码头工人以及如何最好的减轻在GKE。尽管没有尝试这些高级调优,我们仍然满意的性能“锡拉”。

Grabob电竞频道fana实验室我们已经部署了“锡拉”形象与默认设置GKE仍得到~ 175 k写道每秒(复制)~ 20左右的核和~ 95 GB的内存。如果你刚刚开始Kubernetes看看“锡拉”“锡拉”操作符

“锡拉”资源的使用
“锡拉”资源的使用

后端负载

所以“锡拉”是处理~ 175 k /秒写道,但是如果我们检查我们的Jaeger指标,我们只摄取~ 8 k /秒。所有的这些写来自哪里?Jaeger,写的数量/秒“锡拉”直接乘法器的数量/秒。我们调查的所有这些来源写道。

Jaeger跨越与“锡拉”写道
Jaeger跨越与“锡拉”写道

Jaeger是开源的!很容易评估的模式以及实际编写的代码索引。通过审查的代码,我们可以看到Jaeger使用一个键值后端支持搜索服务,操作,持续时间、和标记。每跨摄取以下行插入:

  • 1行服务名称索引

  • 1行服务/操作名称索引

  • 1行跟踪指数

  • 期间2行索引

    • 搜索的服务名称和第二个搜索服务和操作名称。
  • 为每一个标签与跨度N行

    • N是平均每个跨度的标签数量在您的环境中。记住,所有标签,过程标记,每个标记每个日志默认索引。例如,下面的跨度会导致12写入标记指数:
一个典型的跨标签
一个典型的跨标签
  • 2 x的复制因子

    • 默认情况下,模式创建脚本使用一个复制因子2 x,但这在创建时是可配置的。

每个人的分配将会有点不同(取决于你的平均每跨标签),但在Grafana实验室,我们大部分的写道,不出所料,标记指数在40 k /秒。bob电竞频道上面的分析证明是正确的:我们正在写~ 8 k /秒的服务名称、服务操作,跟踪指数,指数~ 16 k /秒的持续时间。

“锡拉”每秒插入表的分解
“锡拉”每秒插入表的分解

减少负载和增加跨越

最明显的方式减少负载调整采样率。Grabob电竞频道fana实验室,我们强烈建议利用Jaeger远程取样器,它允许操作员控制采样率为所有应用程序从一个中央位置。这是必要的,在一个更大的安装与多个消费者Jaeger的后端,它使操作员能够减少抽样过程产生太多的跨越。

索引的旗帜

然而,减少跨越也会限制我们的应用程序中,我们的愿景和自然,我们要摄取尽可能多的跨度/秒。值得庆幸的是,Jaeger一些可配置选项允许我们控制标签写的数量/秒。这可以帮助我们减少最大的块写入“锡拉”。

——cassandra.index。日志控制日志字段索引。设置为false来关闭。(默认正确)——cassandra.index。process-tags控制过程标签索引。设置为false来关闭。(默认正确)——cassandra.index。tag-blacklist字符串的逗号分隔列表span标记黑名单被索引。所有其他标签将被索引。相互排斥的“白名单”选项。 --cassandra.index.tag-whitelist string The comma-separated list of span tags to whitelist for being indexed. All other tags will not be indexed. Mutually exclusive with the blacklist option. --cassandra.index.tags Controls tag indexing. Set to false to disable. (default true)

这是我们的配置,但是你应该让这个适合你的需要:

指数:tag-blacklist: client-uuid span.kind、组件internal.span.format, ip, jaeger.version sampler.type, sampler.param, http。方法记录:假

添加上述配置总写后端减少了约33%。我们的标签索引写/秒从40 k ~ 85 k ~。

摄取的变化当添加过滤器
摄取的变化当添加过滤器

消防带模式

在Jaeger,有另一种方法来减少索引写/秒。我们可以跨越标记为“管道”模式。这个方法指定一个应用程序或需要更少的索引。出现跨将跳过索引标签,日志和持续时间。它可能是有用的,如果一个团队想要大量的跨越,但不需要所有的索引。

在去一个例子用OpenTracing Jaeger绑定:

跨度:= tracer.StartSpan (“blerg”) jaegerSpan ok: =跨度。(* jaeger.Span)如果好{jaeger.EnableFirehose (jaegerSpan)}

Wrappin ' er

我们满意的整体性能和稳定Grafana实验室的“锡拉”。bob电竞频道与“锡拉”3.1.1,我们能够运行一个集群和忽略它几个月——通常处理175 k /秒写道,甚至多达~ 250 k /秒写道,在这个时期。与合适的配置,我们甚至会看到更好的性能。

如果你有兴趣学习更多关于使用Jaeger分布式跟踪,洛基,Grafana, 8月6日和我一起为我的网络研讨会,介绍分布式跟踪。“你可以注册在这里看住或得到一个链接来访问记录。

最后注意:请确保使用Jaeger减少后端写入的配置选项,允许您摄取更多的跨度和更好地服务您的开发人员!