Python boto3模块的CloldWatch客户端

Python boto3模块的CloldWatch客户端,python,amazon-web-services,datetime,boto3,amazon-cloudwatch-metrics,Python,Amazon Web Services,Datetime,Boto3,Amazon Cloudwatch Metrics,我们已经编写了一个函数来获取ec2实例的cpuUutilization度量,但是我得到的错误是“datetime.datetime(2020,3,11,12,3,tzinfo=tzlocal())不是JSON序列化的 “: 我们使用的格式与boto3文档中所述的格式相同,但仍然存在错误。如果有人有boto3的cloudwatch客户端的经验。需要帮助。您的代码片段可以正常工作。我刚刚将其更改为实例id。下面是示例输出 Response { "errorType": "TypeError"

我们已经编写了一个函数来获取ec2实例的cpuUutilization度量,但是我得到的错误是“datetime.datetime(2020,3,11,12,3,tzinfo=tzlocal())不是JSON序列化的 “:


我们使用的格式与boto3文档中所述的格式相同,但仍然存在错误。如果有人有boto3的cloudwatch客户端的经验。需要帮助。

您的代码片段可以正常工作。我刚刚将其更改为实例id。下面是示例输出

Response
{
    "errorType": "TypeError",
    "errorMessage": "datetime.datetime(2020, 3, 11, 12, 3, tzinfo=tzlocal()) is not JSON serializable",
    "stackTrace": [
        "  File \"/var/lang/lib/python3.6/json/__init__.py\", line 238, in dumps\n    **kw).encode(obj)\n",
        "  File \"/var/lang/lib/python3.6/json/encoder.py\", line 199, in encode\n    chunks = self.iterencode(o, _one_shot=True)\n",
        "  File \"/var/lang/lib/python3.6/json/encoder.py\", line 257, in iterencode\n    return _iterencode(o, 0)\n",
        "  File \"/var/runtime/awslambda/bootstrap.py\", line 149, in decimal_serializer\n    raise TypeError(repr(o) + \" is not JSON serializable\")\n"
    ]
}

Function Logs
An error occurred during JSON serialization of response: datetime.datetime(2020, 3, 11, 12, 3, tzinfo=tzlocal()) is not JSON serializable
Traceback (most recent call last):
  File "/var/lang/lib/python3.6/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/var/lang/lib/python3.6/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/var/lang/lib/python3.6/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/var/runtime/awslambda/bootstrap.py", line 149, in decimal_serializer
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2020, 3, 11, 12, 3, tzinfo=tzlocal()) is not JSON serializable

Request ID
057aa5a4-74f6-1881-a024-74f6c2134125

我的代码:

{
   "Label":"CPUUtilization",
   "Datapoints":[
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         6,
         2,
         "tzinfo=tzutc())",
         "Average":0.06612021857923481,
         "Maximum":0.166666666666666,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         32,
         "tzinfo=tzutc())",
         "Average":0.112052730696798,
         "Maximum":0.169491525423728,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         6,
         7,
         "tzinfo=tzutc())",
         "Average":0.0672316384180794,
         "Maximum":0.169491525423731,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         37,
         "tzinfo=tzutc())",
         "Average":0.06668519033064779,
         "Maximum":0.169491525423728,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         6,
         12,
         "tzinfo=tzutc())",
         "Average":0.06559139784946219,
         "Maximum":0.166666666666666,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         42,
         "tzinfo=tzutc())",
         "Average":0.06612021857923481,
         "Maximum":0.166666666666666,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         47,
         "tzinfo=tzutc())",
         "Average":0.09890710382513698,
         "Maximum":0.166666666666666,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         52,
         "tzinfo=tzutc())",
         "Average":0.0344827586206896,
         "Maximum":0.172413793103448,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         57,
         "tzinfo=tzutc())",
         "Average":0.1328054089098826,
         "Maximum":0.169491525423728,
         "Unit":"Percent"
      }
   ],
   "ResponseMetadata":{
      "RequestId":"f69967e9-be32-49eb-8442-f06000e7e842",
      "HTTPStatusCode":200,
      "HTTPHeaders":{
         "x-amzn-requestid":"f69967e9-be32-49eb-8442-f06000e7e842",
         "content-type":"text/xml",
         "content-length":"2185",
         "vary":"accept-encoding",
         "date":"Thu, 12 Mar 2020 06:19:39 GMT"
      },
      "RetryAttempts":0
   }
}

