使用查找丰富数据
编辑使用查找丰富数据编辑
这些插件可以帮助您使用其他信息(例如 GeoIP 和用户代理信息)丰富数据
查找插件编辑
- dns 过滤器
-
The dns 过滤器插件 执行标准或反向 DNS 查找。
以下配置对
source_host
字段中的地址执行反向查找,并将其替换为域名filter { dns { reverse => [ "source_host" ] action => "replace" } }
- elasticsearch 过滤器
-
The elasticsearch 过滤器 将 Elasticsearch 中先前日志事件的字段复制到当前事件。
以下配置显示了此过滤器可能使用方式的完整示例。每当 Logstash 接收“end”事件时,它都会使用此 Elasticsearch 过滤器根据某些操作标识符查找匹配的“start”事件。然后,它将“start”事件的
@timestamp
字段复制到“end”事件上的新字段。最后,使用日期过滤器和 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 过滤器
-
The geoip 过滤器 添加有关 IP 地址位置的地理信息。例如
filter { geoip { source => "clientip" } }
应用 geoip 过滤器后,事件将使用 geoip 字段进行丰富。例如
filter { geoip { source => "clientip" } }
- http 过滤器
- The http 过滤器 与外部 Web 服务/REST API 集成,并支持针对任何 HTTP 服务或端点的查找丰富。此插件非常适合许多丰富用例,例如社交 API、情绪 API、安全馈送 API 和业务服务 API。
- jdbc_static 过滤器
-
The 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" } }
- jdbc_streaming 过滤器
-
The 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 过滤器
- The memcached 过滤器 支持针对 Memcached 对象缓存系统的键/值查找丰富。它支持读(GET)和写(SET)操作。对于安全分析用例来说,这是一个值得注意的补充。
- translate 过滤器
-
The translate 过滤器 根据哈希或文件中指定的替换值替换字段内容。目前支持以下文件类型:YAML、JSON 和 CSV。
以下示例获取
response_code
字段的值,根据字典中指定的 value 将其转换为描述,然后从事件中删除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 过滤器
-
The 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" }