全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
日志服务

Python SDK

更新时间:2017-11-27 11:42:56

下载地址

下载地址:单击下载

该 SDK GitHub 地址如下:

https://github.com/aliyun/aliyun-log-python-sdk

操作步骤

为快速开始使用日志服务Python SDK,请按照如下步骤进行:

步骤 1 创建阿里云账号

为了访问阿里云日志服务,您需要有一个阿里云账号。如果没有,您需要执行以下步骤创建一个阿里云账号:

  1. 访问阿里云官方网站,单击页面上注册按钮。

  2. 按照屏幕提示完成注册流程并进行实名认证。

为了更好地使用阿里云服务,建议尽快完成实名认证,否则部分阿里云服务将无法使用。具体实名认证流程请参考这里

步骤 2 获取阿里云访问密钥

为了使用SDK,您必须申请阿里云的访问密钥

  1. 登录阿里云管理控制台

  2. 访问阿里云密钥管理页面

  3. 选择一对用于SDK的访问密钥对(如果没有请创建一对新访问密钥),且保证它处于启用状态。

该密钥对会在下面的步骤使用,且需要保管好,不能对外泄露。另外,您可以参考SDK配置了解更多SDK如何使用访问密钥的信息。

步骤 3 创建日志服务项目(Project)和日志库(Logstore)

在进行SDK操作之前,请先在控制台上创建Project和Logstore。

  1. 登录 日志服务管理控制台

  2. 单击右上角的 创建Project

  3. 填写 Project名称所属地域,单击 确认

  4. Project列表 页面,单击项目的名称,然后单击 创建 创建日志库

    或者在创建完项目后,根据系统提示创建日志库,单击 创建

  5. 填写日志库的配置信息并单击 确认

    您需要在此处填写Logstore名称、数据保存时间、Shard数目等。请按照您的需求合理设置Shard数目,例如本文实例中,您需要设置4个Shard。

注意

  1. 请确保使用同一阿里云账号获取阿里云访问密钥和创建项目及日志库
  2. 关于日志服务的项目、日志库等概念请参考核心概念
  3. Project名称为日志服务全局唯一,而Logstore名称在一个Project下面唯一。
  4. Project一旦创建则无法更改它的所属区域。目前也不支持在不同阿里云Region间迁移Project。

步骤 4 安装Python环境

Python SDK是一个纯Python的库,支持在所有运行Python的操作系统。目前主要为Linux、Mac OS X和Windows。请如下安装Python:

  1. 下载并安装最新的Python 安装包

    注意:

    • 目前,Python SDK支持Python 2.6/2.7和Python 3.3/3.4/3.5/3.6环境。您可以运行python -V查询当前的Python运行版本。
    • Python官方不再支持Python 2.6和Python 3.3,推荐您使用Python 2.7、Python 3.4及以上版本。
  2. 下载并安装Python的包管理工具 pip

    完成pip安装后,您可以运行pip -V确认pip是否安装成功,并查看当前pip版本。

步骤 5 安装Python SDK

Shell下以管理员权限执以下命令,安装Python SDK。

  1. pip install -U aliyun-log-python-sdk

步骤 6 开始一个Python程序

现在,您可以开始使用SDK Python SDK。使用任何文本编辑器或者Python IDE,运行如下示例代码即可与服务端交互并得到相应输出。

