日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

SLS觸發器

通過配置日志服務SLS觸發器,您可以實現日志服務SLS函數計算的集成。SLS觸發器能夠在新日志產生時自動觸發函數執行,從而增量消費日志服務Logstore的數據,并完成自定義加工任務。

使用場景

  • 數據清洗、加工場景

    通過日志服務,快速完成日志采集、加工、查詢、分析。

    image
  • 數據投遞場景

    為數據的目的端落地提供支撐,構建云上大數據產品間的數據管道。

    image

數據加工函數

函數類型

函數計算觸發機制

日志服務ETL Job對應于函數計算的一個觸發器,當創建日志服務ETL Job后,日志服務會根據該ETL Job的配置啟動定時器,定時器輪詢Logstore中的Shard信息,當發現有新的數據寫入時,即生成<shard_id,begin_cursor,end_cursor >三元組信息作為函數Event,并觸發函數執行。函數Event是日志服務SLS推送到函數計算

說明

當存儲系統升級時,即使沒有新數據寫入,也可能發生Cursor變化,在這種情況下,每個Shard會額外空觸發一次。針對這種情況,您可以在函數內通過Cursor嘗試獲取Shard的數據,如果獲取不到數據說明是一次空觸發,可以在函數內做忽略處理。更多信息,請參見自定義函數開發指南

日志服務的ETL任務觸發機制是時間觸發。例如:您設置的ETL Job觸發間隔為60秒,Logstore的Shard0一直有數據寫入,那么Shard每60秒就會觸發一次函數執行(如果Shard沒有新的數據寫入則不會觸發函數執行),函數執行的輸入為最近60秒的Cursor區間。在函數內,可以根據Cursor讀取Shard0數據進行下一步處理。

image

使用限制

單個日志項目(Project)關聯的SLS觸發器數量最大不得超過該Project下已有的Logstore數量的5倍。

說明

建議每個Logstore配置的SLS觸發器數量不超過5個,否則可能會影響數據投遞到函數計算的效率。

示例場景

您可以配置一個SLS觸發器,該觸發器將定時獲取更新的數據并觸發函數執行,增量消費日志服務Logstore中的數據,在函數里完成自定義加工任務(例如數據清洗和加工)以及將數據投遞給第三方服務。本示例中只演示如何獲取日志數據并打印。

說明

用于數據加工的函數可以是日志服務提供的模板,也可以是您的自定義函數。

前提條件

  • 函數計算

    • 創建服務

      說明

      在創建服務時,請配置好服務角色,函數會獲得該角色所擁有的權限,否則在測試函數代碼時會報錯。本文示例配置的服務角色為AliyunFCDefaultRole,并在權限策略中增加AliyunLogReadOnlyAccess。關于服務角色的信息,請參見授予函數計算訪問其他云服務的權限

  • 日志服務SLS

    • 創建日志項目和日志庫

      您需要創建一個日志項目和兩個日志庫。一個日志庫用于處理日志及數據源,另一個日志庫用于存儲函數計算產生的日志。

      說明

      日志項目(Project)所在地域和函數計算服務所在地域必須一致。

步驟一:創建SLS觸發器

  1. 登錄函數計算控制臺

  2. 在左側導航欄,單擊服務及函數
  3. 在頂部菜單欄,選擇地域。

  4. 服務列表頁面,找到目標服務,在其右側操作列單擊函數管理

  5. 函數管理頁面,單擊目標函數名稱。

  6. 在函數詳情頁面,單擊觸發器管理頁簽,從版本或別名下拉列表選擇要創建觸發器的版本或別名,然后單擊創建觸發器

  7. 在創建觸發器面板,填寫相關信息。然后單擊確定

    配置項

    操作

    本文示例

    觸發器類型

    選擇日志服務 SLS

    日志服務SLS

    名稱

    填寫自定義的觸發器名稱。

    log_trigger

    版本或別名

    默認值為LATEST,如果您需要創建其他版本或別名的觸發器,需先在函數詳情頁的右上角切換到該版本或別名。關于版本和別名的簡介,請參見管理版本管理別名

    LATEST

    日志項目

    選擇已創建的日志項目。

    aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457****

    日志庫

    選擇已創建的日志庫,當前觸發器會定時從該日志庫中訂閱數據到函數服務進行自定義加工。

    function-log

    觸發間隔

    填寫日志服務觸發函數運行的時間間隔。

    取值范圍:[3,600],單位:秒。默認值:60。

    60

    重試次數

    日志服務觸發函數執行時,如果遇到錯誤,單次觸發允許的最大重試次數。

    取值范圍:[0,100]。默認值:3。

    說明
    • 執行成功的情況為status=200并且header中參數X-Fc-Error-Type的值不是UnhandledInvocationErrorHandledInvocationError的錯誤。其他情況表示執行失敗,會觸發重試。關于參數X-Fc-Error-Type請參見返回數據

    • 如果函數執行失敗,會一直重試當前請求,直到函數執行成功。首先會按照配置的重試次數進行重試,超過最大重試次數仍然無法成功的,會增加時間間隔進入退避重試。

    3

    觸發器日志

    選擇已創建的日志庫,日志服務觸發函數執行過程的日志會記錄到該日志庫中。

    function-log2

    調用參數

    如果您想傳入自定義參數,可以在此處配置。該參數將作為event的parameter參數傳入函數。該參數取值必須是JSON格式的字符串。

    默認值為空。

    角色名稱

    選擇AliyunLogETLRole

    說明

    如果您第一次創建該類型的觸發器,則需要在單擊確定后,在彈出的對話框中選擇立即授權

    AliyunLogETLRole

    創建完成后,在觸發器名稱列表中顯示已創建的觸發器。如需對創建的觸發器進行修改或刪除,具體操作,請參見觸發器管理

