AWS Elastic Load Balancing 建立訪問日誌


Amazon ELB (Elastic Load Balancing) 提供訪問日誌,捕獲有關發送到負載平衡器的詳細信息,每個紀錄會包含如接收請求的時間、客戶端的 IP 地址、延遲、請求路徑和服務器響應等信息,這些訪問日誌可用於分析流量或是解決安全和操作問題。

一開始建立完成 Amazon ELB 默認情況下是禁用的,必須要再手動啟用訪問日誌記錄以及指定到 Amazon S3 保留下訪問數據。

設定 Amazon S3

準備在 Amazon S3 建立 Buckets 儲存 ELB 訪問日誌記錄,在管理多個環境時,將日誌存儲在單獨的 S3 存儲桶中,以便輕鬆查找特定環境的日誌。

  • 打開 Amazon S3 控制台建立 Buckets,必須與 ELB 在相同區域

  • 修改 bucket policy 授予 ELB 寫入訪問日誌的權限,以下使用策略:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::elb-account-id:root"
          },
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::bucket-name/AWSLogs/your-aws-account-id/*"
        },
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "delivery.logs.amazonaws.com"
          },
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::bucket-name/AWSLogs/your-aws-account-id/*",
          "Condition": {
            "StringEquals": {
              "s3:x-amz-acl": "bucket-owner-full-control"
            }
          }
        },
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "delivery.logs.amazonaws.com"
          },
          "Action": "s3:GetBucketAcl",
          "Resource": "arn:aws:s3:::bucket-name"
        }
      ]
    }

    使用策略中所需要調整的屬性描述:

  • bucket-name:填入建立的 bucket 名稱

  • your-aws-account-id:填入 AWS 帳戶 ID,可以在帳戶設定中找到

  • elb-account-id:填入 ELB 所在區域的 ID

Region Region name Elastic Load Balancing account ID
us-east-1 US East (N. Virginia) 127311923021
us-east-2 US East (Ohio) 033677994240
us-west-1 US West (N. California) 027434742980
us-west-2 US West (Oregon) 797873946194
af-south-1 Africa (Cape Town) 098369216593
ca-central-1 Canada (Central) 985666609251
eu-central-1 Europe (Frankfurt) 054676820928
eu-west-1 Europe (Ireland) 156460612806
eu-west-2 Europe (London) 652711504416
eu-south-1 Europe (Milan) 635631232127
eu-west-3 Europe (Paris) 009996457667
eu-north-1 Europe (Stockholm) 897822967062
ap-east-1 Asia Pacific (Hong Kong) 754344448648
ap-northeast-1 Asia Pacific (Tokyo) 582318560864
ap-northeast-2 Asia Pacific (Seoul) 600734575887
ap-northeast-3 Asia Pacific (Osaka) 383597477331
ap-southeast-1 Asia Pacific (Singapore) 114774131450
ap-southeast-2 Asia Pacific (Sydney) 783225319266
ap-south-1 Asia Pacific (Mumbai) 718504428378
me-south-1 Middle East (Bahrain) 076674570225
sa-east-1 South America (São Paulo) 507241528517
us-gov-west-1* AWS GovCloud (US-West) 048591011584
us-gov-east-1* AWS GovCloud (US-East) 190560391635
cn-north-1* China (Beijing) 638102146993
cn-northwest-1* China (Ningxia) 037604701340

啟用 Amazon ELB 訪問日誌記錄

  • 打開 Amazon ELB 控制台選擇已經建立的 ELB 在 description 裡點選 Edit attributes

  • 點選啟用並填入 S3 Bucket 名稱

這樣就可以完成日誌的相關設定,在我們 Amazon ELB 運行了一段時間之後,所設定的 S3 Bucket 路徑中就可以找到收集的日誌資訊。

深入了解 ELB 日誌

Amazon ELB 會依照設定時間在每個時間段內生成一次日誌文件,以下是輸出檔案的文件格式:

bucket[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/yyyy/mm/dd/aws-account-idelasticloadbalancingregion_load-balancer-id_end-time_ip-address_random-string.log.gz

我們可以從日誌中收集所有使用者連線的資訊、主機檔案存取的紀錄,以下是日誌的內容:

h2 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 
10.0.1.252:48160 10.0.0.66:9000 0.000 0.002 0.000 200 200 5 257 
"GET https://10.0.2.105:773/ HTTP/2.0" "curl/7.46.0" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2
arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067
"Root=1-58337327-72bd00b0343d75b906739c42" "-" "-"
1 2018-07-02T22:22:48.364000Z "redirect" "https://example.com:80/" "-" 10.0.0.66:9000 200 "-" "-"

Amazon ELB 日誌包含非結構化數據,我們可以使用正則表達式將這些數據轉換 JSON 格式或者其他格式以便開發或是串接第三方平台,有關日誌每個字段的完整描述請參考 AWS 文檔

充分利用 ELB 日誌

了解日誌的格式後我們就可以專注於這些服務生成的日誌及其結構,並處理使用這些日誌的價值。

以下是些常用的案例:

  • 結合第三方工具如 PrometheusCoralogix 這些強大的軟體做數據視覺化分析
  • 使用 Amazon CloudWatch 分析數據中異常的警報
  • SaaS 服務商統計業務流量