Geoip 过滤器插件编辑

  • 插件版本:v7.2.13
  • 发布日期:2023-02-07
  • 变更日志

有关其他版本,请参阅版本化插件文档

获取帮助编辑

如果您对该插件有任何疑问,请在论坛中打开一个主题。 对于错误或功能请求,请在Github中打开一个问题。 有关 Elastic 支持的插件列表,请参阅Elastic 支持矩阵

描述编辑

GeoIP 过滤器根据 MaxMind GeoLite2 数据库中的数据添加有关 IP 地址地理位置的信息。

支持的数据库编辑

此插件默认捆绑了GeoLite2 城市数据库。 根据 MaxMind 的描述 - “GeoLite2 数据库是免费的 IP 地理位置数据库,与 MaxMind 的 GeoIP2 数据库相当,但准确性较低”。 有关更多详细信息,请参阅 GeoIP Lite2 许可证。

此插件还支持 MaxMind 的商业数据库

如果您需要使用捆绑的 GeoLite2 城市数据库以外的数据库,您可以直接从 MaxMind 的网站下载它们,并使用database选项指定它们的位置。 GeoLite2 数据库可以从此处下载。

如果您想获取自治系统编号 (ASN) 信息,可以使用 GeoLite2-ASN 数据库。

数据库许可证编辑

MaxMind 已将 GeoIP 数据库的许可证从知识共享 (CC) 许可证更改为专有最终用户许可协议 (EULA)。 MaxMind EULA 要求 Logstash 在数据库更新后的 30 天内更新 MaxMind 数据库。

GeoIP 过滤器插件可以为运行 Logstash 默认发行版的用户管理数据库,您也可以自行管理数据库更新。 该行为由database设置和自动更新功能控制。 当您使用默认的database设置并且启用了自动更新功能时,Logstash 会确保插件使用的是最新版本的数据库。 否则,您需要负责维护合规性。

Logstash 开源发行版默认使用 MaxMind 知识共享许可证数据库。

数据库自动更新编辑

此插件捆绑了知识共享 (CC) 许可证数据库。 如果在logstash.yml中启用了自动更新功能(默认情况下启用),Logstash 每天都会检查数据库更新。 它会下载最新版本,并且可以在插件运行时替换旧数据库。

如果禁用了自动更新功能或数据库从未成功更新过(例如在离线环境中),Logstash 可以无限期地使用 CC 许可证数据库。

在 Logstash 切换到 EULA 许可的数据库后,如果 Logstash 未能在 30 天内检查数据库更新,则 geoip 过滤器将停止丰富事件以保持合规性。 事件将使用_geoip_expired_database标签进行标记,以便于处理这种情况。

如果启用了自动更新功能,Logstash 会在第一次下载时从 CC 数据库许可证升级到 EULA 版本。

如果可能,请允许 Logstash 访问互联网以下载数据库,以便它们始终保持最新状态。

禁用自动更新功能

如果您在离线环境中工作并且想要禁用数据库自动更新功能,请在logstash.yml中将xpack.geoip.downloader.enabled值设置为false

禁用自动更新功能后,Logstash 将无限期地使用知识共享 (CC) 许可证数据库,并且任何先前下载的 EULA 数据库版本都将被删除。

管理您自己的数据库更新编辑

使用 HTTP 代理

如果您无法直接连接到 Elastic GeoIP 端点,请考虑设置 HTTP 代理服务器。 然后,您可以使用http_proxy环境变量指定代理。

export http_proxy="http://PROXY_IP:PROXY_PORT"

使用自定义端点(离线环境)

如果您在离线环境中工作并且无法从 Elastic 端点更新数据库,则可以从 MaxMind 下载数据库并引导服务。

  1. MaxMind 网站下载GeoLite2-ASN.mmdbGeoLite2-City.mmdb数据库文件。
  2. 将两个数据库文件复制到单个目录。
  3. 下载 Elasticsearch.
  4. 从您的 Elasticsearch 目录运行

    ./bin/elasticsearch-geoip -s my/database/dir
  5. 从您的目录提供静态数据库文件。 例如,您可以使用 Docker 从 nginx 服务器提供文件

    docker run -p 8080:80 -v my/database/dir:/usr/share/nginx/html:ro nginx
  6. logstash.yml中使用xpack.geoip.download.endpoint=https://127.0.0.1:8080/overview.json设置指定服务的端点 URL。

