【问题标题】:Azure data explorer query to lookup country from an IP addressAzure 数据资源管理器查询以从 IP 地址查找国家/地区
【发布时间】:2020-11-04 06:49:28
【问题描述】:

我正在寻求有关构建 KQL 查询以根据 IP 查找国家/地区的帮助。

到目前为止,我有一个名为“事件”的表,其中包含 3 列,如下所示:

用户名、登录时间、来源IP

一个具体的例子是:

鲍勃,2020-04-28T21:29:42Z,1.2.3.4

我还有一张表格,列出了全球网络块/子网安排。数据示例如下:

网络、地名、代码、大陆、ISO、国家

41.74.160.0/24、49518、AF、Africa、FW、卢旺达

ADX 有一个名为 ipv4_is_match() 的函数,如果 IP 地址“存在”在特定子网中,该函数将返回 true。 所以我可以运行这样的查询来返回单个 IP 的位置:

国家数据库 |其中 ipv4_is_match('41.74.160.123', 网络)

我似乎无法弄清楚如何在事件中的所有源 IP 地址上运行它。

我希望这样的工作:

活动 | union ( countryDB where ipv4_is_match(sourceIP, Network) )

谁能建议创建类似这样的连接结果的正确语法是什么:

bob, 2020-04-28T21:29:42Z, 1.2.3.4, 41.74.160.0/24, 49518, AF, Africa, FW, Rwanda

【问题讨论】:

    标签: azure azure-data-explorer kql


    【解决方案1】:

    这是一种方法,使用虚拟列上的连接来创建笛卡尔积,然后过滤匹配项。这是一个例子:

    let Events = datatable(username:string, logintime:datetime, sourceIP:string) [ "bob", datetime(2020-04-28T21:29:42Z), "41.74.160.0"];
    let CountryDB = datatable(Network:string, geoname:string, code:string, continent:string, ISO:string, country:string)["41.74.160.0/24", "49518", "AF", "Africa", "FW", "Rwanda"];
    Events
    | extend Dummy = 1
    | lookup (CountryDB | extend Dummy=1) on Dummy
    | where ipv4_is_match(sourceIP, Network)
    | project-away Dummy
    

    【讨论】:

    • 谢谢!这是一个很酷的方法。该示例有效,但它对我的数据失败,因为数据集太大(查询执行导致错误(0x80DA0007))。这是因为事件表很大。关于如何管理的任何想法?
    • 看看分区运算符:docs.microsoft.com/en-us/azure/data-explorer/kusto/query/…。另一种策略是在摄取期间使用更新策略来丰富表,这应该会有所帮助,因为查询将在每次执行中在有限的数据集上运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2020-04-07
    • 2011-02-23
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多