更多信息请参考Github/reamdthedocs

  1. # encoding: utf-8
  2. import time
  3. from aliyun.log.logitem import LogItem
  4. from aliyun.log.logclient import LogClient
  5. from aliyun.log.getlogsrequest import GetLogsRequest
  6. from aliyun.log.putlogsrequest import PutLogsRequest
  7. from aliyun.log.listlogstoresrequest import ListLogstoresRequest
  8. from aliyun.log.gethistogramsrequest import GetHistogramsRequest
  9. def main():
  10. endpoint = '' # 选择与上面步骤创建Project所属区域匹配的Endpoint
  11. accessKeyId = '' # 使用您的阿里云访问密钥AccessKeyId
  12. accessKey = '' # 使用您的阿里云访问密钥AccessKeySecret
  13. project = '' # 上面步骤创建的项目名称
  14. logstore = '' # 上面步骤创建的日志库名称
  15. # 重要提示:创建的logstore请配置为4个shard以便于后面测试通过
  16. # 构建一个client
  17. client = LogClient(endpoint, accessKeyId, accessKey)
  18. # list 所有的logstore
  19. req1 = ListLogstoresRequest(project)
  20. res1 = client.list_logstores(req1)
  21. res1.log_print()
  22. topic = ""
  23. source = ""
  24. # 发送10个数据包,每个数据包有10条log
  25. for i in range(10):
  26. logitemList = [] # LogItem list
  27. for j in range(10):
  28. contents = [('index', str(i * 10 + j))]
  29. logItem = LogItem()
  30. logItem.set_time(int(time.time()))
  31. logItem.set_contents(contents)
  32. logitemList.append(logItem)
  33. req2 = PutLogsRequest(project, logstore, topic, source, logitemList)
  34. res2 = client.put_logs(req2)
  35. res2.log_print()
  36. # list所有的shard,读取上1分钟写入的数据全部读取出来
  37. listShardRes = client.list_shards(project, logstore)
  38. for shard in listShardRes.get_shards_info():
  39. shard_id = shard["shardID"]
  40. start_time = int(time.time() - 60)
  41. end_time = start_time + 60
  42. res = client.get_cursor(project, logstore, shard_id, start_time)
  43. res.log_print()
  44. start_cursor = res.get_cursor()
  45. res = client.get_cursor(project, logstore, shard_id, end_time)
  46. end_cursor = res.get_cursor()
  47. while True:
  48. loggroup_count = 100 # 每次读取100个包
  49. res = client.pull_logs(project, logstore, shard_id, start_cursor, loggroup_count, end_cursor)
  50. res.log_print()
  51. next_cursor = res.get_next_cursor()
  52. if next_cursor == start_cursor:
  53. break
  54. start_cursor = next_cursor
  55. # 重要提示: 只有打开索引功能,才可以使用以下接口来查询数据
  56. time.sleep(60)
  57. topic = ""
  58. query = "index"
  59. From = int(time.time()) - 600
  60. To = int(time.time())
  61. res3 = None
  62. # 查询最近10分钟内,满足query条件的日志条数,如果执行结果不是完全正确,则进行重试
  63. while (res3 is None) or (not res3.is_completed()):
  64. req3 = GetHistogramsRequest(project, logstore, From, To, topic, query)
  65. res3 = client.get_histograms(req3)
  66. res3.log_print()
  67. # 获取满足query的日志条数
  68. total_log_count = res3.get_total_count()
  69. log_line = 10
  70. # 每次读取10条日志,将日志数据查询完,对于每一次查询,如果查询结果不是完全准确,则重试3次
  71. for offset in range(0, total_log_count, log_line):
  72. res4 = None
  73. for retry_time in range(0, 3):
  74. req4 = GetLogsRequest(project, logstore, From, To, topic, query, log_line, offset, False)
  75. res4 = client.get_logs(req4)
  76. if res4 is not None and res4.is_completed():
  77. break
  78. time.sleep(1)
  79. if res4 is not None:
  80. res4.log_print()
  81. listShardRes = client.list_shards(project, logstore)
  82. shard = listShardRes.get_shards_info()[0]
  83. # 分裂shard
  84. if shard["status"] == "readwrite":
  85. shard_id = shard["shardID"]
  86. inclusiveBeginKey = shard["inclusiveBeginKey"]
  87. midKey = inclusiveBeginKey[:-1] + str((int(inclusiveBeginKey[-1:])) + 1)
  88. client.split_shard(project, logstore, shard_id, midKey)
  89. # 合并shard
  90. shard = listShardRes.get_shards_info()[1]
  91. if shard["status"] == "readwrite":
  92. shard_id = shard["shardID"]
  93. client.merge_shard(project, logstore, shard_id)
  94. # 删除shard
  95. shard = listShardRes.get_shards_info()[-1]
  96. if shard["status"] == "readonly":
  97. shard_id = shard["shardID"]
  98. client.delete_shard(project, logstore, shard_id)
  99. if __name__ == '__main__':
  100. main()
本文导读目录