ALB访问日志写到opensearch


将 Amazon Load Balancer (ALB) 的访问日志写入 OpenSearch (此前被称为 Amazon Elasticsearch) 可以让你对负载均衡器的流量进行详细分析。以下是一种常见的方法来实现这一需求:

  1. 启用 ALB 访问日志:
    首先,确保你已经在 ALB 中启用了访问日志,并将它们保存到 Amazon S3。

  2. 创建 AWS Lambda 函数:
    创建一个 Lambda 函数,用于从 S3 中读取 ALB 的访问日志并将其写入到 OpenSearch 服务。

    • 使用IAM角色为Lambda赋予以下权限:

      • 读取ALB的S3存储桶
      • 写入OpenSearch集群
    • 示例代码(使用 Python):

      import boto3
      import requests
      from requests_aws4auth import AWS4Auth
      
      region = 'your-region'
      service = 'es'
      opensearch_endpoint = 'https://your-opensearch-endpoint'
      
      credentials = boto3.Session().get_credentials()
      awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
      
      def lambda_handler(event, context):
          for record in event['Records']:
              s3_bucket = record['s3']['bucket']['name']
              s3_key = record['s3']['object']['key']
      
              s3_client = boto3.client('s3')
              resp = s3_client.get_object(Bucket=s3_bucket, Key=s3_key)
              log_data = resp['Body'].read().decode('utf-8')
              
              # 这里可以进行日志的解析和转换
              
              headers = { "Content-Type": "application/json" }
              url = opensearch_endpoint + '/your-index-name/your-doc-type'
              r = requests.post(url, auth=awsauth, data=log_data, headers=headers)
      
              print(r.text)
      
  3. 设置 S3 事件触发器:
    在存储 ALB 访问日志的 S3 存储桶上设置一个事件触发器,使其在新日志文件上传时自动调用上面创建的 Lambda 函数。

  4. 优化和错误处理:
    请记住,上述代码只是一个基本的示例。在实际使用中,你可能需要进行日志的解析、批量处理、错误处理等额外操作。

  5. 监控:
    使用 AWS CloudWatch 监控 Lambda 函数和 OpenSearch 集群,确保数据正常流转且无异常。

这样,每次 ALB 产生访问日志并保存到 S3 时,Lambda 函数都会被触发,将这些日志数据写入到 OpenSearch 中,供你进行进一步的查询和分析。


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