cloudwatch metics写到OpenSearch


要将 AWS CloudWatch Metrics 数据写入 Amazon OpenSearch Service,以下是步骤和示例代码:

1. 准备工作:

设置 IAM 权限:

  • 为 Lambda 函数创建一个 IAM 角色,该角色需要有读取 CloudWatch Metrics 的权限和写入 OpenSearch 的权限。

2. Lambda 函数设置:

首先,为您的 Lambda 函数设置以下环境变量:

  • ELASTICSEARCH_ENDPOINT: 您的 OpenSearch 域的 URL。
  • METRIC_NAMESPACE: 要从 CloudWatch 检索的指标的命名空间,例如 AWS/EC2
  • METRIC_NAME: 要从 CloudWatch 检索的指标的名称,例如 CPUUtilization

3. Lambda 函数代码 (Python):

import boto3
import json
import requests
import os

cloudwatch = boto3.client('cloudwatch')
elasticsearch_endpoint = os.environ['ELASTICSEARCH_ENDPOINT']

headers = {
    "Content-Type": "application/json"
}

def get_cloudwatch_metric(namespace, metric_name):
    response = cloudwatch.get_metric_data(
        MetricDataQueries=[
            {
                'Id': 'm1',
                'MetricStat': {
                    'Metric': {
                        'Namespace': namespace,
                        'MetricName': metric_name,
                    },
                    'Period': 300,
                    'Stat': 'Average',
                },
                'ReturnData': True,
            },
        ],
        StartTime='2023-01-01T00:00:00Z',
        EndTime='2023-01-02T00:00:00Z'
    )
    
    return response['MetricDataResults']

def lambda_handler(event, context):
    namespace = os.environ['METRIC_NAMESPACE']
    metric_name = os.environ['METRIC_NAME']
    metric_data = get_cloudwatch_metric(namespace, metric_name)

    for data_point in metric_data[0]['Timestamps']:
        payload = {
            "metricName": metric_name,
            "namespace": namespace,
            "timestamp": str(data_point),
            "value": metric_data[0]['Values'][0]
        }
        
        response = requests.post(f"{elasticsearch_endpoint}/cloudwatch-metrics/data", headers=headers, data=json.dumps(payload))
        
        if response.status_code != 201:
            print(f"Failed to insert into Elasticsearch: {response.text}")

    return {
        'statusCode': 200,
        'body': json.dumps('Done!')
    }

4. 优化和注意事项:

  • 代码中对数据的处理是为了示例而简化的,您可能需要根据从 CloudWatch 获取的实际指标数据进行调整。
  • StartTimeEndTime 在此示例中是硬编码的。您可能需要动态计算这些时间来适应实际需求。

5. 启动和监控:

设置 CloudWatch Events 或 EventBridge 触发器,使 Lambda 函数周期性地运行。为 Lambda 函数设置适当的 CloudWatch Alarms,以确保出现问题时能够及时接收通知。


文章作者: AWS Learner
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AWS Learner !
评论
  目录