Logstash:通过 lookups 来丰富数据

news2024/11/17 11:40:41

如果你想了解更多关于 lookup 的内容,请参阅文章 “Elastic:开发者上手指南” 中的 “丰富数据及 lookup” 章节。在今天的文章中,我来总结在 Logstash 中一些常用的 lookups。如下的这些插件可以帮助你使用附加信息丰富数据,例如 GeoIP 和用户代理信息:

  • dns filter
  • elasticsearch filter
  • geoip filter
  • http filter
  • jdbc_static filter
  • jdbc_streaming filter
  • memcached filter
  • translate filter
  • useragent filter

Lookup 插件

dns filter

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

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

filter {
  dns {
    reverse => [ "source_host" ]
    action => "replace"
  }
}

我们可以使用如下的例子来进行测试:

logstash.conf

input {
  generator {
    message => '8.8.8.8'
    count => 1
  }
}
 
filter {
  dns {
    reverse => [ "message" ]
    action => "replace"
  }
}
 
output {
  stdout {
    codec => rubydebug
  }
}

使用 Logstash 运行上面的配置文件:

./bin/logstash -f logstash.conf

 

elasticsearch filter

elasticsearch filter 将 Elasticsearch 中以前的日志事件的字段复制到当前事件。

以下配置显示了如何使用此过滤器的完整示例。 每当 Logstash 收到 “end” 事件时,它都会使用此 Elasticsearch filter 根据某些操作标识符找到匹配的 “start” 事件。 然后它将 @timestamp 字段从 “start” 事件复制到 “end” 事件的新字段中。 最后,结合使用 date filter 和 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'
        }
      }

更为详细的介绍,请阅读文章 “Logstash:运用 Elasticsearch filter 来丰富地理数据”。


geoip filter

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

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

在 Elastic Stack 8.x. 上,我们做如下的一个例子:

logstash.conf

input {
  generator {
    message => '8.8.8.8'
    count => 1
  }
}
 
filter {
  mutate {
    rename => {"message" => "[clientip][ip]"}
  }

  geoip {
    source => "[clientip][ip]"
    target => "geoip"
  }
} 
 
output {
  stdout {
    codec => rubydebug
  }
}

运行上面的 Logstash 配置文件:

./bin/logstash -f logstash.conf

详细阅读文章 “Logstash:Logstash 入门教程 (二)”。

http filter

http 过滤器与外部 Web 服务/REST API 集成,并启用针对任何 HTTP 服务或端点的查找扩充。 此插件非常适合许多丰富用例,例如社交 API、情感 API、安全源 API 和业务服务 API。

更为详细的介绍,请阅读文章 “Logstash:HTTP 过滤器介绍”。

jdbc_static filter

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

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

filter {
  jdbc_static {
    loaders => [ (1)
      {
        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 => [ (2) 
      {
        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 => [ (3)
      {
        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" (4)
      }
    ]
    # 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]}" } (5)
    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"
  }
}
  1. 查询外部数据库以获取将在本地缓存的数据集。
  2. 定义用于构建本地数据库结构的列、类型和索引。 列名和类型应与外部数据库相匹配。
  3. 对本地数据库执行查找查询以丰富事件。
  4. 指定将存储查找数据的事件字段。 如果查找返回多列,则数据将作为 JSON 对象存储在字段中。
  5. 从 JSON 对象中获取数据并将其存储在顶级事件字段中,以便在 Kibana 中进行更轻松的分析。

更为详细的例子,请参考文章 “Logstash:Jdbc static filter plugin 介绍”。

jdbc_streaming filter

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://localhost:3306/mydatabase"
    jdbc_user => "me"
    jdbc_password => "secret"
    statement => "select * from WORLD.COUNTRY WHERE Code = :code"
    parameters => { "code" => "country_code"}
    target => "country_details"
  }
}

更为详细的例子可一些参阅文章 “Logstash:运用 jdbc_streaming 来丰富我们的数据”。

memcached filter

Memcached 过滤器启用针对 Memcached 对象缓存系统的键/值查找扩充。 它支持读取 (GET) 和写入 (SET) 操作。 它是安全分析用例的显着补充。

更为详细的描述可以在文章中 “Logstash:运用 memcache 过滤器进行大规模的数据丰富” 看到。

translate filter

Translate 过滤器根据 hash 或文件中指定的替换值替换字段内容。 目前支持这些文件类型: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"
  }
}