Logstash 从此服务获取自动更新。

数据库指标编辑

您可以通过节点统计信息 API监控数据库状态。

以下请求返回一个 JSON 文档,其中包含数据库管理器统计信息,包括

  • 数据库状态和新鲜度

    • geoip_download_manager.database.*.status

      • init:初始 CC 数据库状态
      • up_to_date:使用最新的 EULA 数据库
      • to_be_expired:25 天未调用服务
      • expired:30 天未调用服务
    • fail_check_in_days:自上次成功调用服务以来,Logstash 无法调用服务的天数
  • 有关下载成功和失败的信息

    • geoip_download_manager.download_stats.successes 成功检查和下载的次数
    • geoip_download_manager.download_stats.failures 检查或下载失败的次数
    • geoip_download_manager.download_stats.status

      • updating:当前正在检查和下载
      • succeeded:上次下载成功
      • failed:上次下载失败
curl -XGET 'localhost:9600/_node/stats/geoip_download_manager?pretty'

示例响应

{
  "geoip_download_manager" : {
    "database" : {
      "ASN" : {
        "status" : "up_to_date",
        "fail_check_in_days" : 0,
        "last_updated_at": "2021-06-21T16:06:54+02:00"
      },
      "City" : {
        "status" : "up_to_date",
        "fail_check_in_days" : 0,
        "last_updated_at": "2021-06-21T16:06:54+02:00"
      }
    },
    "download_stats" : {
      "successes" : 15,
      "failures" : 1,
      "last_checked_at" : "2021-06-21T16:07:03+02:00",
      "status" : "succeeded"
    }
  }
}

字段映射编辑

当此插件在禁用ecs_compatibility的情况下运行时,MaxMind DB 的字段将直接添加到target。 启用 ECS 兼容性后,字段的结构将符合 ECS 形状。

数据库字段名称 ECS 字段 示例

ip

[ip]

12.34.56.78

city_name

[geo][city_name]

西雅图

country_name

[geo][country_name]

美国

continent_code

[geo][continent_code]

NA

continent_name

[geo][continent_name]

北美洲

country_code2

[geo][country_iso_code]

US

country_code3

不适用

US

为保持向后兼容性而保留,但填充了 2 个字符的国家/地区代码

postal_code

[geo][postal_code]

98106

region_name

[geo][region_name]

华盛顿州

region_code

[geo][region_code]

WA

region_iso_code*

[geo][region_iso_code]

US-WA

timezone

[geo][timezone]

America/Los_Angeles

location*

[geo][location]

{"lat": 47.6062, "lon": -122.3321}"

latitude

[geo][location][lat]

47.6062

longitude

[geo][location][lon]

-122.3321

domain

[domain]

example.com

asn

[as][number]

98765

as_org

[as][organization][name]

Elastic, NV

isp

[mmdb][isp]

InterLink Supra LLC

dma_code

[mmdb][dma_code]

819

organization

[mmdb][organization]

Elastic, NV

* 表示复合字段,仅当 GeoIP 查找结果包含所有组件时才会填充。

详情编辑

使用城市数据库时,如果没有可用的纬度/经度对,则会中止充实。

location字段将纬度和经度组合成一个称为GeoJSON的结构。 当您使用默认的target时,elasticsearch 输出提供的模板会将该字段映射到Elasticsearch Geo_point 数据类型

由于此字段是geo_point并且它仍然是有效的 GeoJSON,因此您可以获得 Elasticsearch 地理空间查询、分面和过滤函数的强大功能,以及为所有其他应用程序(如 Kibana 的地图可视化)使用 GeoJSON 的灵活性。

本产品包含由 MaxMind 创建的 GeoLite2 数据,可从 http://www.maxmind.com 获取。此数据库根据 知识共享署名-相同方式共享 4.0 国际许可协议 授权。

