在 cloudwatch 代理配置中添加自定义变量

use*_*mda 6 environment-variables amazon-ec2 amazon-cloudwatch aws-regions

我有以下配置作为我的 EC2 实例的用户数据的一部分生成

{
        "agent": {
                        "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                        "collect_list": [
                                {
                                "file_path": "/var/log/hapee-2.0/lb-access*",
                                "log_group_name" : <insert-region-here>
                                "log_stream_name": "haproxy-{instance_id}"
                                }
                        ]
                }
                }
        },
       "metrics": {
                "metrics_collected": {
                    "net": {
                    "measurement": [
                        "net_packets_recv",
                    "net_packets_sent"
                    ],
                    "metrics_collection_interval": 60
                },
                "mem": {
                        "measurement": [
                                "used_percent"
                        ]
                }
        }

        }
} 
Run Code Online (Sandbox Code Playgroud)

因为log_group_name我希望能够附加region实例正在运行的内容。我知道该区域是实例元数据的一部分,但我可以在 cloudwatch 配置中使用它吗?

ash*_*ium 0

根据CloudWatch Agent Configuration File Details上的文档,它可以在参数中直接解释的变量logs.log_stream_name是:{instance_id}{hostname}{local_hostname}{ip_address}

由于 CloudWatch 日志是特定于区域的,因此我假设您正在执行一些跨区域仪表板或日志传送(否则,在日志流中包含区域值将是多余的)。

通过任意数量的模板引擎生成配置 json 文件可能是添加 CloudWatch 代理的配置变量不直接支持的自定义变量值的最佳方法。我们在 CI/CD 管道中执行此操作,同时通过 Terraform 的templatefile函数创建实例(然后通过 cloud-init 用户数据写入实例),但是对于您碰巧使用的任何编程或配置语言,都有许多流行的模板引擎使用。