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-id
elasticloadbalancingregion
_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 日誌
了解日誌的格式後我們就可以專注於這些服務生成的日誌及其結構,並處理使用這些日誌的價值。
以下是些常用的案例:
- 結合第三方工具如 Prometheus、Coralogix 這些強大的軟體做數據視覺化分析
- 使用 Amazon CloudWatch 分析數據中異常的警報
- SaaS 服務商統計業務流量