详细阅读文章 “Logstash:Logstash translate 过滤器简介”。

useragent filter

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

以下示例获取代理字段中的用户代理字符串,将其解析为用户代理字段,并将用户代理字段添加到名为 user_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"
        }

详细阅读文章 “Logstash:Logstash 入门教程 (二)” 以了解更多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于深度学习的车型识别系统(Python+清新界面+数据集)

摘要:基于深度学习的车型识别系统用于识别不同类型的车辆,应用YOLO V5算法根据不同尺寸大小区分和检测车辆,并统计各类型数量以辅助智能交通管理。本文详细介绍车型识别系统,在介绍算法原理的同时,给出Python的实现代码…

浏览器强缓存与协商缓存

一、强缓存 强制缓存的思想是,在浏览器内置数据库中缓存每次请求中 “可以被缓存” (受到一些关键字的管控)的静态资源如 image, css, js 文件, 当第二次请求被缓存过的资源时候,会通过校验两个字段 Expires 和 Cache-…

AAAI 2023MOVEDepth:基于单目线索和速度指导的自监督多帧深度估计

文章目录 解决的问题实施细节总结 会议/期刊:2023 AAAI 论文题目:《Crafting Monocular Cues and Velocity Guidance for Self-Supervised Multi-Frame Depth Learning》 论文链接:[JeffWang987/MOVEDepth: AAAI 2023]Crafting Monocular Cue…

Flutter TextField 交互实例 —— 新手礼包

大家好,我是 17。 新手礼包一共 3 篇文章,每篇都是描述尽量详细,实例讲解,包会! Flutter Row 实例 —— 新手礼包Flutter TextField UI 实例 —— 新手礼包Flutter TextField 交互实例 —— 新手礼包 本篇包含所有常…

Unity打包WebGL: 导入Vue

Unity打包WebGL: 导入Vue 1. 介绍 1.1 任务 记录将Unity项目打包成WebGL,并集成到Vue项目中的过程。 1.2 环境 Unity:2021.3Vue: 2 2. Unity项目 2.1 UI界面 2.2 添加插件 构建WebGL项目需要添加一个.jslib文件,用于Unity脚本函数与JavaScript函数…

【FocalNet】学习笔记

1. 介绍 “FocalNet是map-based还是token-based模型呢?” FocalNet是token-based模型,与常见的【基于 feature map 的CNN】不同; 2. 模型代码 2.1 环境配置 [DINO | FocalNet-DINO] 2.1.1 配置CUDA11.1 Summary Driver: Not Selected…

FreeRTOS 时间管理

文章目录 一、FreeRTOS 延时函数1. 函数 vTaskDelay()2. 函数 prvAddCurrentTaskToDelayedList()3. 函数 vTaskDelayUntil() 二、FreeRTOS 系统时钟节拍 一、FreeRTOS 延时函数 1. 函数 vTaskDelay() 在 FreeRTOS 中延时函数也有相对模式和绝对模式,不过在 FreeRT…

epoll进阶

epoll除了提供select/poll那种IO事件的电平触发(Level Triggered)外,还提供了边沿触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提…

经典文献阅读之--Orbeez-SLAM(单目稠密点云建图)

0. 简介 对于现在的VSLAM而言,现在越来越多的工作开始聚焦于如何将深度学习结合到VSLAM当中,而最近的这个工作就给出了一个比较合适的方法。《Orbeez-SLAM: A Real-time Monocular Visual SLAM with ORB Features and NeRF-realized Mapping》这篇文章&…

