首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Alarm获取CloudWatch警报状态

使用Alarm获取CloudWatch警报状态
EN

Stack Overflow用户
提问于 2022-11-18 15:33:43
回答 2查看 52关注 0票数 0

我已经更新了我的原始帖子,因为我已经得到了一些进一步,并有我的CW警报部分的查询,我的代码工作。下面的输出状态的CW警报在控制台,并以我想要的格式。我现在要做的是将输出作为文本文件上传到S3桶中。这个是可能的吗?

CW报警码

代码语言:javascript
复制
import { CloudWatchClient, DescribeAlarmsCommand } from "@aws-sdk/client-cloudwatch";
const REGION = "eu-west-2";

const cwclient = new CloudWatchClient({ region: REGION });

export const handler = async() => {
  
const cwparams = {};
const cw = new DescribeAlarmsCommand(cwparams);

try {
  const cwdata = await cwclient.send(cw);
  cwdata.MetricAlarms.forEach(function (item) {
      console.log('\n%j', {alarmname:item.AlarmName,alarmstate:item.StateValue});
    });
  
} catch (error) {

  }
};

输出

代码语言:javascript
复制
Function Logs
START RequestId: xxxxxxxxxxxxxxxxxxx Version: $LATEST
2022-11-30T09:48:34.655Z    xxxxxxxxxxxxxxxxxxx INFO    
{"alarmname":"my-alarm-1","alarmstate":"OK"}
2022-11-30T09:48:34.655Z    xxxxxxxxxxxxxxxxxxx INFO    
{"alarmname":"my-alarm-2","alarmstate":"OK"}
END RequestId: xxxxxxxxxxxxxxxxxxx

我已经查看了s3 PutObjectCommand的sdk,并测试了下面的内容,它允许我上传一个包含一些文本内容的文件,但我不知道如何将CW警报数据与这段代码结合起来,这样文本文件的“主体”就是我的CW警报数据。

S3码

代码语言:javascript
复制
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

export const handler = async() => {

const bucketName = "mybucket";
const keyName = "test.json";

const s3 = new S3Client({});

const s3putCommand = new PutObjectCommand({
  Bucket: bucketName,
  Key: keyName,
  Body: "Hello"  // I would like this to be my CW Alarm data
});

try {
    await s3.send(s3putCommand);
    console.log('Successfully uploaded data to ' + bucketName + '/' + keyName);
  
} catch (error) {
  
  }
};

输出

代码语言:javascript
复制
Function Logs
START RequestId: xxxxxxxxxxxxxxxxxxx Version: $LATEST
2022-11-30T09:56:45.585Z    xxxxxxxxxxxxxxxxxxx INFO    Successfully uploaded data to mybucket/test.json
END RequestId: xxxxxxxxxxxxxxxxxxx

我的目标是使test.json文件看起来如下所示:

代码语言:javascript
复制
{"alarmname":"my-alarm-1","alarmstate":"OK"} {"alarmname":"my-alarm-2","alarmstate":"OK"}

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-12-02 08:26:09

在一位同事的帮助下,我找到了答案。只要在lambda函数中,索引文件名为"index.mjs“

代码语言:javascript
复制
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { CloudWatchClient, DescribeAlarmsCommand } from "@aws-sdk/client-cloudwatch";
import { Upload } from "@aws-sdk/lib-storage";

const REGION = "eu-west-2";
const cwclient = new CloudWatchClient({ region: REGION });

export const handler = async () => {
  const cwparams = {};
  const cw = new DescribeAlarmsCommand(cwparams);
  const alarmData = [];
  const bucketName = "mybucket";
  const keyName = "test.json";

  const s3 = new S3Client({});

  try {
    const cwdata = await cwclient.send(cw);
    cwdata.MetricAlarms.forEach(function (item) {
      alarmData.push({
        alarmname: item.AlarmName,
        alarmstate: item.StateValue,
      });
    });
  } catch (error) {}

  const s3putCommand = new Upload({
    client: s3,
    params: {
      Bucket: bucketName,
      Key: keyName,
      Body: JSON.stringify(alarmData),
    },
  });

  try {
    const data = await s3putCommand.done();
    console.log(data);
  } catch (error) {
    console.log(error);
  }
};
票数 0
EN

Stack Overflow用户

发布于 2022-11-18 15:42:12

您正在为JavaScript使用过时的AWS。有关最新推荐的SDK,请参阅新的AWS代码库

URL是:

https://docs.aws.amazon.com/code-library/latest/ug/javascript_3_cloudwatch_code_examples.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74491956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档