问题不在于您的boto代码,而在于您正在从lambda返回响应。响应不可序列化


为什么需要lambda返回响应?让lambda执行它需要执行的操作,并返回“OK”或类似的内容。

无法重现该问题。你使用什么python版本?我使用的是python 3.6。您是否使用过boto3模块的cloudwatch客户端?是的。但现在我只是用我的实例检查了你的代码。没有发现问题。它是否提供数据点?你能发布你的代码和回复吗?您正在使用哪个IDE?我正在尝试使用cloud9。是的。这是一个示例输出:您可以发布代码吗?因为我没有得到我正在使用的上述代码的输出。@papali我添加了代码。我需要为自己使用自定义会话,但调用
get\u metric\u statistics
的调用是相同的。这是因为我正在使用办公室网络访问Lambda函数吗?你为什么要自己使用自定义会话?@papali我不知道,但你调用
获取度量统计数据
是正确的。一定发生了其他事情。每当我给出timedelta(minute=2)时,数据点就会出现[]。但是,如果给定timedelta(分钟=60),则上述错误是抛出的。您能解释一下您所说的吗?实际上,我们想要构建一个仪表板应用程序,它将具有:-按成本中心的每月成本趋势(最长1年)。按使用类型的每月成本趋势(最长1年)-EC2、S3、RDS等。通常有20多种使用类型。按成本中心、按使用类型的当月消耗量。预计当月使用率相同。将其与上个月的值进行比较。能够深入到服务器级信息。可以查看GetMetricWidgetImage API。您可以直接从CloudWatch获取图形,而无需获取数据,图形由您自己绘制。
{
   "Label":"CPUUtilization",
   "Datapoints":[
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         6,
         2,
         "tzinfo=tzutc())",
         "Average":0.06612021857923481,
         "Maximum":0.166666666666666,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         32,
         "tzinfo=tzutc())",
         "Average":0.112052730696798,
         "Maximum":0.169491525423728,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         6,
         7,
         "tzinfo=tzutc())",
         "Average":0.0672316384180794,
         "Maximum":0.169491525423731,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         37,
         "tzinfo=tzutc())",
         "Average":0.06668519033064779,
         "Maximum":0.169491525423728,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         6,
         12,
         "tzinfo=tzutc())",
         "Average":0.06559139784946219,
         "Maximum":0.166666666666666,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         42,
         "tzinfo=tzutc())",
         "Average":0.06612021857923481,
         "Maximum":0.166666666666666,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         47,
         "tzinfo=tzutc())",
         "Average":0.09890710382513698,
         "Maximum":0.166666666666666,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         52,
         "tzinfo=tzutc())",
         "Average":0.0344827586206896,
         "Maximum":0.172413793103448,
         "Unit":"Percent"
      },
      {
         "Timestamp":datetime.datetime(2020,
         3,
         12,
         5,
         57,
         "tzinfo=tzutc())",
         "Average":0.1328054089098826,
         "Maximum":0.169491525423728,
         "Unit":"Percent"
      }
   ],
   "ResponseMetadata":{
      "RequestId":"f69967e9-be32-49eb-8442-f06000e7e842",
      "HTTPStatusCode":200,
      "HTTPHeaders":{
         "x-amzn-requestid":"f69967e9-be32-49eb-8442-f06000e7e842",
         "content-type":"text/xml",
         "content-length":"2185",
         "vary":"accept-encoding",
         "date":"Thu, 12 Mar 2020 06:19:39 GMT"
      },
      "RetryAttempts":0
   }
}
import boto3
from datetime import timedelta
from datetime import datetime

dev = boto3.session.Session(profile_name='la')

cloudwatch = dev.client('cloudwatch', region_name='us-east-1')


response = cloudwatch.get_metric_statistics(
    Namespace='AWS/EC2',
    MetricName='CPUUtilization',
    Dimensions=[
        {
            'Name': 'InstanceId',
            'Value': 'i-0b2762b6610c73e02'
        },
    ],
    StartTime=datetime.utcnow() - timedelta(minutes = 60),
    EndTime=datetime.utcnow(),
    Period=300,
    Statistics=['Average', 'Maximum'],
    Unit='Percent'
)

print(response)