You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义AWS Chatbot的Slack告警链接跳转至CloudWatch日志

AWS Chatbot自定义Slack推送消息跳转链接方案

现有实现与问题

当前已打通的告警通知链路如下:

  • 生产环境Lambda函数针对5xx、4xx错误配置CloudWatch告警
  • 告警触发后推送消息到SNS主题
  • AWS Chatbot读取SNS消息转发到指定Slack渠道
    当前链路可正常运行,但存在不符合需求的点:Chatbot推送的Slack消息默认附带的跳转链接固定指向CloudWatch告警页面,无法直接跳转至对应指标关联的CloudWatch日志页面,需要实现自定义链接,点击后直接定位到对应日志。

现有CDK栈实现代码如下:

export class CdkStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Lambda
    const helloworldFn = new lambda.Function(this, "sample-lambda", {
      code: new lambda.AssetCode("./lib/lambda"),
      handler: "hello-world.handler",
      runtime: lambda.Runtime.NODEJS_14_X,
    });

    // Lambda Log Group setting
    const metricFilter = helloworldFn.logGroup.addMetricFilter(
      "Keyword Filter",
      {
        metricNamespace: "chatbot-sample",
        metricName: "filter-by-keyword",
        filterPattern: { logPatternString: "\"HELLO, Slack!\"" },
      }
    );

    // Chatbot Role & Policy
    const chatbotRole = new iam.Role(this, "chatbot-role", {
      roleName: "chatbot-sample-role",
      assumedBy: new iam.ServicePrincipal("sns.amazonaws.com"),
    });

    chatbotRole.addToPolicy(
      new iam.PolicyStatement({
        resources: ["*"],
        actions: [
          "cloudwatch:Describe*",
          "cloudwatch:Get*",
          "cloudwatch:List*",
        ],
      })
    );

    // SNS TOPIC
    const topic = new sns.Topic(this, "notification-topic", {
      displayName: "ChatbotNotificationTopic",
      topicName: "ChatbotNotificationTopic",
    });

    const alarm = new cloudwatch.Alarm(this, "Alarm", {
      metric: metricFilter.metric(),
      actionsEnabled: true,
      threshold: 0,
      evaluationPeriods: 5,
      datapointsToAlarm: 1,
      comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
    });

    // 指定告警通知目标SNS
    const action = new cwactions.SnsAction(topic);

    alarm.addAlarmAction(action);

    // Chatbot Slack通知配置
    const bot = new chatbot.SlackChannelConfiguration(
      this,
      "sample-slack-notification",
      {
        slackChannelConfigurationName: 'amplify-github-jatin-notifications',
        slackWorkspaceId: 'xxxxxx',
        slackChannelId: 'xxxxxx',
        notificationTopics: [topic],
      }
    );
  }
}

实现方案

AWS Chatbot没有提供直接修改默认告警消息内置跳转链接的配置项,要实现自定义跳转,需要在原有链路中增加一层消息转换逻辑,具体操作如下:

  • 调整告警通知链路:不要将CloudWatch告警直接发送给Chatbot绑定的SNS主题,先把告警推送到独立的中转SNS主题,触发专门做消息格式转换的Lambda函数
  • 在消息转换Lambda中完成自定义消息拼装:
    • 解析CloudWatch告警推送的原始payload,提取关联的Lambda标识、告警触发时间、告警级别、错误指标等核心字段
    • 手动拼接目标CloudWatch日志页面的访问地址,可直接带上日志组、时间范围、过滤关键词参数,点击即可直接定位到告警触发时段的对应错误日志
    • 按照Chatbot支持的消息格式组装内容,可以按需添加文本、跳转按钮,不需要保留默认的告警页链接
  • 将组装完成的自定义消息发送到Chatbot绑定的SNS主题,Chatbot会直接按照自定义内容推送到Slack渠道

现有代码需要修正的问题

  • 当前Chatbot角色的信任策略配置错误,assumedBy配置的是sns.amazonaws.com,需要修改为chatbot.amazonaws.com,否则Chatbot无法正常获取SNS消息、调用CloudWatch相关接口
  • 需要给消息转换Lambda配置对应权限:允许接收中转SNS主题的触发事件、允许向Chatbot绑定的SNS主题发布消息、允许读取CloudWatch告警和日志的元数据
  • 原CloudWatch告警的通知动作需要从中转SNS触发,不要直接对接Chatbot绑定的SNS

提示:自定义消息时可以配置多个交互按钮,分别放置「查看告警详情」「查看关联日志」等不同跳转入口,使用体验比单一链接更好。

内容的提问来源于stack exchange,提问作者Jatin Mehrotra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:15:35