通過阿里雲Function Compute服務,將阿里雲CDN產生的離線日誌自動、定期地轉存到Object Storage Service中,以實現日誌的長期歸檔和分析。
背景資訊
阿里雲CDN為您的加速網域名稱提供詳細的訪問日誌,這些離線日誌是進行使用者行為分析、服務問題排查和營運資料統計的重要依據。根據阿里雲CDN的服務策略,離線記錄檔在阿里雲CDN伺服器上僅保留30天,超過該期限後將被自動清理。
為了滿足資料合規、長期審計或歷史資料回溯等需求,您可能需要對這些日誌進行永久性儲存。Object Storage Service提供了高可用、低成本且可持久化的儲存方案,是日誌資料長期歸檔的理想選擇。Function Compute用於監聽產生阿里雲CDN日誌的事件,並且調用任務函數將阿里雲CDN的離線日誌轉存到Object Storage Service中。通過本方案,您可以搭建一個自動化的工作流程,將阿里雲CDN日誌無縫轉存至您Object Storage Service Bucket中。
執行邏輯
整個自動化轉存方案的核心是利用Function Compute作為“調度器”和“搬運工”,串連阿里雲CDN和Object Storage Service。其工作流程如下:
-
事件觸發:在Function Compute中設定一個觸發器,每當阿里雲CDN產生日誌的時候,都會觸發該觸發器。
-
函數執行:事件觸發程序被觸發後,會自動執行關聯的函數代碼。
-
拉取日誌:函數代碼會根據當前日期計算出需要拉取的前一天的記錄檔名,並產生阿里雲CDN離線日誌的下載地址。隨後,函數向該地址發起請求,下載記錄檔到Function Compute的臨時環境中。
-
轉存Object Storage Service:函數成功下載記錄檔後,會調用Object Storage Service的API,將該檔案上傳到您指定的Object Storage Service Bucket中的指定目錄下。
整個過程全自動執行,深度整合阿里雲CDN、Function Compute、Object Storage Service三項阿里雲服務,提高雲上管理服務的效率。
計費說明
本方案涉及以下產品的計費,請您關註:
-
阿里雲CDN:阿里雲CDN產生和提供離線日誌下載的功能免費。
-
Function Compute:Function Compute會根據函數執行次數、消耗的資源(vCPU和記憶體)以及執行時間長度等進行計費。對於每日僅執行少量幾次的輕量級日誌轉存任務,費用通常極低。詳情請參見Function Compute計費概述。
-
Object Storage Service:Object Storage Service會根據您佔用的儲存空間、API請求次數以及可能產生的外網流出流量進行計費。詳情請參見Object Storage Service計費概述。
前提條件
-
請確保您的阿里雲CDN服務、Function Compute服務以及Object Storage Service服務均在同一個阿里雲帳號下開通,保證服務間授權和順利訪問。
-
參考建立儲存空間,提前在Object Storage Service中建立一個用於存放記錄檔的Bucket,並記錄好Bucket儲存空間名稱、外網訪問的Endpoint值、存放記錄檔的目錄名稱。
配置步驟
1. 擷取Bucket配置
在Function Compute中建立任務函數的時候,需要填寫儲存日誌的Object Storage Service資訊,因此,需要提前準備好Bucket儲存空間名稱、外網訪問的Endpoint值、存放記錄檔的目錄名稱資訊。請參考以下步驟擷取相應的資訊:
2. 建立Function Compute任務
本自動化轉存方案的核心是利用Function Compute作為“調度器”和“搬運工”,因此需要在Function Compute中配置對應觸發器和任務函數。
-
進入Function Compute3.0控制台,在左側導覽列選擇函數。
-
在函數頁簽中,點擊建立函數,選擇事件函數,點擊建立事件函數。
-
建立事件函數時 只需配置 影響函數正常執行的關鍵參數。
-
基礎配置-函数名称:後續操作需要使用該函數名(推薦使用
cdn-log-dump)。 -
函數代碼-運行環境:任務函數是Python代碼,所以此處選擇內建運行時、Python、Python 3.10。
-
更多配置-環境變數:任務函數中需要擷取儲存的Bucket資訊,因此需要在環境變數中傳入Bucket的配置資訊。建立三個環境變數並填入對應參數:
-
target_oss_bucket:Bucket儲存空間名稱 -
target_oss_endpoint:外網訪問的Endpoint值 -
target_oss_prefix:存放記錄檔的目錄名稱
樣本值:target_oss_bucket 填寫
demo-bucket,target_oss_endpoint 填寫oss-cn-hangzhou.aliyuncs.com,target_oss_prefix 填寫cdn_log。 -
-
-
參數配置完成之後,點擊创建即可完成函數的建立。
-
在函數詳情中,點擊進入觸發器頁簽,點擊建立觸發器。
-
按照以下指引,完成對觸發器關鍵參數的配置。點擊確定
-
觸發器類型:選擇CDN 同步調用。
-
名稱:填寫觸發器名稱(推薦使用
cdn-logs-triggers)。 -
觸發事件:選擇LogFileCreated。
-
域名:此處必須填寫同一個阿里雲帳號下並且正常啟動並執行阿里雲CDN加速網域名稱。
-
描述:填寫該觸發器的描述資訊(推薦使用:CDN離線記錄檔產生觸發器)。
-
角色名稱:選擇AliyunCDNEventNotificationRole。
-
-
在完成觸發器參數的配置之後,點擊确定。如果此時出現尚未建立 CDN 觸發器使用的預設角色的提示,點擊立即授權,根據指引完成預設角色的建立;如果沒有出現該提示,則直接完成觸發器的建立。
-
在函數詳情中,點擊進入代碼頁簽,在線上編譯器中,輸入下方的代碼(從阿里雲CDN拉取離線日誌,並且存入Object Storage Service中)。
-
點擊部署代碼,即可完成整個函數的配置。
3. 建立專屬角色和權限原則
Function Compute使用Object Storage Service的時候,需要具有訪問Object Storage Service的許可權。為了簡化授權流程,Function Compute支援關聯角色。按照以下步驟,給這個離線日誌轉存函數配置一個可以使用Object Storage Service的角色。
-
開啟RAM 存取控制控制台,選擇許可權管理的權限原則頁簽。
-
點擊建立權限原則,選擇指令碼編輯。
-
將下邊策略中的
BucketName改為自己的Bucket儲存空間名稱,將三處FC-NAME都替換成配置步驟2中的函數名稱(推薦使用cdn-log-dump)。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": "acs:oss:*:*:BucketName/*" }, { "Effect": "Allow", "Action": "fc:InvokeFunction", "Resource": [ "acs:fc:*:*:services/FC-NAME/functions/FC-NAME", "acs:fc:*:*:services/FC-NAME.*/functions/*" ] } ] } -
點擊确定,填寫策略名稱稱和備忘。然後再次點擊确定,完成建立權限原則(策略名稱稱推薦使用:
AliyunCDNLogDumpAccess;備忘推薦使用:管理CDN離線日誌轉存的許可權)。 -
點擊身份管理中的角色頁簽,點擊建立角色。
-
信任主體類型選擇雲帳號,信任主體名稱選擇當前雲帳號xxxxxxx,然後點擊确定。
-
在建立角色彈出框中輸入角色名稱(推薦使用
AliyunCDNLogDumpRole)然後點擊確定,完成角色的建立。 -
在建立角色的基本資料中,選擇許可權管理頁簽,點擊精確授權。策略類型選擇自訂策略,策略名稱稱填寫第四步建立的權限原則名稱(推薦使用
AliyunCDNLogDumpAccess)。然後點擊确定。 -
在信任策略頁簽中,點擊編輯信任策略。在指令碼編輯中,輸入下方的信任策略,然後點擊确定。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "fc.aliyuncs.com" ] } } ], "Version": "1" }
至此,已經完成了整個角色和許可權的配置,接下來需要把這個角色綁定到Function Compute任務上。
4. Function Compute任務綁定角色
-
在Function Compute控制台的函數頁簽,選擇步驟2建立的函數,點擊配置。
-
在配置頁簽中,選擇高級配置,點擊對應的配置按鈕。
-
在進階配置中,找到許可權-函數角色選項,選擇步驟3建立的角色(推薦使用
AliyunCDNLogDumpRole)。然後點擊部署,完成Function Compute任務綁定角色的操作。
5. 測試Function Compute任務(可選)
在完成前四個步驟之後,整個阿里雲CDN離線日誌轉存到Object Storage Service的操作已經全部完成。但是由於離線日誌的產生存在24小時左右的延遲,因此無法及時看到配置的Function Compute任務是否能夠正常執行。您可以按照以下步驟測試組態的Function Compute任務。
-
在Function Compute控制台的函數頁簽,選擇步驟2建立的函數,點擊配置。
-
在測試頁簽中,測試請求操作選擇建立新測試事件,事件模板選擇CDN(LogFileCreated),事件名稱填寫測試cdn_log_dump。
JSON 編輯器中自動填滿 CDN LogFileCreated 事件模板,包含
eventName、eventSource、region、eventTime、traceId、userIdentity(aliUid)、resource(domain 樣本為 example.com)及eventParameter等欄位。 -
用下方擷取的參數,替換修改事件模板中的
filePath參數。 -
點擊測試函數,待執行完成之後,可以看到返回結果為
null,並且執行成功的狀態。 -
在Object Storage ServiceBucket控制台,選擇用作儲存阿里雲CDN日誌的Bucket。
-
選擇檔案清單,進入到配置的儲存阿里雲CDN日誌的目錄中,可以看到以加速網域名稱命名的檔案夾,檔案夾內有以日期命名的子檔案夾,裡麵包含了 5.3 步驟中配置的檔案。說明Function Compute任務已成功處理阿里雲CDN離線日誌轉存。