构建 KQL 查询

Kusto 查询语言 (KQL) 是可用于查询 QRadar® 数据湖的查询语言。 KQL 允许您构建从简单搜索查询到更复杂的聚集查询的各种不同类型的查询。

程序

  1. 转至 菜单 > Data Explorer > 搜索
    提示: 您还可以单击主页中的 开始搜索
  2. 从查询类型下拉列表中,选择 日志/警报 (KQL)
  3. 在查询文本字段中,输入查询。 例如,以下查询将返回过去 5 分钟内的所有事件,最多 10000 个事件。
    events    
        | project original_time, data_source_name, name, user_id, low_level_categories,
            src_ip, src_port, dst_ip, dst_port, payload
        //--- Search for the last 5 minutes of data
        | where original_time > ago(5m)    
        //--- USER Criteria Here    
        | take 10000

    每个以管道字符 (|) 为前缀的过滤器都是具有某些参数的 操作程序的实例。

    以下列表包含可在查询中使用的一些公共 KQL 运算符。

    KQL 运算符 描述
    订单 按一个或多个列对结果进行排序。
    项目 仅返回指定列的子集。 例如,项目 original_time , name 和 payload。
    汇总 将结果排列成在 by 表达式之后具有相同值的组。
    执行 仅返回指定的行数 (采用 5)。
    其中 将结果过滤到自变量中指定的行子集。
    注意:对于 ISO 8601 格式,datetime() 操作符可以用或不用引号括起来。 对于 RFC 822、RFC 850 和可排序格式等其他标准,包含空格的查询必须用引号括起来。

结果

如果查询中存在语法错误,那么将禁用 运行查询 ,直到您解决该错误为止。 将使用红色下划线、包含语法错误详细信息的工具提示和包含语法修订建议的上下文帮助程序突出显示每个语法错误。

在运行查询时,将添加一个“活动查询”卡片。 每个查询在创建后 4 天到期。 到期时间显示在卡上。

示例

返回事件表中的 100 行。

events
| take 100

返回事件数最多的 10 个事件类别。

events_all
| summarize Count=count() by qid_event_category
| order by Count desc
| take 10

返回具有最多事件计数的 10 个数据源。

events
| project data_source_name, original_time
| where data_source_name != ''
| summarize Events=count() by data_source_name
| order by Events desc
| take 10

返回过去一小时内的数据源。

events
| project original_time, data_source_name
| where original_time > ago(1h)  
| summarize Count=count() by Time=bin(original_time, 5m), data_source_name  
| order by Time, data_source_name desc

返回过去 5 分钟内的事件,最多 10000 个事件。

events    
    | project original_time, data_source_name, name, user_id, low_level_categories,
        src_ip, src_port, dst_ip, dst_port, payload
    //--- Search for the last 5 minutes of data
    | where original_time > ago(5m)    
    //--- USER Criteria Here    
    | take 10000

返回过去一小时内最多 10000 个事件

events    
    | project original_time, data_source_name, name, user_id, low_level_categories,
        src_ip, src_port, dst_ip, dst_port, payload
    //--- Search for the last hour of data
    | where original_time > ago(5m)    
    //--- USER Criteria Here    
    | take 10000

搜索过去 24 小时内具有源 IP 地址 127.0.0.1的事件。

events    
    | project original_time, data_source_name, name, user_id, low_level_categories,
        src_ip, src_port, dst_ip, dst_port, payload
    //--- Search for IP = 127.0.0.1 over the last 24 hour of data
    | where original_time > ago(24h) and src_ip = ‘127.0.0.1’  
    //--- USER Criteria Here    
    | take 100

搜索过去 24 小时内没有源 IP 地址 127.0.0.1的事件。

events    
    | project original_time, data_source_name, name, user_id, low_level_categories,
        src_ip, src_port, dst_ip, dst_port, payload
    //--- Search for IP not equal to 127.0.0.1 over the last 24 hour of data
    | where original_time > ago(24h) and src_ip != ‘127.0.0.1’  
    //--- USER Criteria Here    
    | take 100

搜索最近一个小时的事件,其中有效内容与 svchost匹配。

events    
    | project original_time, data_source_name, name, user_id, low_level_categories,
        src_ip, src_port, dst_ip, dst_port, payload
    //--- Search for payload that has a match on ‘svchost’ over last hour
    | where original_time > ago(1h) and payload has ‘svchost’  
    //--- USER Criteria Here    
    | take 100