GeoIP 过滤器 4.0.0 及更高版本使用 MaxMind GeoLite2 数据库,并支持 IPv4 和 IPv6 查找。4.0.0 之前的版本使用旧版 MaxMind GeoLite 数据库,并且仅支持 IPv4 查找。

Geoip 过滤器配置选项编辑

除了稍后描述的通用选项之外,此插件还支持以下配置选项。

设置 输入类型 是否必需

cache_size

数字

database

有效的系统文件路径

default_database_type

CityASN

ecs_compatibility

字符串

fields

数组

source

字符串

tag_on_failure

数组

target

字符串

另请参阅通用选项,以获取所有过滤器插件支持的选项列表。

 

cache_size编辑

  • 值类型为数字
  • 默认值为 1000

GeoIP 查找的成本非常高。此过滤器使用缓存来利用以下事实:IP 代理通常在日志文件中彼此相邻,并且很少随机分布。此值设置得越高,项目在缓存中的可能性就越大,并且此过滤器的运行速度就越快。但是,如果将其设置得太高,则可能会使用比预期更多的内存。由于 Geoip API 已升级到 v2,因此到目前为止没有任何驱逐策略,如果缓存已满,则无法添加更多记录。尝试使用此选项的不同值,为您的数据集找到最佳性能。

此值必须设置为 > 0。确实没有理由不希望这种行为,开销很小,而速度提升很大。

请务必注意,此配置值对 geoip_type 是全局的。也就是说,相同 geoip_type 的 geoip 过滤器的所有实例共享相同的缓存。最后声明的缓存大小将*获胜*。这样做的原因是,在管道中的不同点为不同的实例设置多个缓存没有任何好处,这只会增加缓存未命中的次数并浪费内存。

database编辑

  • 值类型为路径
  • 如果未指定,则数据库默认为 Logstash 附带的 GeoLite2 City 数据库。

Logstash 应使用的 MaxMind 数据库文件的路径。默认数据库为 GeoLite2-City。此插件支持多个免费数据库(GeoLite2-CityGeoLite2-CountryGeoLite2-ASN)和一些商业许可的数据库(GeoIP2-CityGeoIP2-ISPGeoIP2-Country)。

数据库自动更新适用于默认发行版。当 database 指向用户数据库路径时,将禁用自动更新。有关更多信息,请参阅数据库许可证

default_database_type编辑

此插件现在包含 GeoLite2-City 和 GeoLite2-ASN 数据库。如果未设置 databasedefault_database_type,则将选择 GeoLite2-City 数据库。要使用包含的 GeoLite2-ASN 数据库,请将 default_database_type 设置为 ASN

  • 值类型为字符串
  • 默认值为 City
  • 唯一可接受的值为 CityASN

fields编辑

  • 值类型为数组
  • 此设置没有默认值。

要包含在事件中的 geoip 字段数组。

可能的字段取决于数据库类型。默认情况下,相关数据库中的所有 geoip 字段都包含在事件中。

有关可用字段的完整列表以及它们如何映射到事件结构,请参阅字段映射

ecs_compatibility编辑

  • 值类型为字符串
  • 支持的值为

    • disabled:在根级别添加的非结构化地理数据
    • v1v8:使用与 Elastic Common Schema 兼容的字段。例如:[client][geo][country_name]。有关更多信息,请参阅字段映射
  • 默认值取决于运行的 Logstash 版本

    • 当 Logstash 提供 pipeline.ecs_compatibility 设置时,其值将用作默认值
    • 否则,默认值为 disabled

控制此插件与Elastic Common Schema (ECS) 的兼容性。此设置的值会影响target 的*默认*值。

source编辑

  • 这是一个必需的设置。
  • 值类型为字符串
  • 此设置没有默认值。

包含要通过 geoip 映射的 IP 地址或主机名的字段。如果此字段是一个数组,则只会使用第一个值。

tag_on_failure编辑

  • 值类型为数组
  • 默认值为 ["_geoip_lookup_failure"]

如果无法查找地理信息,则会标记事件。这可以在以后的分析中使用。

