Skip to main content

Kingsoft Log Service SDK

Project description

金山云日志服务(KLog) SDK for python使用指南

安装

有两种安装方式,通常情况下,使用在线安装即可。支持python 2.7python 3.x

在线安装

pip install klog-sdk

pip install klog-sdk会自动安装lz4protobuf这两个依赖。如果自动安装依赖出现问题,可以尝试手动安装依赖:

pip install lz4
# python 3可使用protobuf的最新版本
# python 2.7可使用的protobuf版本最高为3.17.3
pip install protobuf==3.17.3

本地安装

# 通过git下载SDK到本地
git clone https://gitee.com/klogsdk/klog-python-sdk.git

# 进入klog-python-sdk目录
cd klog-python-sdk

# 安装SDK
python setup.py install

使用方法

初始化KLog客户端

KLog客户端是线程安全的。在整个进程内您可以只创建一个KLog客户端,并重复使用。

from klog import Client

# 您在金山云的主账户或子账户的 ACCESS KEY ID
access_key = "your secret_key"

# 您在金山云的主账户或子账户的 SECRET KEY ID
secret_key = "your secret_key"

# 您的日志项目所在地区的入口地址,该地址可以在金山云控制台日志服务的项目概览中查到。
# 支持 http 和 https
endpoint = "https://klog-cn-beijing.ksyun.com"

# 创建KLog客户端
client = Client(endpoint, access_key, secret_key)

上传文本类型日志

# 异步发送一条文本日志
client.push("your_project_name", "your_pool_name", "your log message")

上传dict类型日志

KLog支持dict类型的日志。注意:同一日志池各条日志的dict数据结构应该保持一致。

# 异步发送一条dict日志
client.push("your_project_name", "your_pool_name", {"k1": "value1", "k2": "value2"})

异步发送

KLog客户端默认是异步发送数据的,客户端内部的发送间隔为每2秒,或每批达到3MB,或每批达到4096条。 这样的好处有:

  • 客户端内部自动将最近的多条日志一起压缩并批量发送。
  • 不会阻塞其它逻辑(除非发送缓冲队列满了)
  • 可以配置各种发送策略

注意:

  • 程序退出时,需调用一次Client.flush()
# 立即发送客户端缓冲队列中还未发送的日志。
# 参数timeout可以为等待秒数或None。
# timeout为None时,表示阻塞到发送成功或发送结束为止。这种情况下的发送失败重试策略与Client的构造参数一致。
client.flush(timeout=10)

同步发送

  • 在调用Client.push()之后调用Client.flush(),可实现同步发送。

管理端接口使用方法

说明

  1. 所有的返回对象都继承了klog.cli.models.KlogResponse
    1. 可以通过get_data()获取response body的dict, 某些接口可能为None
    2. 可以通过get_request_id()获取请求的request_id
    3. 可以通过get_status()获取请求操作的状态。
class Serializer(object):
    def serialize(self):
        pass

    def deserialize(self):
        pass


class KlogResponse(Serializer):
    def __init__(self, data=None, request_id="", status="success"):
        self.request_id = request_id
        self._data = data
        self.status = status

    def __str__(self):
        d = {} if self.get_data() is None else self.get_data()
        return "request_id: {} data: {} status: {}".format(self.request_id, d, self.status)

    def get_data(self):
        return self._data

    def get_request_id(self):
        return self.request_id

    def get_status(self):
        return self.status
  1. 所有的返回值都可以像使用对象字段那样使用返回值的字段。
  2. 以下的例子可以适用于所有接口。

日志查询

from klog import client
from klog.cli import models

c = client.Client()

# 创建日志查询对象
# 如果是多日志池的查询,则log_pool_name使用逗号分隔开
req = models.GetLogsRequest(project_name="project_name", log_pool_name="pool1,pool2,pool3",
                            start_time=(datetime.now() - timedelta(minutes=15)).timestamp() * 1000,
                            end_time=datetime.now().timestamp() * 1000)

res = c.GetLogs(req)
# 可选操作, 序列化是 将 request_id、http response body、操作状态,序列化成dict
print(res.serialize())

# 获取http response body的dict
print(res.get_data())

# 也可以直接使用对象
for l in res.Logs:
    # l 也是一个对象, l中的字段就是日志中的字段, 字段可以参照 klog 官网文档
    print(l.serialize())

