Kingsoft Log Service SDK
Project description
金山云日志服务(KLog) SDK for python使用指南
安装
有两种安装方式,通常情况下,使用在线安装即可。支持python 2.7和python 3.x。
在线安装
pip install klog-sdk
pip install klog-sdk会自动安装lz4和protobuf这两个依赖。如果自动安装依赖出现问题,可以尝试手动安装依赖:
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_hostname", "your_log_file_path", "your log message")
上传dict类型日志
KLog支持dict类型的日志。注意:同一日志池各条日志的dict数据结构应该保持一致。
# 异步发送一条dict日志
client.push("your_project_name", "your_pool_name", "your_hostname", "your_log_file_path", {"k1": "value1", "k2": "value2"})
异步发送
KLog客户端默认是异步发送数据的,客户端内部的发送间隔为每2秒,或每批达到3MB,或每批达到4096条。 这样的好处有:
- 客户端内部自动将最近的多条日志一起压缩并批量发送。
- 不会阻塞其它逻辑(除非发送缓冲队列满了)
- 可以配置各种发送策略
注意:
- 程序退出时,需调用一次
Client.flush()。
# 立即发送客户端缓冲队列中还未发送的日志。
# 参数timeout可以为等待秒数或None。
# timeout为None时,表示阻塞到发送成功或发送结束为止。这种情况下的发送失败重试策略与Client的构造参数一致。
client.flush(timeout=10)
同步发送
- 在调用
Client.push()之后调用Client.flush(),可实现同步发送。
管理端接口使用方法
说明
- 所有的返回对象都继承了
klog.cli.models.KlogResponse。- 可以通过
get_data()获取response body的dict, 某些接口可能为None。 - 可以通过
get_request_id()获取请求的request_id。 - 可以通过
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
- 所有的返回值都可以像使用对象字段那样使用返回值的字段。
- 以下的例子可以适用于所有接口。
日志查询
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必填。您的日志项目所在地区的入口地址,该地址可以在金山云控制台日志服务的项目概览中查到。支持http和https。access_key必填。您在金山云的主账户或子账户的ACCESS KEY ID。secret_key必填。您在金山云的主账户或子账户的SECRET KEY ID。queue_size客户端内部缓冲队列长度。默认为2000条日志。drop_when_queue_is_full默认情况下,当缓冲队列满时,client.push()会阻塞并等待空位。如果设置为True,则不等待,直接丢弃日志。默认为Falserate_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, source, filename, data, timestamp=None)
上传一条日志。参数如下:
project_name必填。项目名称log_pool_name必填。日志池名称source日志来源,如主机名、ip等,用于进行日志上下文查询filename日志文件路径,用于进行日志上下文查询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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file klog-sdk-0.9.2.tar.gz.
File metadata
- Download URL: klog-sdk-0.9.2.tar.gz
- Upload date:
- Size: 41.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
abc9408999f887b701e753b77f07c96e1fd3089fdb4c3bb1e73a0a0ef2a8ad2a
|
|
| MD5 |
24f9ea553bc677aea649583d0c0a8552
|
|
| BLAKE2b-256 |
f721959c76fef02b9dff4930ee1422537f6ef5b8868f962605886984dc9e763c
|
File details
Details for the file klog_sdk-0.9.2-py2.py3-none-any.whl.
File metadata
- Download URL: klog_sdk-0.9.2-py2.py3-none-any.whl
- Upload date:
- Size: 46.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47367fd1a7e41836942bbb162a2af6239e92f8d1af3421b33b3a86cbad270348
|
|
| MD5 |
76b869e91beab6265634fc9cacbb5728
|
|
| BLAKE2b-256 |
e59b352f33431d251e20c0ac80ff907f089c50e78a6d813f807766062faae0a9
|