用于aws cloudwatch度量的异步(和同步)python客户端
cloudwatch-metrics-client的Python项目详细描述
CloudWatch Metrics客户端
使用asyncio的python cloudwatch metrics客户端库(以及sync variant)
这是另一个python cloudwatch客户端。虽然有其他选择,但它们是 不支持异步或不主动维护。
https://github.com/awslabs/cloudwatch-fluent-metrics
https://github.com/peterdemin/awsme
不过,客户机会收集您提供给它的任何指标,并定期向cloudwatch报告 您也可以将其用于特别报告
注意:aioboto3不在需求中,以防您只需要同步版本。如果在Python3.6下运行,您将 还需要异步发电机=1.10
用法:
importasynciofromcloudwatch_metrics_client.aiocloudwatchimportCloudWatchAsyncMetrics,CloudWatchAsyncMetricReporterasyncdefsetup():reporter=CloudWatchAsyncMetricReporter(report_interval=REPORTINTERVAL)# secondsCloudWatchAsyncMetrics.with_namespace('<YOUR NAMESPACE').with_reporter(reporter)# .with_client(aioboto3_cloudwatch_client) is you're not happy with default clientawaitreporter.run()@CloudWatchAsyncMetrics.monitored_taskasyncdefprocess_request(request):# processing logic...## request_type = ... # request_specific_data = # Set details on monitored callCloudWatchAsyncMetrics\ .with_monitored_dimension('TypeOfRequest',request_type)\ .with_monitored_dimension('SpecificAttribute',request_specific_data)# Put particular metricawaitCloudWatchAsyncMetrics.put_metric(MetricName='particular-metric-name',Unit='Count',Dimensions={'Kind':'metric-kind','Sort':'metric-sort'},Value=value)# Record statistical valueawaitCloudWatchAsyncMetrics.put_statistic(MetricName='particular-metric-name',Unit='Count',Dimensions={'Kind':'metric-kind','Sort':'metric-sort'},Value=value# Elapsed time will be recorded
在内部数据结构中记录协同程序每次调用的经过时间并聚合
统计数据将定期发送给cloudwatch。
可以使用put_metric
调用收集单个度量值-它们也将存储一段时间,然后发送
去看云表。put_metric
保留每个唯一值,并发送它们的列表以及每个值的出现次数
值,put_statistics
仅通过一系列指标发送聚合数据-sum、samplecount、min和max
(详见https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cloudwatch.html#CloudWatch.Client.put_metric_data)
报告器具有用于刷新尚未发送到CloudWatch的度量数据的异步flush
方法。如果定期报告没有
需要时,只要不调用run
coro,而是在需要报告度量时调用flush
。
同步版本以同样的方式工作,它使用单独的线程进行报告。
fromcloudwatch_metrics_client.cloudwatchimportCloudWatchSyncMetrics,CloudWatchSyncMetricReporterdefsetup():reporter=CloudWatchSyncMetricReporter(report_interval=REPORTINTERVAL)# secondsCloudWatchSyncMetrics.with_namespace('<YOUR NAMESPACE').with_reporter(reporter)reporter.run()@CloudWatchSyncMetrics.monitored_taskdefprocess_request(request):# Same here, but with CloudWatchSync*