target编辑

  • 这是一个可选设置,有条件限制。
  • 值类型为字符串
  • 默认值取决于是否启用了ecs_compatibility

    • ECS 兼容性已禁用:geoip
    • ECS 兼容性已启用:如果 sourceip 子字段,例如 [client][ip],则 target 将自动设置为父字段,在本例中为 client,否则,target 是必需的设置

      • geo 字段嵌套在 [client][geo]
      • 与 ECS 兼容的值为 clientdestinationhostobserverserversource

指定 Logstash 应将 geoip 数据存储到的字段。例如,如果您有 src_ipdst_ip 字段,并且希望获得两个 IP 的 GeoIP 信息,则此选项会很有用。

如果将数据保存到 geoip 以外的目标字段,并且希望在 Elasticsearch 中使用 geo_point 相关函数,则需要更改 Elasticsearch 输出提供的模板,并将输出配置为使用新模板。

即使您不使用 geo_point 映射,[target][location] 字段仍然是有效的 GeoJSON。

通用选项编辑

以下配置选项受所有过滤器插件支持

add_field编辑

  • 值类型为哈希
  • 默认值为 {}

如果此过滤器成功,则将任意字段添加到此事件。字段名称可以是动态的,并且可以使用 %{field} 包含事件的一部分。

示例

    filter {
      geoip {
        add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
      }
    }
    # You can also add multiple fields at once:
    filter {
      geoip {
        add_field => {
          "foo_%{somefield}" => "Hello world, from %{host}"
          "new_field" => "new_static_value"
        }
      }
    }

如果事件的字段 "somefield" == "hello",则此过滤器在成功时将添加字段 foo_hello(如果存在),其值为上述值,并将 %{host} 部分替换为事件中的该值。第二个示例还将添加一个硬编码字段。

add_tag编辑

  • 值类型为数组
  • 默认值为 []

如果此过滤器成功,则将任意标记添加到事件。标记可以是动态的,并且可以使用 %{field} 语法包含事件的一部分。

示例

    filter {
      geoip {
        add_tag => [ "foo_%{somefield}" ]
      }
    }
    # You can also add multiple tags at once:
    filter {
      geoip {
        add_tag => [ "foo_%{somefield}", "taggedy_tag"]
      }
    }

如果事件的字段 "somefield" == "hello",则此过滤器在成功时将添加标记 foo_hello(当然,第二个示例将添加 taggedy_tag 标记)。

enable_metric编辑

禁用或启用此特定插件实例的指标日志记录。默认情况下,我们会记录所有可以记录的指标,但您可以禁用特定插件的指标收集。

id编辑

  • 值类型为字符串
  • 此设置没有默认值。

向插件配置添加唯一的 ID。如果未指定 ID,Logstash 将生成一个 ID。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,例如,如果您有两个 geoip 过滤器,这将特别有用。在这种情况下,添加命名 ID 将有助于在使用监控 API 时监控 Logstash。

    filter {
      geoip {
        id => "ABC"
      }
    }

id 字段中的变量替换仅支持环境变量,不支持使用密钥库中的值。

periodic_flush编辑

定期调用过滤器刷新方法。可选。

remove_field编辑

  • 值类型为数组
  • 默认值为 []

如果此过滤器成功,则从此事件中删除任意字段。字段名称可以是动态的,并且可以使用 %{field} 示例包含事件的一部分。

    filter {
      geoip {
        remove_field => [ "foo_%{somefield}" ]
      }
    }
    # You can also remove multiple fields at once:
    filter {
      geoip {
        remove_field => [ "foo_%{somefield}", "my_extraneous_field" ]
      }
    }

如果事件具有字段 "somefield" == "hello",则此过滤器在成功时将删除名称为 foo_hello 的字段(如果存在)。第二个示例将删除另一个非动态字段。

remove_tag编辑

  • 值类型为数组
  • 默认值为 []

如果此过滤器成功,则从事件中删除任意标签。标签可以是动态的,并且可以使用 %{field} 语法包含事件的一部分。

示例

    filter {
      geoip {
        remove_tag => [ "foo_%{somefield}" ]
      }
    }
    # You can also remove multiple tags at once:
    filter {
      geoip {
        remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"]
      }
    }

如果事件具有字段 "somefield" == "hello",则此过滤器在成功时将删除标签 foo_hello(如果存在)。第二个示例还将删除一个令人悲伤的多余标签。