完成日志触发器创建后,您可以开始编写函数代码。本文介绍如何使用函数计算控制台编写函数,实现日志服务收集增量日志时触发该函数,函数计算获取对应日志,然后打印收集的日志。
编写函数代码(Python)
- 登录函数计算控制台。
- 在顶部菜单栏,选择地域。
- 在左侧导航栏,单击服务/函数。
- 在服务列表区域,单击目标服务。然后在函数列表页签,单击目标函数名称。
- 单击代码执行页签,在代码编辑器中编写代码。
本文以Python函数代码为例。以下示例代码可以作为提取大部分逻辑日志的模板。其中
accessKeyId
和
accessKey
可以填写在代码内,也可以从
context
和
creds
中获取。
# -*- 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 = 'your accessKeyId'
accessKey = 'your accessKeyId scr'
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
event格式说明
event是函数计算的入口参数。具体格式为如下。
{
"parameter": {},
"source": {
"endpoint": "http://cn-shanghai-intranet.log.aliyuncs.com",
"projectName": "log-com",
"logstoreName": "log-en",
"shardId": 0,
"beginCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2Mw==",
"endCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2NA=="
},
"jobName": "1f7043ced683de1a4e3d8d70b5a412843d817a39",
"taskId": "c2691505-38da-4d1b-998a-f1d4bb8c9994",
"cursorTime": 1529486425
}
参数 |
描述 |
parameter |
您配置触发器时填写的函数配置。 |
source |
设置函数读取的日志块信息。
- endpoint:日志服务Project所属的阿里云地域。
- projectName:日志服务Project名称。
- logstoreName:Logstore名称。
- shardId:Logstore中一个确定的Shard。
- beginCursor:开始消费数据的位置。
- endCursor:停止消费数据的位置。
|
jobName |
日志服务ETL Job名字,函数配置的日志服务触发器对应一个日志服务的ETL Job。 |
taskId |
对于ETL Job而言,taskId是一个确定性的函数调用标识。
|
cursorTime |
最后一条日志到达日志服务端的unix_timestamp。 |
在文档使用中是否遇到以下问题
更多建议
匿名提交