使用查找丰富数据

编辑

这些插件可以帮助您使用其他信息来丰富数据,例如 GeoIP 和用户代理信息

查找插件

编辑
dns 过滤器

dns 过滤器插件执行标准或反向 DNS 查找。

以下配置对 source_host 字段中的地址执行反向查找,并将其替换为域名

filter {
  dns {
    reverse => [ "source_host" ]
    action => "replace"
  }
}
elasticsearch 过滤器

elasticsearch 过滤器将 Elasticsearch 中先前日志事件的字段复制到当前事件。

以下配置显示了如何使用此过滤器的完整示例。 每当 Logstash 接收到“end”事件时,它会使用此 Elasticsearch 过滤器基于某些操作标识符查找匹配的“start”事件。 然后,它将 “start” 事件的 @timestamp 字段复制到 “end” 事件的新字段中。 最后,结合使用 date 过滤器和 ruby 过滤器,示例中的代码计算两个事件之间的小时持续时间。

      if [type] == "end" {
         elasticsearch {
            hosts => ["es-server"]
            query => "type:start AND operation:%{[opid]}"
            fields => { "@timestamp" => "started" }
         }
         date {
            match => ["[started]", "ISO8601"]
            target => "[started]"
         }
         ruby {
            code => 'event.set("duration_hrs", (event.get("@timestamp") - event.get("started")) / 3600) rescue nil'
        }
      }
geoip 过滤器

geoip 过滤器添加有关 IP 地址位置的地理信息。 例如

filter {
  geoip {
    source => "clientip"
  }
}

应用 geoip 过滤器后,事件将通过 geoip 字段进行丰富。 例如

filter {
  geoip {
    source => "clientip"
  }
}
http 过滤器
http 过滤器与外部 Web 服务/REST API 集成,并支持针对任何 HTTP 服务或端点进行查找丰富。 此插件非常适合许多丰富用例,例如社交 API、情感 API、安全源 API 和业务服务 API。
jdbc_static 过滤器

jdbc_static 过滤器使用从远程数据库预加载的数据来丰富事件。

以下示例从远程数据库获取数据,将其缓存在本地数据库中,并使用查找来使用本地数据库中缓存的数据来丰富事件。

filter {
  jdbc_static {
    loaders => [ 
      {
        id => "remote-servers"
        query => "select ip, descr from ref.local_ips order by ip"
        local_table => "servers"
      },
      {
        id => "remote-users"
        query => "select firstname, lastname, userid from ref.local_users order by userid"
        local_table => "users"
      }
    ]
    local_db_objects => [ 
      {
        name => "servers"
        index_columns => ["ip"]
        columns => [
          ["ip", "varchar(15)"],
          ["descr", "varchar(255)"]
        ]
      },
      {
        name => "users"
        index_columns => ["userid"]
        columns => [
          ["firstname", "varchar(255)"],
          ["lastname", "varchar(255)"],
          ["userid", "int"]
        ]
      }
    ]
    local_lookups => [ 
      {
        id => "local-servers"
        query => "select descr as description from servers WHERE ip = :ip"
        parameters => {ip => "[from_ip]"}
        target => "server"
      },
      {
        id => "local-users"
        query => "select firstname, lastname from users WHERE userid = :id"
        parameters => {id => "[loggedin_userid]"}
        target => "user" 
      }
    ]
    # using add_field here to add & rename values to the event root
    add_field => { server_name => "%{[server][0][description]}" }
    add_field => { user_firstname => "%{[user][0][firstname]}" } 
    add_field => { user_lastname => "%{[user][0][lastname]}" }
    remove_field => ["server", "user"]
    jdbc_user => "logstash"
    jdbc_password => "example"
    jdbc_driver_class => "org.postgresql.Driver"
    jdbc_driver_library => "/tmp/logstash/vendor/postgresql-42.1.4.jar"
    jdbc_connection_string => "jdbc:postgresql://remotedb:5432/ls_test_2"
  }
}

查询外部数据库以获取将在本地缓存的数据集。

定义用于构建本地数据库结构的列、类型和索引。列名称和类型应与外部数据库匹配。

对本地数据库执行查找查询以丰富事件。

指定将存储查找数据的事件字段。如果查找返回多个列,则数据将作为 JSON 对象存储在该字段中。

从 JSON 对象中获取数据,并将其存储在顶级事件字段中,以便在 Kibana 中更轻松地进行分析。

jdbc_streaming 过滤器

jdbc_streaming 过滤器使用数据库数据来丰富事件。

以下示例执行 SQL 查询并将结果集存储在名为 country_details 的字段中

filter {
  jdbc_streaming {
    jdbc_driver_library => "/path/to/mysql-connector-java-5.1.34-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/mydatabase"
    jdbc_user => "me"
    jdbc_password => "secret"
    statement => "select * from WORLD.COUNTRY WHERE Code = :code"
    parameters => { "code" => "country_code"}
    target => "country_details"
  }
}
memcached 过滤器
memcached 过滤器支持针对 Memcached 对象缓存系统进行键/值查找丰富。它同时支持读取 (GET) 和写入 (SET) 操作。 对于安全分析用例,它是一个值得注意的补充。
translate 过滤器

translate 过滤器基于哈希或文件中指定的替换值来替换字段内容。目前支持以下文件类型:YAML、JSON 和 CSV。

以下示例获取 response_code 字段的值,根据字典中指定的值将其转换为描述,然后从事件中删除 response_code 字段

filter {
  translate {
    field => "response_code"
    destination => "http_response"
    dictionary => {
      "200" => "OK"
      "403" => "Forbidden"
      "404" => "Not Found"
      "408" => "Request Timeout"
    }
    remove_field => "response_code"
  }
}
useragent 过滤器

useragent 过滤器将用户代理字符串解析为字段。

以下示例获取 agent 字段中的用户代理字符串,将其解析为用户代理字段,并将用户代理字段添加到名为 user_agent 的新字段。它还会删除原始的 agent 字段

filter {
  useragent {
    source => "agent"
    target => "user_agent"
    remove_field => "agent"
  }
}

应用过滤器后,事件将通过用户代理字段进行丰富。例如

        "user_agent": {
          "os": "Mac OS X 10.12",
          "major": "50",
          "minor": "0",
          "os_minor": "12",
          "os_major": "10",
          "name": "Firefox",
          "os_name": "Mac OS X",
          "device": "Other"
        }