如何使用B读取AWS状态检查报警信息

2024-10-02 08:25:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我将python与boto api一起用于:

  1. 创建sns、sqs,并向sns订阅sqs队列。在
  2. 连接到cloudwatch,并为“StatusCheckFailed”度量创建警报。在
  3. 使用put_metric_alarm启动报警监视和通知。在

我启动了我自己的一个AMI,它将模拟StatusCheckFailed条件。 如果我转到AWS控制台>;SQS,我可以看到我收到了警报通知。我也可以在AWS控制台中查看JSON格式的内容。在

当我使用python和SQS api时,我可以:

  1. 查找队列(q = sqs.lookup(queue_name)
  2. 获取消息(msg = q.read()
  3. 获取消息正文(b = message.get_body_encoded()
  4. 或者message.get_body()

结果不可读。在

  1. get_body_encoded得到一个不带分隔符的字符串。e、 g

    TypeNotificationMessageId02a8ce9dc21e55eaaeca83b5258563ffTopicArnarnawssnsuswest21888888879statuscheckalarm17122223479SubjectStatusCheckAlarmbadvmstatusalarminUSWest2MessageAlarmNamebadvmstatusalarmAlarmDescriptionstatuscheckfori50602c5abadvmAWSAccountId11233333333NewStateValueALARMNewStateReasonThresholdCross....`
    
  2. get_body使您无法阅读编码。

如何获得JSON格式的消息体,例如,AWS控制台的SQS部分显示的消息体?在


Tags: awsapijson消息messageget队列格式
2条回答

get_body()的结果返回一个JSON格式的字符串。在

我通过创建一个SQS队列和一个SNS通知主题来重新创建您的情况,将SQS队列订阅到SNS主题,然后创建一个将通知推送到SNS主题的警报。然后我触发了一个警报情况,并通过Python检索结果:

$ python
Python 2.6.9 (unknown, Sep 13 2014, 00:25:11) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto, boto.sqs
>>> from boto.sqs.message import Message
>>> q_conn = boto.sqs.connect_to_region("ap-southeast-2")
>>> q = q_conn.get_queue('bob')
>>> m = q.read(visibility_timeout=15)
>>> m.get_body()
u'{\n  "Type" : "Notification",\n  "MessageId" : "adcad528-680b-5b4f-88bd-98432f1bf252",\n  "TopicArn" : "arn:aws:sns:ap-southeast-2:123412341234:bob-topic",\n  "Subject" : "ALARM: \\"my-alarm-name\\" in APAC - Sydney",\n  "Message" : "{\\"AlarmName\\":\\"my-alarm-name\\",\\"AlarmDescription\\":\\"my-alarm-description\\",\\"AWSAccountId\\":\\"123412341234\\",\\"NewStateValue\\":\\"ALARM\\",\\"NewStateReason\\":\\"Threshold Crossed: 1 datapoint (1459.0) was greater than or equal to the threshold (0.0).\\",\\"StateChangeTime\\":\\"2015-01-11T00:33:20.013+0000\\",\\"Region\\":\\"APAC - Sydney\\",\\"OldStateValue\\":\\"INSUFFICIENT_DATA\\",\\"Trigger\\":{\\"MetricName\\":\\"NetworkIn\\",\\"Namespace\\":\\"AWS/EC2\\",\\"Statistic\\":\\"SUM\\",\\"Unit\\":null,\\"Dimensions\\":[{\\"name\\":\\"InstanceId\\",\\"value\\":\\"i-af41ec91\\"}],\\"Period\\":60,\\"EvaluationPeriods\\":1,\\"ComparisonOperator\\":\\"GreaterThanOrEqualToThreshold\\",\\"Threshold\\":0.0}}",\n  "Timestamp" : "2015-01-11T00:33:20.072Z",\n  "SignatureVersion" : "1",\n  "Signature" : "(removed)",\n  "SigningCertURL" : "(removed)",\n  "UnsubscribeURL" : "https://sns.ap-southeast-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:ap-southeast-2:123412341234:bob-topic:9bc1234c-1234-4995-927a-72b752866e5e"\n}'

get_body()的响应是一个包含JSON的字符串。这可以使用JSON库进行解析:

^{pr2}$

我在AWS论坛上读过类似的文章,它对我很有用。在

如果您知道消息将不会被base64编码,则可以更改从队列中读取消息的代码,使其不会尝试解码消息,如下所示: 平方英尺=boto.connect U sqs公司() 队列=sqs.get_队列('myqueue') 队列队列(boto.sqs.消息.RawMessage)

相关问题 更多 >

    热门问题