函數計算雖然不支持直接集成到ECS的管控事件上,可是函數計算自己是支持日誌服務做爲觸發器的。便可以配置日誌服務中logstore裏的加強日誌做爲觸發器來觸發函數計算服務中的函數,同時能夠傳遞project 和 logstore的name以及beginCursor/endCursor 等相關日誌信息做爲event到函數計算服務,供其作二次處理和加工。json
這樣至關於提供了一個思路,即咱們能夠把建立ECS或者其餘相關的操做想辦法做爲日誌投遞到日誌服務中,這樣就能夠觸發相關的函數計算服務了。函數
那麼這種方法是什麼呢?一種可行的方式是操做審計服務。操做審計能夠記錄全部API級別的用戶記錄,固然也包括CreateInstance這類操做。fetch
因此整個流程就變成了:
開通操做審計服務->配置操做審計跟蹤,將event投遞到日誌服務中->配置日誌服務做爲函數計算觸發器並傳遞日誌->觸發函數阿里雲
開通操做審計服務後,建立一個日誌跟蹤spa
而後建立一個實例,能夠看到操做審計記錄了這個行爲日誌
同時日誌服務裏也找到了這個行爲記錄code
接下來咱們能夠配置一個函數計算服務,具體的過程能夠參考文中最後的文檔,這裏強調下配置觸發器的配置,這裏要注意的是圖中有關logstore的配置,上面的是觸發日誌的logstore,下面的是寫日誌的lostore,不能搞混。blog
而後複製進去一段代碼,這段代碼的核心是拿到觸發event的具體日誌信息,而後寫到函數計算本地的日誌庫裏。token
# -*- coding: utf-8 -*- import logging import json from aliyun.log import LogClient from time import time def logClient(endpoint, creds): logger = logging.getLogger() logger.info('creds info') logger.info(creds.access_key_id) logger.info(creds.access_key_secret) logger.info(creds.security_token) accessKeyId = 'XXX' accessKey = 'XXX' client = LogClient(endpoint, accessKeyId, accessKey) return client def handler(event, context): logger = logging.getLogger() logger.info('start deal SLS data') logger.info(event.decode().encode()) info_arr = json.loads(event.decode()) fetchdata(info_arr['source'],context) return 'hello world' def fetchdata(event,context): logger = logging.getLogger() endpoint = event['endpoint'] creds = context.credentials client = logClient(endpoint, creds) if client == None : logger.info("client creat failed") return False project = event['projectName'] logstore = event['logstoreName'] start_cursor = event['beginCursor'] end_cursor = event['endCursor'] loggroup_count = 10 shard_id = event['shardId'] while True: res = client.pull_logs(project, logstore, shard_id, start_cursor, loggroup_count, end_cursor) res.log_print() next_cursor = res.get_next_cursor() if next_cursor == start_cursor : break start_cursor = next_cursor #log_data = res.get_loggroup_json_list() return True
以上配置完成後,一個控制檯建立ECS(固然也包括其餘能夠被審計的行爲)的行爲就能夠用來觸發函數計算的函數了。事件
咱們把剛纔建立的實例再釋放掉,看到操做審計的日誌
而後咱們在函數計算的日誌庫裏也看到了對應的日誌,這個日誌是剛纔操做審計記錄的日誌傳遞給函數計算並記錄的。在真正的應用場景下,客戶能夠拿到這個日誌中的相關信息作更多操做。
總結
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。