全部产品

2. 创建函数

更新时间:2019-02-22 10:32:25

完成上一步后,您的服务已经可以开始写入函数了。您可以使用 函数计算控制台命令行工具 fcli 提交函数。本文在函数计算控制台上创建了上一步中指定语言版本的函数。

示例函数中,日志服务收集的增量日志触发函数,函数计算获取对应日志并作一定的处理,然后打印收集到的日志。更多详情,请参阅 函数计算消费日志

Python 函数代码

以下示例代码可以作为提取大部分逻辑日志的模版。其中 accessKeyIdaccessKey 要么您自行填写在代码内,要么从 contextcreds 中获取。

  1. # -*- coding: utf-8 -*-
  2. import logging
  3. import json
  4. from aliyun.log import LogClient
  5. from time import time
  6. def logClient(endpoint, creds):
  7. logger = logging.getLogger()
  8. logger.info('creds info')
  9. logger.info(creds.access_key_id)
  10. logger.info(creds.access_key_secret)
  11. logger.info(creds.security_token)
  12. accessKeyId = 'your accessKeyId'
  13. accessKey = 'your accessKeyId scr'
  14. client = LogClient(endpoint, accessKeyId, accessKey)
  15. return client
  16. def handler(event, context):
  17. logger = logging.getLogger()
  18. logger.info('start deal SLS data')
  19. logger.info(event.decode().encode())
  20. info_arr = json.loads(event.decode())
  21. fetchdata(info_arr['source'],context)
  22. return 'hello world'
  23. def fetchdata(event,context):
  24. logger = logging.getLogger()
  25. endpoint = event['endpoint']
  26. creds = context.credentials
  27. client = logClient(endpoint, creds)
  28. if client == None :
  29. logger.info("client creat failed")
  30. return False
  31. project = event['projectName']
  32. logstore = event['logstoreName']
  33. start_cursor = event['beginCursor']
  34. end_cursor = event['endCursor']
  35. loggroup_count = 10
  36. shard_id = event['shardId']
  37. while True:
  38. res = client.pull_logs(project, logstore, shard_id, start_cursor, loggroup_count, end_cursor)
  39. res.log_print()
  40. next_cursor = res.get_next_cursor()
  41. if next_cursor == start_cursor :
  42. break
  43. start_cursor = next_cursor
  44. #log_data = res.get_loggroup_json_list()
  45. return True

参数说明

event 是函数计算的入口参数。具体格式为:

  1. {
  2. "parameter": {},
  3. "source": {
  4. "endpoint": "http://cn-shanghai-intranet.log.aliyuncs.com",
  5. "projectName": "log-com",
  6. "logstoreName": "log-en",
  7. "shardId": 0,
  8. "beginCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2Mw==",
  9. "endCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2NA=="
  10. },
  11. "jobName": "1f7043ced683de1a4e3d8d70b5a412843d817a39",
  12. "taskId": "c2691505-38da-4d1b-998a-f1d4bb8c9994",
  13. "cursorTime": 1529486425
  14. }
  • parameter:您配置触发器时填写的函数配置。
  • source:设置函数读取的日志块信息。
    • endpoint:日志服务 Project 所属的阿里云地域。
    • projectName:日志服务 Project 名称。
    • logstoreName:Logstore 名称。
    • shardId:Logstore 中一个确定的 Shard。
    • beginCursor:从 Shard Cursor 的位置开始消费数据。
    • endCursor:从 Shard Cursor 的位置停止消费数据。
  • jobName:日志服务 ETL Job 名字,函数配置的日志服务触发器对应一个日志服务的 ETL Job。
  • taskId:对于 ETL Job 而言,taskId 是一个确定性的函数调用标识。
  • cursorTime:本次函数调用包括的数据中,最后一条日志到达日志服务服务端的 unix_timestamp。

下一步

3. 测试函数执行