【Elasticsearch】ip_prefix聚合

发布于:2025-02-10 ⋅ 阅读:(61) ⋅ 点赞:(0)

 

在 Elasticsearch 中,`ip_prefix`是一种聚合(aggregation)功能,用于基于 IP 地址的网络前缀对文档进行分组和分析。以下是关于`ip_prefix`的详细说明:


1.定义
`ip_prefix`聚合是一种桶聚合(bucket aggregation),它根据 IP 地址的网络前缀将文档分组到不同的桶中。IP 地址由两部分组成:网络前缀(最显著的位)和主机部分(最不显著的位)。通过指定前缀长度(`prefix_length`),可以将 IP 地址分组到不同的子网络中。


2.用法
以下是使用`ip_prefix`聚合的基本语法和参数说明:


基本语法

```json
GET /<index>/_search
{
  "size": 0,
  "aggs": {
    "<aggregation_name>": {
      "ip_prefix": {
        "field": "<ip_field>",
        "prefix_length": <prefix_length>,
        "is_ipv6": <is_ipv6>,
        "append_prefix_length": <append_prefix_length>,
        "keyed": <keyed>,
        "min_doc_count": <min_doc_count>
      }
    }
  }
}
```

参数说明

• `field`

(必需,字符串)

要聚合的文档 IP 地址字段,字段的映射类型必须是`ip`。


• `prefix_length`

(必需,整数)

网络前缀的长度。对于 IPv4 地址,范围是`[0, 32]`;对于 IPv6 地址,范围是`[0, 128]`。


• `is_ipv6`

(可选,布尔值)

是否对 IPv6 地址进行聚合。默认值为`false`,表示聚合 IPv4 地址。


• `append_prefix_length`

(可选,布尔值)

是否将前缀长度附加到 IP 地址键上。默认值为`false`。


• `keyed`

(可选,布尔值)

是否以哈希表的形式返回桶,而不是数组。默认值为`false`。


• `min_doc_count`

(可选,整数)

桶中包含的最小文档数量。默认值为`1`。


3.示例
以下是一些使用`ip_prefix`聚合的示例:


示例 1:IPv4 地址聚合

```json
GET /network-traffic/_search
{
  "size": 0,
  "aggs": {
    "ipv4-subnets": {
      "ip_prefix": {
        "field": "ipv4",
        "prefix_length": 24
      }
    }
  }
}
```

响应:

```json
{
  "aggregations": {
    "ipv4-subnets": {
      "buckets": [
        {
          "key": "192.168.1.0",
          "is_ipv6": false,
          "doc_count": 4,
          "prefix_length": 24,
          "netmask": "255.255.255.0"
        },
        {
          "key": "192.168.2.0",
          "is_ipv6": false,
          "doc_count": 3,
          "prefix_length": 24,
          "netmask": "255.255.255.0"
        }
      ]
    }
  }
}
```


示例 2:IPv6 地址聚合

```json
GET /network-traffic/_search
{
  "size": 0,
  "aggs": {
    "ipv6-subnets": {
      "ip_prefix": {
        "field": "ipv6",
        "prefix_length": 64,
        "is_ipv6": true
      }
    }
  }
}
```

响应:

```json
{
  "aggregations": {
    "ipv6-subnets": {
      "buckets": [
        {
          "key": "2001:db8:a4f8:112a::",
          "is_ipv6": true,
          "doc_count": 4,
          "prefix_length": 64
        },
        {
          "key": "2001:db8:a4f8:112c::",
          "is_ipv6": true,
          "doc_count": 3,
          "prefix_length": 64
        }
      ]
    }
  }
}
```


示例 3:附加前缀长度

```json
GET /network-traffic/_search
{
  "size": 0,
  "aggs": {
    "ipv4-subnets": {
      "ip_prefix": {
        "field": "ipv4",
        "prefix_length": 24,
        "append_prefix_length": true
      }
    }
  }
}
```

响应:

```json
{
  "aggregations": {
    "ipv4-subnets": {
      "buckets": [
        {
          "key": "192.168.1.0/24",
          "is_ipv6": false,
          "doc_count": 4,
          "prefix_length": 24,
          "netmask": "255.255.255.0"
        },
        {
          "key": "192.168.2.0/24",
          "is_ipv6": false,
          "doc_count": 3,
          "prefix_length": 24,
          "netmask": "255.255.255.0"
        }
      ]
    }
  }
}
```


4.应用场景
`ip_prefix`聚合特别适用于以下场景:

• 网络流量分析:通过聚合 IP 地址,可以快速识别特定子网络中的流量模式。

• 安全监控:分析特定子网络中的异常活动。

• 资源管理:根据子网络分配资源。


5.注意事项

• 性能影响:`ip_prefix`聚合可能会对查询性能产生影响,尤其是在数据量较大时。

• 索引设计:确保 IP 地址字段的映射类型为`ip`,以支持聚合。

通过以上说明和示例,您可以更好地理解和使用 Elasticsearch 中的`ip_prefix`聚合功能。

 


网站公告

今日签到

点亮在社区的每一天
去签到