观测云工具包¶
本文档主要介绍如何使用脚本市场中的「观测云工具包」脚本包进行一些无法直接在观测云平台中操作的工作。
提示:请始终使用最新版 DataFlux Func 进行操作。
提示 2: 本脚本包会不断加入新功能,请随时关注本文档页。
1. 背景¶
在用户使用观测云平台的过程中,存在一些工作无法直接在观测云平台中操作。用户可以从脚本市场安装本脚本包,进行简单的配置后,即可完成相应的工作。
本文假设用户已经了解并安装了相关脚本包。 有关如何在 DataFlux Func 的脚本市场中安装脚本版,请参考:
本文假设用户已经了解如何使用 DQL。 有关如何编写 DQL 语句,请参考:
2. 可用组件¶
可用组件是一些针对观测云最常用、最基础的组件。这些组件一般并不会直接实现你的需求,而作为方便函数为各种代码实现提供帮助。
2.1 OpenWay¶
OpenWay 操作组件,可实现通过工作空间 Token 查询对应工作空间内的数据。
有关 OpenWay.dql_query(...) 的更多参数,请参考 观测云文档 / DataKit / DataKit 开发 / DataKit API
示例代码如下:
import json
from guance_toolkit__guance import OpenWay
def run():
openway = OpenWay('tkn_xxxxx')
# 典型使用方式
dql = '''M::cpu:(load5s)'''
dql_res = openway.dql_query(dql, limit=1)
print('典型使用方式:\n', json.dumps(dql_res, indent=2))
# 日志类通过 time_range, search_after 翻页
search_after = []
time_range = [
'2022-09-14T12:00:00+08:00',
'2022-09-14T12:00:01+08:00',
]
for i in range(2):
dql = '''L::re(`.*`):(message){ `source` IN ['gin'] }'''
dql_res = openway.dql_query(dql, limit=1, time_range=time_range, search_after=search_after)
print(f'日志类第【{i+1}】页:\n', json.dumps(dql_res, indent=2))
# 下一页开始标志
search_after = dql_res['content'][0]['search_after']
输出如下:
[2022-09-20 17:37:05.707] [+0ms] 典型使用方式:
{
"content": [
{
"series": [
{
"name": "cpu",
"columns": [
"time",
"load5s"
],
"values": [
[
1663027200056,
10
]
]
}
],
"points": "",
"cost": "19.265169ms",
"is_running": false,
"async_id": ""
}
]
}
[2022-09-20 17:37:05.908] [+201ms] 日志类第【1】页:
{
"content": [
{
"series": [
{
"columns": [
"time",
"message"
],
"values": [
[
1663128000997,
"[GIN] 2022/09/14 - 04:00:00 | 200 | 3.317484ms | 10.120.0.70 | GET \"/v1/datakit/pull?token=****************24f2f97128a9c6813289c&filters=true\""
]
]
}
],
"points": "",
"cost": "63ms",
"total_hits": 1697,
"search_after": [
1663128000997,
"L_1663128000997_ccgl3h2rnkq7doms8f10"
],
"is_running": false,
"async_id": ""
}
]
}
[2022-09-20 17:37:06.060] [+151ms] 日志类第【2】页:
{
"content": [
{
"series": [
{
"columns": [
"time",
"message"
],
"values": [
[
1663128000997,
"[GIN] 2022/09/14 - 04:00:00 | 200 | 13.559498ms | 10.120.0.6 | POST \"/v1/election?token=****************24f2f97128a9c6813289c&namespace=k8s-03&id=k8s03-node08\""
]
]
}
],
"points": "",
"cost": "67ms",
"total_hits": 1697,
"search_after": [
1663128000997,
"L_1663128000997_ccgl3h2rnkq7doms8f0g"
],
"is_running": false,
"async_id": ""
}
]
}
3. 现成工具¶
现成工具是使用上述「可用组件」已经实现的工具类函数。
- 如果你的需求正好可以使用「现成工具」满足,可直接使用。
- 如果您的需求与现成功能有所出入,可以参考类似的函数自行实现所需功能
3.1 导出日志为 CSV 文件¶
具体实现所在脚本:guance_toolkit__export_impl
可以从观测云将大量日志导出,并保存在 DataFlux Func 的资源目录下。 导出成功后,用户可以前往 DataFlux Func「管理 - 文件管理器」下载 CSV 文件。
如果找不到「文件管理器」,可以在「管理 - 实验性功能」中开启。
典型使用代码如下:
import guance_toolkit__api as guance_toolkit
@DFF.API('导出 gin 日志')
def run():
# DQL 语句(注意不要指定时间范围)
dql = '''L::re(`.*`):(log_time,message,message_length){ `source` IN ['gin'] }'''
# 时间范围
start_time = '2022-09-14T12:00:00+08:00'
end_time = '2022-09-14T12:00:10+08:00'
# 工作空间 Token
workspace_token = 'tkn_xxxxx'
# 输出地址(资源目录下相对地址,不要以/开头)
# 默认输出地址为:
# guance_toolkit/gaunce-export-data-<执行时间>.csv
file_path = 'export-data.csv'
# 启动执行
guance_toolkit.export_logging(dql=dql,
start_time=start_time,
end_time=end_time,
workspace_token=workspace_token,
file_path=file_path)
提示:您在实现自己的代码时,可以根据需要将部分导出参数作为函数的输入参数,实现更通用的导出函数或接口
完成代码后,在「管理 - 批处理」中为此函数创建一个「批处理」,并根据示例调用即可。
创建批处理并调用:
查看批处理执行日志:
获取批处理执行生成的文件: