我想将 EKS 集群上运行的选定服务的日志转发到 CloudWatch,以实现独立于集群的存储和更好的可观察性。
按照 https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-EKS-quickstart.html 中概述的快速入门,我已成功通过 Fluent Bit 服务转发日志,但这也生成了 170 个 Container Insights 指标通道。这些指标不仅不需要,而且似乎也花费相当多。
如何禁用CPU/内存/网络等集群指标的收集,而只继续将容器日志转发到CloudWatch?我很难找到这方面的任何文档。
我想我已经弄清楚了 - 快速入门指南中的
cloudwatch-agent
守护进程集是发送指标的内容,但日志转发不需要它。快速入门 cloudwatch-agent
文件中名称与 yaml
相关的所有对象都不需要进行日志转发。
按照 Toms Mikoss 的建议,您需要删除配置文件中的
metrics
对象。该文件是您启动时传递给代理的文件
这适用于“本地”“Linux”安装。我没有在 Windows 上测试过这个,也没有在 EC2 上测试过,但我想它会是类似的。 此处的 AWS 文档表示您还可以通过 SSM 分发配置,但我想这里的答案仍然适用。
包含指标的文件示例:
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/nginx.log",
"log_group_name": "nginx",
"log_stream_name": "{hostname}"
}
]
}
}
},
"metrics": {
"metrics_collected": {
"cpu": {
"measurement": [
"cpu_usage_idle",
"cpu_usage_iowait"
],
"metrics_collection_interval": 60,
"totalcpu": true
}
}
}
}
没有指标的文件示例:
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/nginx.log",
"log_group_name": "nginx",
"log_stream_name": "{hostname}"
}
]
}
}
}
}
供参考,Linux 本地服务器的启动命令:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config \
-m onPremise -s -c file:configuration-file-path
更多详细信息请参阅AWS 文档
如果使用
CloudWatch Observability
EKS 插件,它将 现在(从版本 1.5.0 开始)自动启用具有增强可观察性的 Container Insights。
通过将以下内容添加到控制台中附加组件的
Advanced configuration
部分,我设法在保留日志的同时禁用增强的可观察性指标:
"agent": {
"config": {
"logs": {
"metrics_collected": {
"application_signals": {},
"kubernetes": {
"enhanced_container_insights": false
}
}
},
"traces": {
"traces_collected": {
"application_signals": {}
}
}
}
}
注意
enhanced_container_insights: false
线。
您也可以使用 CLI 执行此操作:
aws eks update-addon --cluster-name <CLUSTER_NAME> --addon-name amazon-cloudwatch-observability --addon-version <ADDON_VERSION> --configuration-values '
"agent": {
"config": {
"logs": {
"metrics_collected": {
"application_signals": {},
"kubernetes": {
"enhanced_container_insights": false
}
}
},
"traces": {
"traces_collected": {
"application_signals": {}
}
}
}
}' --resolve-conflicts preserve
该附加组件仍会提供常规指标和日志组,但您不会获得增强的指标(通常会深入到 Pod 或容器级别)。默认指标足以满足我的用例,并且我仅使用这些指标就可以节省成本。