使用 cdk 列出所有日志组

List all LogGroups using cdk

我是 CDK 的新手,但我正在通过 CDK 向我的 CloudWatch 仪表板添加一个 LogQueryWidget,我需要一种方法来将所有以查询后缀结尾的日志组添加到查询中。

有没有一种方法可以遍历所有现有的日志组并找到具有正确后缀的日志组,或者有一种方法可以搜索日志组。

const queryWidget = new LogQueryWidget({
    title: "Error Rate",
    logGroupNames: ['/aws/lambda/someLogGroup'],
    view: LogQueryVisualizationType.TABLE,
    queryLines: [
        'fields @message',
        'filter @message like /(?i)error/'
    ],
  })

我是否可以添加它,以便 logGroupNames 包含所有以特定后缀结尾的日志组?

如果不使用定期更新日志查询的 AWS lambda 之类的东西,您不能动态地执行此操作(即,如果您添加一个新的日志组,查询将自动调整,您不能使这项工作正常进行)。

但是,由于 CDK 只是一个代码,没有什么可以阻止您在代码中调用 AWS SDK API 来检索所有日志组(参见 https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatchLogs.html#describeLogGroups-property)然后填充logGroupNames相应地。

这样,当 CDK 编译时,它会调用 API 来获取 LogGroups,然后生成的 CloudFormation 将包含您需要的日志组。请注意,此列表只会在您重新综合并重新部署堆栈时更新。

最后,请注意您可以使用 Log Insights 查询的日志组数量是有限制的(根据 https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html 是 20 个)。

如果您想实现这一点,您可以使用 AwsCustomResource 和 AwsSdkCall 类 创建自定义资源来执行 AWS SDK API 调用(如上文@Tofig 所述)作为部署。您也可以从 API 调用响应中读取数据并根据需要对其进行操作。