帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:OUT  GEO  输出  plugin  Fluentd  Fluent  Geoip  
Fluentd output plugin to geolocate with geoip.

  • 源代码名称:fluent-plugin-geoip
  • 源代码网址:http://www.github.com/y-ken/fluent-plugin-geoip
  • fluent-plugin-geoip源代码文档
  • fluent-plugin-geoip源代码下载
  • Git URL:
    git://www.github.com/y-ken/fluent-plugin-geoip.git
  • Git Clone代码到本地:
    git clone http://www.github.com/y-ken/fluent-plugin-geoip
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/y-ken/fluent-plugin-geoip
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • fluent-plugin-geoip Build Status

    Fluentd筛选/输出插件,以添加有关 Maxmind GeoIP数据库的IP地址地理位置的信息。

    默认情况下,fluent-plugin-geoip捆绑了免费的GeoLite2免费下载数据库GeoLite城市数据库。
    此外,你还可以使用购买的GeoIP City数据库 ( lang:ja ) 从 $50开始。

    以下页面描述了 GeoLite City ( 免费) 和 GeoIP City ( 已经购买)的准确细节。

    要求

    fluent-plugin-geoip fluentd ruby
    > = 1.0.0> = v1.0.2> = 2.1
    <1.0.0> = v0.12.0> = 1.9

    如果你想在 Fluentd v0.12. x 或者更早的使用 0.8. x. 时使用这个插件

    兼容性通知

    我们在这个插件中使用了 Fluentd v1 API自 1.0.0年以来。 我们从GeoipOutput中删除了一些特性。

    请参见官方文档。

    :: mixin:: rewritetagname
    • ${tag}__TAG__

      替代:使用 ${tag} 占位符

    • ${tag_parts[n]}__TAG_PARTS[n]__

      替代:使用 ${tag[n]} 占位符

    • ${hostname}__HOSTNAME__

      Alternative1: 在这里插件和区块密钥之前使用过滤器:

      <filter>
       @type record_transformer
       <record>
       hostname ${hostname}
       </record>
      </filter>
      <match **>
       @type geoip
       tag geoip.${tag[1]}.${hostname}
       <record>
       city ${city["host"]}
       </record>
       <buffer tag, hostname>
       flush_interval 1s
       </buffer>
      </match>

      Alternative2: 只需将主机名插入记录即可使用 <inject> 部分:

      <match **>
       @type geoip
       tag geoip.${tag[1]}.${hostname}
       <record>
       city ${city["host"]}
       </record>
       <inject>
       hostname_key hostname
       </inject>
      </match>

    依赖项

    使用前,请将依赖库安装为:

    # for RHEL/CentOS$ sudo yum groupinstall "Development Tools"$ sudo yum install geoip-devel --enablerepo=epel# for Ubuntu/Debian$ sudo apt-get install build-essential
    $ sudo apt-get install libgeoip-dev# for OS X$ brew install geoip
    $ bundle config build.geoip-c --with-geoip-dir=/usr/local/include/

    安装

    使用 gem 或者td代理提供以下命令:

    # for fluentd$ gem install fluent-plugin-geoip# for td-agent$ sudo/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-geoip# for td-agent2$ sudo td-agent-gem install fluent-plugin-geoip

    用法

    用于GeoipFilter的

    请注意,geoip插件的过滤器版本没有处理标记功能。

    <filter access.apache>
     @type geoip
     # Specify one or more geoip lookup field which has ip address (default: host)
     # in the case of accessing nested value, delimit keys by dot like 'host.ip'.
     geoip_lookup_key host
     # Specify optional geoip database (using bundled GeoLiteCity databse by default)
     # geoip_database"/path/to/your/GeoIPCity.dat"
     # Specify optional geoip2 database
     # geoip2_database"/path/to/your/GeoLite2-City.mmdb" (using bundled GeoLite2-City.mmdb by default)
     # Specify backend library (geoip2_c, geoip, geoip2_compat)
     backend_library geoip2_c
     # Set adding field with placeholder (more than one settings are required.)
     <record>
     city ${city.names.en["host"]}
     latitude ${location.latitude["host"]}
     longitude ${location.longitude["host"]}
     country ${country.iso_code["host"]}
     country_name ${country.names.en["host"]}
     postal_code ${postal.code["host"]}
     </record>
     # To avoid get stacktrace error with `[null, null]` array for elasticsearch.
     skip_adding_null_record true
     # Set @log_level (default: warn)
     @log_level info
    </filter>
    提示:如何处理多个密钥
    <filter access.apache>
     @type geoip
     geoip_lookup_key user1_host, user2_host
     <record>
     user1_city ${city.names.en["user1_host"]}
     user2_city ${city.names.en["user2_host"]}
     </record>
    </filter>
    高级配置示例

    它是使用 Yajl ( JSON ) 解析器获得elasticsearch的友好地理点recdords的示例。

    <filter access.apache>
     @type geoip
     geoip_lookup_key host
     <record>
     # lat lon as properties
     # ex. {"lat" => 37.4192008972168,"lon" => -122.05740356445312 }
     location_properties '{"lat" : ${location.latitude["host"]},"lon" : ${location.longitude["host"]} }'
     # lat lon as string
     # ex."37.4192008972168,-122.05740356445312"
     location_string ${location.latitude["host"]},${location.longitude["host"]}
     # GeoJSON (lat lon as array) is useful for Kibana's bettermap.
     # ex. [-122.05740356445312, 37.4192008972168]
     location_array '[${location.longitude["host"]},${location.latitude["host"]}]'
     </record>
     # To avoid get stacktrace error with `[null, null]` array for elasticsearch.
     skip_adding_null_record true
    </filter>

    在使用 td-agent3 ( v1-config ) 时,它必须引用 {.. . } 或者 [.. . ] 块,如下所示。

    <filter access.apache>
     @type geoip
     geoip_lookup_key host
     <record>
     location_properties '{"lat" : ${location.latitude["host"]},"lon" : ${location.longitude["host"]} }'
     location_string ${location.latitude["host"]},${location.longitude["host"]}
     location_array '[${location.longitude["host"]},${location.latitude["host"]}]'
     </record>
     skip_adding_null_record true
    </filter>

    用于GeoipOutput的

    <match access.apache>
     @type geoip
     # Specify one or more geoip lookup field which has ip address (default: host)
     # in the case of accessing nested value, delimit keys by dot like 'host.ip'.
     geoip_lookup_key host
     # Specify optional geoip database (using bundled GeoLiteCity databse by default)
     geoip_database"/path/to/your/GeoIPCity.dat"
     # Specify optional geoip2 database
     # geoip2_database"/path/to/your/GeoLite2-City.mmdb"
     # Specify backend library (geoip, geoip2_compat, geoip2_c)
     backend_library geoip
     # Set adding field with placeholder (more than one settings are required.)
     <record>
     latitude ${location.latitude["host"]}
     longitude ${location.longitude["host"]}
     country ${country.iso_code["host"]}
     country_name ${country.names.en["host"]}
     postal_code ${postal.code["host"]}
     region ${subdivisions.0.iso_code["host"]}
     region_name ${subdivisions.0.names.en["host"]}
     city ${city.names.en["host"]}
     </record>
     # Settings for tag
     tag geoip.${tag[1]}
     # To avoid get stacktrace error with `[null, null]` array for elasticsearch.
     skip_adding_null_record true
     # Set @log_level (default: warn)
     @log_level info
     <buffer tag>
     # Set buffering time (default: 0s)
     flush_interval 1s
     </buffer>
    </match>

    教程

    用于GeoipFilter的

    配置
    <source>
     @type forward
    </source>
    <filter test.geoip>
     @type geoip
     geoip_lookup_key host
     <record>
     city ${city.names.en["host"]}
     lat ${location.latitude["host"]}
     lon ${location.longitude["host"]}
     </record>
    </filter>
    <match test.**>
     @type stdout
    </match>
    结果
    # forward record with Google's ip address.$ echo'{"host":"66.102.9.80","message":"test"}'| fluent-cat test.geoip# check the result at stdout$ tail/var/log/td-agent/td-agent.log
    2016-02-01 12:04:37 +0900 test.geoip: {"host":"66.102.9.80","message":"test","city":"Mountain View","lat":37.4192008972168,"lon":-122.05740356445312}

    你可以使用工具 utils/dump检查geoip数据格式。

    $ bundle exec ruby urils/dump.rb geoip2 66.102.3.80
    $ bundle exec ruby urils/dump.rb geoip2_compat 66.102.3.80
    $ bundle exec ruby urils/dump.rb geoip 66.102.3.80

    用于GeoipOutput的

    配置
    <source>
     @type forward
    </source>
    <match test.geoip>
     @type copy
     <store>
     @type stdout
     </store>
     <store>
     @type geoip
     geoip_lookup_key host
     <record>
     lat ${location.latitude["host"]}
     lon ${location.longitude["host"]}
     country ${country.iso_code["host"]}
     </record>
     tag debug.${tag[1]}
     </store>
    </match>
    <match debug.**>
     @type stdout
    </match>
    结果
    # forward record with Google's ip address.$ echo'{"host":"66.102.9.80","message":"test"}'| fluent-cat test.geoip# check the result at stdout$ tail/var/log/td-agent/td-agent.log
    2013-08-04 16:21:32 +0900 test.geoip: {"host":"66.102.9.80","message":"test"}
    2013-08-04 16:21:32 +0900 debug.geoip: {"host":"66.102.9.80","message":"test","lat":37.4192008972168,"lon":-122.05740356445312,"country":"US"}

    你可以使用工具 utils/dump检查geoip数据格式。

    $ bundle exec ruby urils/dump.rb geoip2 66.102.3.80
    $ bundle exec ruby urils/dump.rb geoip2_compat 66.102.3.80
    $ bundle exec ruby urils/dump.rb geoip 66.102.3.80

    占位符

    GeoIP2

    你可以在 GeoLite2 数据库和 GeoIP2下载数据库获取任何字段。

    例如( geoip2_c后端):

    占位符属性输出示例说明
    ${city.names.en[lookup_field]}"视图""-
    ${location.latitude[lookup_field]}37.419200000000004-
    ${location.longitude[lookup_field]}-122.0574-
    ${country.iso_code[lookup_field]}"我们""-
    ${country.names.en[lookup_field]}"美国""-
    ${postal.code[lookup_field]}"94043"-
    ${subdivisions.0.iso_code[lookup_field]}CA"-
    ${subdivisions.0.names.en[lookup_field]}加利福尼亚州""-

    例如( geoip2_compat后端):

    占位符属性输出示例说明
    ${city[lookup_field]}"视图""-
    ${latitude[lookup_field]}37.419200000000004-
    ${longitude[lookup_field]}-122.0574-
    ${country_code[lookup_field]}"我们""-
    ${country_name[lookup_field]}"美国""-
    ${postal_code[lookup_field]}"94043"
    ${region[lookup_field]}CA"-
    ${region_name[lookup_field]}加利福尼亚州""-

    英镑注释:geoip2_compat后端只支持上述字段。

    相关配置:

    • backend_library: geoip2_compat 或者 geoip2_c
    • geoip2_database: 你的GeoLite2-City.mmdb的路径

    GeoIP legacy

    提供了这些占位符,用于添加geolocate结果的字段。
    例如你可以尝试这些网站,如 Geo IP地址视图或者查看我的IP信息。

    占位符属性输出示例注释
    ${city[lookup_field]}Ithaca""varchar ( 255 )-
    ${latitude[lookup_field]}42.4277992248535十进制-
    ${longitude[lookup_field]}-76.4981994628906十进制-
    ${country_code3[lookup_field]}"美国""varchar ( 3 )-
    ${country_code[lookup_field]}"我们""varchar ( 2 )两个字符 ISO 3166 -1国家代码
    ${country_name[lookup_field]}"美国""varchar ( 50 )-
    ${dma_code[lookup_field]}555无符号整型只给我们英镑。
    ${area_code[lookup_field]}607字符( 3 )只给我们英镑。
    ${region[lookup_field]}NY约克""字符( 2 )两个字符ISO-3166-2或者 10 -4代码

    更多规格可以在 http://dev.maxmind.com/geoip/legacy/csv/#GeoIP_City_Edition_CSV_Database_Fields 使用。

    相关配置:

    • backend_library: geoip ( 默认)
    • geoip_database: 你的GeoLiteCity.dat的路径

    参数

    GeoipFilter

    请注意,geoip 插件的过滤器版本没有处理 tag 功能。

    插件插件助手

    请参见过滤器插件概述。

    支持部分参数

    插件通用Paramteters插件

    geoip_database ( 字符串) ( 可选)

    • 默认值:捆绑的数据库 GeoLiteCity.dat

    GeoIP数据库文件的路径。

    geoip2_database ( 字符串) ( 可选)

    • 默认值:捆绑的数据库 GeoLite2-City.mmdb

    GeoIP2数据库文件的路径。

    geoip_lookup_key ( 字符串) ( 可选)

    • 默认值:host

    指定一个或者多个具有IP地址的geoip查找字段。

    skip_adding_null_record ( bool ) ( 可选)

    • 默认值:nil

    当这里valaues到 true 时跳过添加geoip字段。 在获取GeoIP信息( 例如本地 IP )的情况下,它将输出原始记录,而不会更改任何内容。

    backend_library ( enum ) ( 可选)

    • 可用值:geoipgeoip2_compatgeoip2_c
    • 默认值:geoip2_c

    设置后端库。

    GeoipOutput

    插件插件助手

    请参见输出插件概述。

    参数

    插件通用Paramteters插件

    geoip_database ( 字符串) ( 可选)

    • 默认值:捆绑的数据库 GeoLiteCity.dat

    GeoIP数据库文件的路径。

    geoip2_database ( 字符串) ( 可选)

    • 默认值:捆绑的数据库 GeoLite2-City.mmdb

    GeoIP2数据库文件的路径。

    geoip_lookup_key ( 字符串) ( 可选)

    • 默认值:host

    指定一个或者多个具有IP地址的geoip查找字段。

    skip_adding_null_record ( bool ) ( 可选)

    • 默认值:nil

    当这里valaues到 true 时跳过添加geoip字段。 在获取GeoIP信息( 例如本地 IP )的情况下,它将输出原始记录,而不会更改任何内容。

    backend_library ( enum ) ( 可选)

    • 可用值:geoipgeoip2_compatgeoip2_c
    • 默认值:geoip2_c

    设置后端库。

    标记 ( 字符串) ( 可选)

    将这里选项与 tag geoip.${tag} ( 测试代码在 test_out_geoip.rb 可用。) 等标记占位符一起使用。

    文章

    待办事项

    请求请求非常欢迎 !

    • fork
    • 创建你的特征分支( git checkout -b my-new-feature )
    • 提交你的更改( git commit -am 'Add some feature' )
    • 推送到分支( git push origin my-new-feature )
    • 创建新的拉请求

    版权

    版权所有( c ) 2013 - Kentaro Yoshida ( @yoshi_ken )

    许可证

    Apache许可,版本 2.0

    这里产品包括由MaxMind创建的GeoLite数据,可以从 http://www.maxmind.com 获得。



    文章标签:plugin  OUT  GEO  输出  Fluent  Geoip  Fluentd  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语