如何防止CloudWatch Container Insights指标来自Apache Airflow启动的短期kube



我的CloudWatch metricsCWAgent命名空间中有大约600000个度量。其中99%是不想要的,并且来源于寿命非常短的豆荚。

我发现在EKS上运行的amazon-cloudwatch-agent将为每个吊舱创建一组5个度量:

  • pod_memory_utilization
  • pod_number_of_container_restarts
  • pod_cpu_utilization
  • pod_network_tx_bytes
  • pod_network_rx_bytes

由于我在EKS集群上运行了带有KubernetesExecutor的Apache Airflow,因此会定期创建大量寿命很短的pod。每次任务执行都会得到一个pod,通常持续一分钟左右。因此,我为每次执行提供了5个新指标,通常只有一两个数据点(因为我认为这是每分钟一个数据点(。

这些指标对我来说完全没有用——太多了,没有足够的数据点来实际进行任何有趣的分析/图表。

是否有任何方法可以从一开始就阻止创建这些指标?我仍然想要我长期运行的Pods和Deployments的指标。

目前amazon-cloudwatch-agent只有一种机制来控制kubernetes插件(plugins/processors/k8sdecorator/stores/podstore.go(摄入的内容:Pod中的aws.amazon.com/cloudwatch-agent-ignore: true注释。

我不认为这个注释是正式记录的,但你可以在这里的源代码中找到它的定义并在这里使用。

如果一个pod有注释aws.amazon.com/cloudwatch-agent-ignore: true,它将被amazoncloudwatch-agent/cwagent忽略,并且不会为其生成容器洞察度量。

您需要有amazoncloudwatch代理v1.247448.0(2021-05-28(或更高版本,并且您的cwagent-config.json不需要更改;通常的";.logs.metrics_collected.kubernetes正常:

{
"logs": {
"metrics_collected": {
"kubernetes": {
"cluster_name": "${cluster_name}",
"metrics_collection_interval": 60
}
},
"force_flush_interval": 5
},
"metrics": {
"metrics_collected": {
"statsd": {
"service_address": ":9125"
}
}
}
}

现在,为了迫使Apache Airflow将aws.amazon.com/cloudwatch-agent-ignore: true注释添加到任务/工作程序pod和KubernetesPodOperator创建的pod,您需要将以下内容添加到您的舵values.yaml(假设您使用的是气流2.2.3的"官方"舵图(:

airflowPodAnnotations:
aws.amazon.com/cloudwatch-agent-ignore: "true"
airflowLocalSettings: |-
def pod_mutation_hook(pod): 
pod.metadata.annotations["aws.amazon.com/cloudwatch-agent-ignore"] = "true"

如果您不使用舵图,则需要自己更改pod_template_file以添加annotation,还需要修改airflow_local_settings.py以包含pod_mutation_hook

相关内容

最新更新