数据探索查询语言(DXQL)
dxql的Python项目详细描述
数据探索查询语言(DXQL)
需要Python 3.7
用法
- 将dxql.search.pipeline导入到项目中
- 使用管道实例化管道。创建管道(query string)
- 使用新的管道在一个iterable的dict上使用pipeline.execute(events)
示例:
from dxql.search import Pipeline
pipeline = Pipeline.create_pipeline('search ip=192.168.1.10')
results = pipeline.execute(events)
events可以是任何iterable。要搜索文件,只需将打开的文件传递给pipeline.execute()
。文件的每一行都将被视为一个事件。
示例:
# myfile.json is a file where each line is a JSON dictionary
with open('myfile.json') as file:
results = pipeline.execute(file)
搜索
搜索的灵感来自splunk的查询语言。
在本文档的其余部分中,我将交替使用术语“搜索”和“查询”。
查询可以由多个由管道分隔的命令组成(|
)。将多命令搜索想象为一个“管道”,其中每个命令依次应用于数据,数据从一个命令馈送到下一个命令,直到管道结束。
有四个命令可用:
一。搜索
search
命令允许您使用键值对和修饰符(如OR
和NOT
)过滤数据。它必须是查询中的第一个命令。
用法:
搜索“表达式”…
<;表达式>;
<;比较表达式>;不是<;表达式>;<;表达式>;或<;表达式>;
<;比较表达式>;
<;field>;<;operator>;<;value>;
<;运算符>;
=!=<;<;=>;>;=
示例
从索引检索数据
此搜索将返回geoip
索引中的所有数据。
search index=geoip
检索特定IP的地理IP数据
使用OR
修饰符为字段指定多个值。
search index=geoip ip=192.168.1.10 OR ip=192.168.1.11
检索除一个IP以外的所有IP的地理IP数据
search index=geoip ip!=192.168.1.15
或
search index=geoip NOT ip=192.268.1.15
从多个索引检索特定IP的数据
不需要按索引搜索。
search ip=192.168.1.15
上面的搜索将从所有索引返回带有ip=192.168.1.15
的数据(在本例中,将返回来自索引geoip
和ip_rdap
的数据;在rdap
中的事件不包含ip
字段)。
2.字段
fields
命令允许您只显示希望看到的字段。
用法
字段…
示例
从结果中删除所有字段,除了ip
和continent_name
:
search index=geoip | fields ip continent_name
三。加入
join
命令允许您通过字段(即“按字段”)将数据连接在一起。为by字段共享相同值的每个事件将在一个事件下连接在一起。这允许您连接来自两个不同数据源的数据。
用法
“按字段加入”<;gt;
示例
使用ip_rdap
和rdap
索引将IP与其关联的RDAP数据连接起来:
search index=ip_rdap OR index=rdap | join BY handle
handle
是“按字段”,由不同类型的数据共享的字段。
四。预打印
prettyprint
命令只能用作搜索中的最后一个命令。它允许您以比普通json blob更漂亮的方式打印结果集。
用法
prettyprint format=<;格式>;
<;格式>;
json表
示例
将结果打印为漂亮的json
使用format=json
仍然将每个结果打印为json,但使用换行和缩进。
search index=rdap | prettyprint format=json
将结果打印为表格
使用format=table
将结果打印为格式化表。
search index=rdap | prettyprint format=table
如果结果集中有很多字段,则结果将溢出到下一行;因此,建议在重新使用prettyprint format=table
。这种情况在将ip_rdap
和rdap
数据连接在一起时尤其会发生。许多IP共享相同的rdap
数据,因此IP值将变得非常长。我建议在执行join
之前指定您感兴趣的IP。