步驟二:配置函數的入口參數

  1. 在函數詳情頁面,單擊函數代碼頁簽,然后單擊測試函數右側xialatubiao圖標,從下拉列表中,選擇配置測試參數

  2. 配置測試參數面板,選擇創建新測試事件編輯已有測試事件頁簽,填寫事件名稱和事件內容。然后單擊確定

    event是函數計算的入口參數。具體格式如下:

    {
        "parameter": {},
        "source": {
            "endpoint": "http://cn-hangzhou-intranet.log.aliyuncs.com",
            "projectName": "aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457****",
            "logstoreName": "function-log",
            "shardId": 0,
            "beginCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2Mw==",
            "endCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2NA=="
        },
        "jobName": "1f7043ced683de1a4e3d8d70b5a412843d81****",
        "taskId": "c2691505-38da-4d1b-998a-f1d4bb8c****",
        "cursorTime": 1529486425
    }                       

    參數

    描述

    本文示例

    parameter

    您配置觸發器時填寫的調用參數的值。

    無。

    source

    設置函數讀取的日志塊信息。

    • endpoint:日志服務Project所屬的阿里云地域。

    • projectName:日志服務Project名稱。

    • logstoreName:Logstore名稱。

    • shardId:Logstore中一個確定的Shard。

    • beginCursor:開始消費數據的位置。

    • endCursor:停止消費數據的位置。

    {
        "endpoint": "http://cn-hangzhou-intranet.log.aliyuncs.com",
        "projectName": "aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457****",
        "logstoreName": "function-log",
        "shardId": 0,
        "beginCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2Mw==",
        "endCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2NA=="
    }

    jobName

    日志服務ETL Job名字,函數配置的SLS觸發器對應一個日志服務的ETL Job。

    1f7043ced683de1a4e3d8d70b5a412843d81****

    taskId

    對于ETL Job而言,taskId是一個確定性的函數調用標識。

    c2691505-38da-4d1b-998a-f1d4bb8c****

    cursorTime

    最后一條日志到達日志服務端的Unix時間戳,單位:秒。

    1529486425

步驟三:編寫函數并測試

完成創建日志觸發器后,您可以編寫函數代碼并測試以驗證代碼的正確性。在實際操作過程中,當日志服務收集增量日志時觸發該函數,函數計算獲取對應日志,然后打印收集的日志。

  1. 在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中編寫代碼,然后單擊部署代碼

    本文以Python函數代碼為例,其中access_key_idaccess_key_secretsecurity_token可以從context.credentials中獲取。

    """
    本代碼樣例主要實現以下功能:
    * 從 event 中解析出 SLS 事件觸發相關信息
    * 根據以上獲取的信息,初始化 SLS 客戶端
    * 從源 log store 獲取實時日志數據
    
    
    This sample code is mainly doing the following things:
    * Get SLS processing related information from event
    * Initiate SLS client
    * Pull logs from source log store
    
    """
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import logging
    import json
    import os
    from aliyun.log import LogClient
    
    
    logger = logging.getLogger()
    
    
    def handler(event, context):
    
        # 可以通過 context.credentials 獲取密鑰信息
        # Access keys can be fetched through context.credentials
        print("The content in context entity is: \n")
        print(context)
        creds = context.credentials
        access_key_id = creds.access_key_id
        access_key_secret = creds.access_key_secret
        security_token = creds.security_token
    
        # 解析 event 參數至 object 格式
        # parse event in object
        event_obj = json.loads(event.decode())
        print("The content in event entity is: \n")
        print(event_obj)
    
        # 從 event.source 中獲取日志項目名稱、日志倉庫名稱、日志服務訪問 endpoint、日志起始游標、日志終點游標以及分區 id
        # Get the name of log project, the name of log store, the endpoint of sls, begin cursor, end cursor and shardId from event.source
        source = event_obj['source']
        log_project = source['projectName']
        log_store = source['logstoreName']
        endpoint = source['endpoint']
        begin_cursor = source['beginCursor']
        end_cursor = source['endCursor']
        shard_id = source['shardId']
    
        # 初始化 sls 客戶端
        # Initialize client of sls
        client = LogClient(endpoint=endpoint, accessKeyId=access_key_id, accessKey=access_key_secret, securityToken=security_token)
    
        # 基于日志的游標從源日志庫中讀取日志,本示例中的游標范圍包含了觸發本次執行的所有日志內容
        # Read data from source logstore within cursor: [begin_cursor, end_cursor) in the example, which contains all the logs trigger the invocation
        while True:
          response = client.pull_logs(project_name=log_project, logstore_name=log_store,
                                    shard_id=shard_id, cursor=begin_cursor, count=100,
                                    end_cursor=end_cursor, compress=False)
          log_group_cnt = response.get_loggroup_count()
          if log_group_cnt == 0:
            break
          logger.info("get %d log group from %s" % (log_group_cnt, log_store))
          logger.info(response.get_loggroup_list())
    
          begin_cursor = response.get_next_cursor()
    
        return 'success'
  2. 單擊函數代碼頁簽的測試函數

    執行完成后,您可以在函數代碼頁簽的上方查看執行結果。

常見問題