使用 AWS Cloudwatch Agent 和 Python 记录自定义指标

Logging custom metrics using AWS Cloudwatch Agent and Python

我们使用 Python(参见下面的现有代码)向 AWS 发送自定义指标,并单独使用 AWS CloudWatch Agent 向我们的 EC2 机器发送指标。但是,我们希望停止通过 boto 客户端发送自定义指标,而是使用 AWS CloudWatch 代理发送它们。

我从 StatsD and collectd 找到了有关如何发送自定义指标的详细信息,但不清楚如何发送您自己的自定义指标。我猜我们必须将我们的指标以类似的数据格式导出到其中一个,但目前尚不清楚如何做到这一点。总之,我们需要:

有没有人有涵盖该内容的示例?

现有代码

import boto3
cloudwatch = boto3.client(
    service_name="cloudwatch",
    region_name=env["AWS_DEPLOYED_REGION"],
    api_version="2010-08-01",
)
cloudwatch.put_metric_data(
    Namespace="myNameSpace",
    MetricData=[
        {
            "MetricName": "someName",
            "Dimensions": [
                {"Name": "Stage", "Value": "..."},
                {"Name": "Purpose", "Value": "..."},
            ],
            "Values": values,
            "StorageResolution": 60,
            "Unit": "someUnit",
        },
    ],
)

CloudWatch 代理支持 StatsD or CollectD 收集自定义指标。不支持使用 AWS CloudWatch SDK 并将其指向 CW 代理。

要使用 StatsD 或 CollectD,您只需按照该特定工具的文档进行操作即可。然后 CloudWatch 为我在上面链接的 CloudWatch 代理的接口提供一个适配器。这对于已经使用 StatsD 或 CollectD 进行自定义和应用程序指标的人来说通常很有用,但是在您的情况下这显然很痛苦,因为您必须加入其中一个或才能达到您想要的效果。

您可以在 /etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.d/ 目录中创建 CloudWatch 代理配置文件。

配置文件应该是这样的,

{
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "path_to_log_file/app1.log",
                        "log_group_name": "/app/custom.log",
                        "log_stream_name": "{instance_id}"
                    }
                ]
            }
        }
    }
}

重新启动 cw 代理将自动考虑此配置。

另一种方法是attach config files手动使用命令,

/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -m ec2 -s -c file:/path_to_json/custom_log.json

此日志组将在 CloudWatch Logs 控制台中可用。