获取工程列表

from klog import client
from klog.cli import models

c = client.Client()

# 创建获取工程列表对象
req = models.ListProjectsRequest(0, 10)

# 执行对应操作
res = c.ListProjects(req)

# 可选操作, 序列化是 将 request_id、http response body、操作状态,序列化成dict
print(res.serialize())

# 获取http response body的dict
print(res.get_data())

# 也可使用对象
for project in res.Projects:
    # project 也是对象, 所以有ProjectName等属性
    print(project.ProjectName)

参数说明

Client(endpoint, access_key, secret_key, queue_size=2000, drop_when_queue_is_full=False, rate_limit=0, down_sample_rate=1, max_retries=-1, retry_interval=-1, external_logger=None, logger_level=logging.WARNING)

创建一个KLog客户端,参数如下:

  • endpoint 必填。您的日志项目所在地区的入口地址,该地址可以在金山云控制台日志服务的项目概览中查到。支持httphttps
  • access_key 必填。您在金山云的主账户或子账户的ACCESS KEY ID
  • secret_key 必填。您在金山云的主账户或子账户的SECRET KEY ID
  • queue_size 客户端内部缓冲队列长度。默认为2000条日志。
  • drop_when_queue_is_full 默认情况下,当缓冲队列满时,client.push()会阻塞并等待空位。如果设置为True,则不等待,直接丢弃日志。默认为False
  • rate_limit 限制发送速率为每秒多少条。此项配置可降低CPU使用率,但会降低发送速率,在日志较多时,缓冲队列可能会满。默认为0,即不限制。
  • down_sample_rate 降采样率。例如设置为0.15时,将只发送15%的日志,其余丢弃。此项配置可降低CPU使用率。默认为1,即发送所有日志。
  • max_retries 发送失败后的重试次数,达到次数后如果仍然失败则丢弃日志。默认为-1,即永远重试。
  • retry_interval 发送失败后的重试间隔秒数。支持浮点数。默认为-1,即逐步增加重试间隔(但不会超过60秒)。
  • external_logger 设置客户端输出自身运行状态的日志对象。默认为None,即使用logging模块并打印到stdout。
  • logger_level 客户端内部日志打印level。默认为logging.WARNING。

Client.push(project_name, log_pool_name, data, timestamp=None)

上传一条日志。参数如下:

  • project_name 必填。项目名称
  • log_pool_name 必填。日志池名称
  • data 必填。日志数据,字符串或dict类型。
  • timestamp 日志时间戳(毫秒值整数)。默认取当前时间。

Client.flush(timeout=None)

立即发送客户端缓冲队列中还未发送的日志。参数如下:

  • timeout 最大等待秒数,可以是小数。为None时,表示阻塞到发送成功或发送结束为止。这种情况下的发送失败重试策略与Client的构造参数一致。默认为None。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

klog-sdk-0.9.tar.gz (42.3 kB view details)

Uploaded Source

Built Distribution

klog_sdk-0.9-py2.py3-none-any.whl (47.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file klog-sdk-0.9.tar.gz.

File metadata

  • Download URL: klog-sdk-0.9.tar.gz
  • Upload date:
  • Size: 42.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.6

File hashes

Hashes for klog-sdk-0.9.tar.gz
Algorithm Hash digest
SHA256 7d672d6925e0f1cac9c9e8e3b759b9b8e399a077d83e3978235e24af9fedd57c
MD5 821921f25186624b9d85bc6b229b3bbe
BLAKE2b-256 9e79295c737d8f1747e3da74c24f0fbeb0a75af8a107d9cb3c26f1e3e48b75fe

See more details on using hashes here.

File details

Details for the file klog_sdk-0.9-py2.py3-none-any.whl.

File metadata

  • Download URL: klog_sdk-0.9-py2.py3-none-any.whl
  • Upload date:
  • Size: 47.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.6

File hashes

Hashes for klog_sdk-0.9-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 98198b6ff93015f59618ab164679e820acfd8431cf3072f2240859b6fe0b33ef
MD5 f413837c6a759089ed4c592b63a18064
BLAKE2b-256 d1619d1cf549fc05d9900ed1b2698e3bd4cae71576910d7803407111233f74bc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page