

# 指标管线处理器
<a name="metrics-pipeline-processors"></a>

指标管线处理器在摄取期间会转换 OTel 指标数据点。一个指标管线最多可以有 20 个处理器，按定义的顺序依次应用。

处理器使用 OTTL 路径表达式来定位不同范围的属性：


**OTTL 路径范围**  

| 路径 | 范围 | 示例 | 
| --- | --- | --- | 
| `resource.attributes["key"]` | 资源级别 | `resource.attributes["service.name"]` | 
| `instrumentation_scope.attributes["key"]` | 范围属性 | `instrumentation_scope.attributes["library"]` | 
| `datapoint.attributes["key"]` | 数据点级别 | `datapoint.attributes["status_code"]` | 
| `attributes["key"]` | 数据点的简称 | `attributes["environment"]` | 

## add\_attributes 处理器
<a name="add-attributes-processor"></a>

添加或覆盖指标数据点的属性。适用于所有时间性类型。

**OTTL 等效项：**`set(attributes["key"], "value")`

**配置**  
使用以下参数配置 add\_attributes 处理器：

```
processor:
  - add_attributes:
      attributes:
        - key: resource.attributes["team"]
          value: "payments"
        - key: attributes["environment"]
          value: "production"
        - key: instrumentation_scope.attributes["version"]
          value: "1.0"
          overwrite_if_key_exists: true
```参数

`attributes`（必需）  
要添加的属性对象数组。

`attributes[].key`（必需）  
OTTL 属性路径，指定要添加属性的位置。

`attributes[].value`（必需）  
要分配的字符串值。

`attributes[].overwrite_if_key_exists`（可选）  
布尔值。如果为 `true`，则覆盖现有值。默认值为 `false`。设置为 `true` 时，此操作将被视为破坏性操作，并且不适用于累积指标或已出售指标。

## delete\_attributes 处理器
<a name="delete-attributes-processor"></a>

从指标数据点中移除特定属性。**不适用于累积指标或已出售指标。**

**OTTL 等效项：**`delete_key(attributes, "key")`

**配置**  
使用以下参数配置 delete\_attributes 处理器：

```
processor:
  - delete_attributes:
      with_keys:
        - resource.attributes["obsolete"]
        - attributes["temp"]
        - datapoint.attributes["debug"]
```参数

`with_keys`（必需）  
要移除的 OTTL 属性路径数组。

## rename\_attributes 处理器
<a name="rename-attributes-processor"></a>

重命名指标数据点的属性键。**不适用于累积指标或已出售指标。**

**OTTL 等效项：**`set() + delete_key()`

**配置**  
使用以下参数配置 rename\_attributes 处理器：

```
processor:
  - rename_attributes:
      attributes:
        - from_key: resource.attributes["old_key"]
          to_key: resource.attributes["new_key"]
          overwrite_if_to_key_exists: true
```参数

`attributes`（必需）  
重命名操作数组。

`attributes[].from_key`（必需）  
来源 OTTL 属性路径。

`attributes[].to_key`（必需）  
目标 OTTL 属性路径。

`attributes[].overwrite_if_to_key_exists`（可选）  
布尔值。如果为 `true`，则当目标键存在时覆盖它。默认值为 `false`。

## rename\_metrics 处理器
<a name="rename-metrics-processor"></a>

重命名指标名称。**不适用于累积指标或已出售指标。**

**OTTL 等效项：**`set(name, "new.metric.name") where name == "old.metric.name"`

**配置**  
使用以下参数配置 rename\_metrics 处理器：

```
processor:
  - rename_metrics:
      metrics:
        - from: "old.metric.name"
          to: "new.metric.name"
```参数

`metrics`（必需）  
重命名操作数组。

`metrics[].from`（必需）  
当前指标名称。

`metrics[].to`（必需）  
新指标名称。

## substitute\_attribute\_values 处理器
<a name="substitute-attribute-values-processor"></a>

通过查找表映射属性值。**不适用于累积指标或已出售指标。**

**OTTL 等效项：**`replace_match()`

**配置**  
使用以下参数配置 substitute\_attribute\_values 处理器：

```
processor:
  - substitute_attribute_values:
      attributes:
        - key: resource.attributes["region"]
          from: "us-east-1a"
          to: "us-east-1"
```参数

`attributes`（必需）  
替换操作数组。

`attributes[].key`（必需）  
要匹配的 OTTL 属性路径。

`attributes[].from`（必需）  
要匹配的值。

`attributes[].to`（必需）  
替换值。

## 完整示例
<a name="metrics-processors-full-example"></a>

下面的示例在单个管线中使用所有五个处理器：

```
pipeline:
  source:
    cloudwatch_metrics:
      format: otlp
      selection_criteria:
        - match_all:
            - 'resource.attributes["service.name"] == "my-service"'
            - 'metric.name == "CPUUtilization"'
  processor:
    - add_attributes:
        attributes:
          - key: resource.attributes["env"]
            value: "prod"
            overwrite_if_key_exists: true
    - delete_attributes:
        with_keys:
          - resource.attributes["internal.trace"]
    - rename_attributes:
        attributes:
          - from_key: resource.attributes["old_key"]
            to_key: resource.attributes["new_key"]
    - rename_metrics:
        metrics:
          - from: "CPUUtilization"
            to: "system.cpu.utilization"
    - substitute_attribute_values:
        attributes:
          - key: resource.attributes["environment"]
            from: "dev"
            to: "development"
  sink:
    - cloudwatch_metrics: {}
```

## 处理器兼容性和限制
<a name="metrics-processor-restrictions"></a>

最大处理器数量  
一个指标管线最多可以有 20 个处理器。

破坏性处理器和时间性  
破坏性处理器（`delete_attributes`、`rename_attributes`、`rename_metrics`、`substitute_attribute_values` 和 `add_attributes`，其中 `overwrite_if_key_exists: true`）不适用于累积指标或已出售指标。这些指标会原封不动地传递。

已出售指标保护  
破坏性处理器无法修改 `instrumentation_scope.name` 开头为 `cloudwatch.aws/` 的指标。这些指标会原封不动地传递。