OTTPL 上下文因上下文推断而变得更容易

选择适合运行语句的OTTL上下文,即使对有经验的用户来说也可能具有挑战性。选择正确的选项会影响准确性和效率,因为使用更高级别的OTTL上下文可以避免不必要地迭代嵌套的低级别上下文。

为了简化此过程,OpenTelemetry社区很高兴地宣布为transform processor提供OTTL上下文推理支持。此功能消除了用户理解OTTL底层上下文概念的需要,使他们能够专注于数据。它还通过自动选择最合适的OTTL上下文来提高语句处理效率。此优化确保数据转换既准确又高效。

如何工作?

0.120.0版本开始,transform processor支持两种新的上下文推理配置风格。第一种提供了一种更简单、更扁平的方法,而第二种则与现有配置格式非常相似。

基本配置

基本配置风格通过允许用户将所有语句列在一起,而不必担心OTTL上下文或额外的配置结构来简化配置。此风格支持来自多个OTTL上下文的语句,并且不需要单独分组。

为了说明这一点,请比较以下配置

metric_statements:
  - context: resource
    statements:
      - keep_keys(attributes, ["host.name"])
  - context: metric
    statements:
      - set(description, "Sum") where type == "Sum"
      - convert_sum_to_gauge() where name == "system.processes.count"
  - context: datapoint
    statements:
      - limit(attributes, 100, ["host.name"])

使用新的基本配置风格,通过简单地提供一个语句列表,就可以更简洁地表达相同的逻辑

metric_statements:
  - keep_keys(resource.attributes, ["host.name"])
  - set(metric.description, "Sum") where metric.type == "Sum"
  - convert_sum_to_gauge() where metric.name == "system.processes.count"
  - limit(datapoint.attributes, 100, ["host.name"])

这种简化的方法增强了可读性,并使配置更加直观。要使用此配置风格,语句中的所有路径都必须加上其各自OTTL上下文的前缀。这些前缀对于所有上下文推理配置都是必需的,并作为选择最佳匹配的提示。它还使得语句在使用了OTTL的组件之间具有明确性和可移植性。

高级配置

上下文推理的高级配置风格与现有格式非常相似,并允许用户利用上下文推理的优势,同时对语句配置(如error_modeconditions)进行细粒度控制。例如,请考虑以下配置

metric_statements:
  - context: datapoint
    conditions:
      - resource.attributes["service.name"] == "my.service"
    statements:
      - set(metric.description, "counter") where attributes["my.attr"] == "some"

上面的配置现在可以写成

metric_statements:
  - conditions:
      - resource.attributes["service.name"] == "my.service"
    statements:
      - set(metric.description, "counter") where datapoint.attributes["my.attr"] == "some"

在此示例中,忽略了context值,并自动推断为datapoint,因为它是语句中唯一支持解析datapointmetric数据的OTTL上下文。

如果我们更新上述配置,删除datapoint的使用

metric_statements:
  - conditions:
      - resource.attributes["service.name"] == "my.service"
    statements:
      - set(metric.description, "counter")

由于没有访问数据点,上下文推理器将选择metricOTTL上下文。虽然可以使用datapointOTTL上下文运行这些语句,但metric是最有效的选项。

我应该选择哪种配置风格?

基本配置风格最适合对简单性和易用性要求很高的场景。它非常适合简单的用例,您的配置需求非常直接,并且不需要使用额外的配置键,从而允许您以最小的努力快速设置您的语句,而无需了解OTTL上下文的底层概念。

高级配置风格更详细,并且允许使用额外的配置键,例如error_modeconditions。它支持来自多个OTTL上下文的语句。但是,与基本配置风格不同,它可能需要将它们拆分到单独的配置组中(请参阅高级配置)。在性能方面,高级配置比基本配置稍快,使其成为复杂场景或语句数量众多的配置的更好选择。

试用一下

在总结之际,我们鼓励用户探索这一新功能,并在其遥测管道中利用其优势!

如果您有任何问题或建议,我们很乐意听取您的意见!请加入#otel-collector频道,在CNCF Slack工作区进行讨论。