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_mode和conditions)进行细粒度控制。例如,请考虑以下配置
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,因为它是语句中唯一支持解析datapoint和metric数据的OTTL上下文。
如果我们更新上述配置,删除datapoint的使用
metric_statements:
- conditions:
- resource.attributes["service.name"] == "my.service"
statements:
- set(metric.description, "counter")
由于没有访问数据点,上下文推理器将选择metricOTTL上下文。虽然可以使用datapointOTTL上下文运行这些语句,但metric是最有效的选项。
我应该选择哪种配置风格?
基本配置风格最适合对简单性和易用性要求很高的场景。它非常适合简单的用例,您的配置需求非常直接,并且不需要使用额外的配置键,从而允许您以最小的努力快速设置您的语句,而无需了解OTTL上下文的底层概念。
高级配置风格更详细,并且允许使用额外的配置键,例如error_mode和conditions。它支持来自多个OTTL上下文的语句。但是,与基本配置风格不同,它可能需要将它们拆分到单独的配置组中(请参阅高级配置)。在性能方面,高级配置比基本配置稍快,使其成为复杂场景或语句数量众多的配置的更好选择。
试用一下
在总结之际,我们鼓励用户探索这一新功能,并在其遥测管道中利用其优势!
如果您有任何问题或建议,我们很乐意听取您的意见!请加入#otel-collector频道,在CNCF Slack工作区进行讨论。