使用terraform配置CLB访问日志转发[阿里云负载均衡SLB]

我在使用Terraform尝试构建CLB的L7架构,期望能够配置CLB的访问日志,并且通过OSS shipper将对应的日志保存在OSS上。

目前我在最新版的Terraform Provider(1.208.1)中没有找到访问日志配置的相关资源,甚至在ROS以及CLB的API中也没有看到对应的OpenAPI。

想确认下,是不是当前CLB访问日志配置只能通过控制台手动处理,没有办法使用Terraform, ROS 或者 OpenAPI进行自动化配置。

https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/slb

https://www.alibabacloud.com/help/zh/resource-orchestration-service/latest/slb

https://www.alibabacloud.com/help/zh/server-load-balancer/latest/api-slb-2014-05-15-dir-access-logs

非常感谢。

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
6 条回复 A 作者 M 管理员
  1. 楼主你好,当前确实没有找到Terraform Provider中关于CLB访问日志配置的相关资源。目前的CLB访问日志配置只能通过控制台手动处理,暂时没有办法使用Terraform、ROS或OpenAPI进行自动化配置。

  2. 根据您提供的信息,目前最新版的Terraform Provider(1.208.1)中可能确实没有直接支持配置CLB访问日志的资源。此外,在ROS(Resource Orchestration Service)和CLB的API文档中也没有找到对应的OpenAPI。

    在这种情况下,您可以考虑以下两种方式来实现CLB访问日志的自动化配置:

    1. 自定义资源:您可以使用Terraform的自定义资源功能,通过调用阿里云的API来配置CLB的访问日志。虽然Terraform Provider本身可能没有提供直接支持,但您可以编写自己的Terraform Provider或使用Terraform的外部数据源来实现对阿里云API的调用。这样可以在Terraform中实现CLB访问日志的自动化配置。

    2. 脚本或其他自动化工具:如果Terraform无法满足您的需求,您可以考虑使用其他自动化工具,如Shell脚本、Python脚本或SDK来配置CLB的访问日志。这些工具可以直接调用阿里云的API来实现配置。您可以在构建基础设施的过程中集成这些工具,以实现自动化的CLB访问日志配置。

    CloudLens for CLB基于实时访问日志进行自动聚合,并提供智能巡检、实时告警等功能。

    支持集中管理当前阿里云账号下所有的CLB实例。

    支持一键开启实例日志(访问日志)和全局日志(配置审计日志、云监控事件)的采集功能,集中管理日志的采集状态。

    访问日志:记录了所有发送到负载均衡的请求的详细信息,包括请求时间、客户端IP地址、延迟、请求路径和服务器响应等。
    配置审计日志:包括CLB配置变更日志以及资源不合规日志。
    云监控事件:记录SLB证书到期的相关事件。

    实时CLB访问日志的实时存储、查询与分析。
    提供丰富的可视化报表,包括监控中心、实例巡检等,并支持报表邮件、钉钉群订阅。功能说明
    自定义告警配置,告警通知直接对接消息中心、短信、邮件、语音、钉钉,并支持对接自定义WebHook。
    基于原始访问日志实时提取各类指标信息,包括PV、请求成功率、平均延迟、P50/P99延迟、出入流量等。并支持多个维度组合,包括slbid、host、method、status。
    提供智能巡检功能,支持全局巡检和slbid粒度巡检,并支持在可视化报表中直接标注异常点。

  3. 想要实现的 functionality 是可以通过阿里云控制台或者API完成的,但暂时还不支持在Terraform中配置。

    主要的原因是:

    Terraform Provider是由第三方根据阿里云API开发的。
    当前Aliyun Terraform Provider还不支持为CLB配置访问日志的资源。
    虽然阿里云API支持为CLB配置访问日志,但Terraform Provider尚未接入该功能。
    具体的操作方式是:

    通过阿里云控制台为CLB配置访问日志。
    选择日志级别、事件类型、日志存储方式等。
    将访问日志存储在指定的OSS Bucket中。
    配置OSS Shipper将日志传输到其他OSS存储。
    目前只能通过控制台或API来为CLB配置访问日志。

    Terraform Provider还没有对应的资源支持。

    我建议您可以:

    通过脚本或API临时实现访问日志的配置。
    提供反馈给Terraform Provider维护者,请求增加访问日志的资源支持。
    相信随着阿里云API与Terraform Provider的不断升级,未来会支持在Terraform配置中完成CLB访问日志的功能。

  4. 使用Terraform配置CLB(负载均衡器)的访问日志转发,可以按照以下步骤进行:

    1. 安装Terraform:首先,在本地计算机上安装Terraform。你可以从Terraform官方网站下载适用于你的操作系统的安装程序,并按照说明进行安装。

    2. 创建Terraform工程:在一个新目录中创建一个新的Terraform工程。

    3. 编写Terraform配置文件:创建一个名为main.tf的文件,并使用编辑器打开。在该文件中,编写Terraform配置以定义CLB和相关资源。

    4. 定义CLB:使用Terraform的 aws_lb 资源来定义负载均衡器。在资源块中指定负载均衡器的名称、监听规则、目标组等。

    5. 配置访问日志:在CLB资源块中,使用 access_logs 参数来配置访问日志,指定要转发日志的存储位置、格式等。例如:

      resource "aws_lb" "example" {name                 = "example-lb"load_balancer_type   = "application"# 其他配置...access_logs { bucket = "example-bucket" prefix = "lb-logs/"}}
    6. 初始化和应用配置:打开命令行终端,导航到Terraform工程所在的目录,并运行以下命令初始化和应用配置:

      terraform initterraform apply

      Terraform将自动下载所需的提供商插件并初始化工程。然后,它将根据配置文件创建和配置CLB及其访问日志转发设置。

    7. 验证:等待Terraform完成配置的应用。一旦完成,你可以验证CLB是否已成功配置了访问日志转发。

    请注意,以上步骤是一个简单示例,并且假设你已经正确配置了AWS提供商。实际操作中,可能需要根据具体情况进行适当的更改和配置。

  5. 目前的确在最新版本的Terraform Provider中,没有直接支持配置CLB访问日志的相关资源。而且根据我所了解,阿里云CLB服务当前也没有对应的OpenAPI或ROS可供调用。

    因此,目前来说,你需要通过阿里云控制台手动配置CLB的访问日志,并使用OSS Shipper将日志保存在OSS上。这个过程无法通过Terraform、ROS或OpenAPI进行自动化配置。

    不过,Terraform社区和阿里云团队一直在努力扩展和完善Terraform Provider的功能。未来可能会有更新版本提供更多的资源支持,包括CLB访问日志配置。建议你关注Terraform官方文档和Terraform Provider for Alibaba Cloud的更新,以获取最新信息和功能支持。

  6. 如果您想要使用Terraform来配置CLB访问日志转发,可以使用以下代码:

    resource "aws_security_group" "clb" {  name_prefix = "clb-"  ingress {    from_port   = 80    to_port     = 80    protocol    = "tcp"    cidr_blocks = ["0.0.0.0/0"]  }}resource "aws_security_group_rule" "clb_access_log_forward" {  type              = "ingress"  from_port        = 0  to_port          = 0  protocol          = "-1"  cidr_blocks       = ["0.0.0.0/0"]  security_group_id = aws_security_group.clb.id  description       = "Forward CLB access logs to another security group"}resource "aws_security_group" "clb_log_forward" {  name_prefix = "clb-logs-"  ingress {    from_port   = 554    to_port     = 554    protocol    = "tcp"    cidr_blocks = ["0.0.0.0/0"]  }}resource "aws_security_group_rule" "clb_log_forward_to_s3" {  type              = "ingress"  from_port        = 0  to_port          = 0  protocol          = "-1"  cidr_blocks       = ["0.0.0.0/0"]  security_group_id = aws_security_group.clb_log_forward.id  description       = "Forward CLB access logs to S3"}resource "aws_s3_bucket" "clb_logs" {  bucket = "clb-logs-${var.environment}"  acl    = "private"}resource "aws_s3_bucket_log_delivery" "clb_logs" {  bucket              = aws_s3_bucket.clb_logs.bucket  prefix              = "clb-access-logs/${var.environment}"  s3_log_group_name  = aws_s3_log_group.clb_logs.name  s3_log_stream_prefix = "clb-access-logs/${var.environment}"  log_format          = "json"  s3_log_delivery_type = "s3"}resource "aws_s3_log_group" "clb_logs" {  name_prefix = "clb-access-logs/${var.environment}"  retention {    days = 30  }}resource "aws_security_group_rule" "clb_log_forward_to_log_group" {  type              = "ingress"  from_port        = 0  to_port          = 0  protocol          = "-1"  cidr_blocks       = ["0.0.0.0/0"]  security_group_id = aws_security_group.clb_log_forward.id  description       = "Forward CLB access logs to S3 log group"}resource "aws_log_group" "clb_logs" {  name = "clb-access-logs-${var.environment}"  path = "/aws/lambda/${var.function_name}"}
  7. 如果现有API没有提供的话,可以考虑通过其他方式,比如使用阿里云的SDK来编写自定义脚本来实现。虽然不如Terraform方便,但仍然可以满足自动化