如何将模块加载到linux内核

一 顺利的情况 假设存在一个文件叫mymq.c,下该文件相同目录下的makefile如下语句: obj-y mymq.o 然后编译:编译完成了以后,mymq.c文件中,有个函数叫mymq_open,搜索这个函数在不在System.map文件中,如果在&#xff…

大屏使用echart开发省市地图数据,并点击省获取市地图数据

1. 本文在基础上进行改进,后端使用若依后端 IofTV-Screen: 🔥一个基于 vue、datav、Echart 框架的物联网可视化(大屏展示)模板,提供数据动态刷新渲染、屏幕适应、数据滚动配置,内部图表自由替换、Mixins注入…

CDN与网络安全

DDoS攻击的影响远不止眼前所见。这些攻击不仅会造成巨大的经济损失,还会对受害公司或组织的声誉和形象产生严重影响。研究表明,受害公司至少需要10个小时才能开始解决攻击,而解除还需要4.5个小时。甚至在检测到攻击之前平均数小时&#xff0c…

一文详解Spring事务传播机制

背景 我们在使用Spring管理数据库事务的时候很方便,只需要在代理对象中引入注解Transactional 就可以开启事务了。在使用Transactional时,一般主要关心两个方面,一个是异常回滚的定义(设置rollbackFor),另…

Python统计学:如何理解单样本t检验?

单样本的t检验 指样本的均值是否某个值存在差异。 比如一包薯片标的克重为50g,但每包不一定都是50g,那么我们可以对薯片进行随机抽样,检验它与50g是否有差异。 1 提出假设: 原假设:薯片的平均重量是50g; …

模板方法设计模式解读

目录 豆浆制作问题 模板方法模式基本介绍 基本介绍 模板方法模式的原理类图 模板方法模式解决豆浆制作问题 应用实例要求 思路分析和图解(类图) 模板方法模式的钩子方法 模板方法模式的注意事项和细节 豆浆制作问题 编写制作豆浆的程序,说明如下: 1) 制作豆…

Adobe认证是什么?

Adobe认证又称为Adobe国际认证(英文:Adobe Certified Professional)是Adobe公司CEO签发的权威国际认证体系,旨在为用户提供Adobe软件的专业认证。 Adobe认证包括产品技能认证和职业技能认证多个级别,从初学者到专业人士都可以参加。 Adobe认证覆盖了各…

ORA-27090故障,关于AIO-MAX-NR

在给某银行进行巡检时发现asm中的alert一直报ORA-27090错误。 通过巡检脚本,整理错误发生时间如下: 信息收集: 发生类似的错误,先收集alert日志的信息,操心系统的message日志。 Errors in file /u01/app/grid/diag/…

适合小白学习预处理与程序环境,这篇文章就够了

目录 一. 前言 二. 正文 2.1 “冷知识”:程序环境 2.21 翻译环境——程序从无到有:程序编译 链接 2.22 运行环境——程序开跑 2.3 那些鲜为人知:预定义符号 2.4 预处理指令 #define 2. 41 #和## —— 2.42 宏和函数优劣对比 2.…

阿里全新推出:微服务突击手册,把所有操作都写出来了

今天给大家带来的这份微服务是由阿里巴巴高级技术专家整理,针对Spring Cloud在国内的使用情况,结合国内上百家企业使用Spring Cloud落地微服务架构时遇到的问题和相应的解决方案结合成了这份电子版教程。(文末有免费的获取方式) …

火伞云APP盾,您身边的DDoS攻击安全保护专家

近年来全球各地区DDoS攻击的比例和次数在逐年增加,严重影响到网络信息安全。 主要有以下原因: 攻击成本低,攻击无壁垒。进行DDoS攻击成本很低,最低甚至只需要几百元就可以轻松发起一次攻击,然而被攻击的对象可能动辄…