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
,则不等待,直接丢弃日志。默认为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, 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
klog-sdk-0.9.2.tar.gz
(41.5 kB
view details)
Built Distribution
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 |