当前位置: 首页 > article >正文

大数据-187 Elasticsearch - ELK 家族 Logstash Filter 插件 使用详解

在这里插入图片描述

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(正在更新…)

章节内容

上节我们完成了如下的内容:

  • Logstash Input插件:JDBC
  • Logstash Input插件:syslog

在这里插入图片描述

Filter插件

Logstash 是一个开源的数据处理管道工具,常用于从多种数据源收集、处理并将数据发送到指定存储位置。其最重要的部分之一是 Filter 插件。Filter 插件负责对传入的数据进行处理和转换,它位于 Logstash 管道的中间环节,接收来自输入 (Input) 的数据,进行解析、增强、变换,最终将数据传递给输出 (Output)。Logstash之所有强悍的主要因为是Filter插件,通过过滤器的各种组合可以得到我们想要的结构化数据。

Filter 插件的功能

Filter 插件的核心任务是对日志或事件进行处理和转化,提供数据增强、清理和重新格式化的功能。它能够:

  • 提取结构化数据:从非结构化数据中提取特定字段(如 JSON、CSV 等格式的日志)。
  • 格式化数据:将字段转换为特定的数据类型或格式,例如将字符串转换为时间戳、数字等。
  • 增强数据:通过添加额外信息或进行查询、匹配等操作来丰富日志数据(例如添加地理位置信息)。
  • 过滤数据:根据特定条件筛选出需要或不需要的数据。

Filter 的注意事项

  • 顺序执行:Filter 插件的顺序非常重要,Logstash 会按配置文件中的顺序依次执行每个插件。因此,确保顺序符合数据处理逻辑。
  • 性能优化:在处理大规模日志时,某些复杂的 Filter(如 grok)可能影响性能,需要结合其他插件(如 mutate)优化处理流程。
  • 测试和调试:使用 stdout { codec => rubydebug } 或类似工具测试 Filter 结果,确保数据处理符合预期。

grok正则表达式

grok正则表达式是Logstash非常重要的一个环境,可以通过grok非常方便的将数据拆分和索引。
语法格式:

(?<name>pattern)<name>表示要取出里面的值,pattern就是正则表达式

控制台数据收集

需求描述

收集控制台输入数据,采集日期时间出来。

编写配置

cd /opt/servers/logstash-7.3.0/config
vim filter.conf

写入的如下:

input {stdin{}}
filter {
  grok {
    match => {
      "message" => "(?<date>\d+\.\d+)\s+"
    }
  }
}
output {stdout{codec => rubydebug}}

写入的内容如下图所示:
在这里插入图片描述

检查配置

cd /opt/servers/logstash-7.3.0
bin/logstash -f /opt/servers/logstash-7.3.0/config/filter.conf -t

执行的结果如下图所示:
在这里插入图片描述

启动服务

cd /opt/servers/logstash-7.3.0
bin/logstash -f /opt/servers/logstash-7.3.0/config/filter.conf

在控制台输入: “hello world”,可以看到结果如下图所示:
在这里插入图片描述

grok收集Nginx日志

需求描述

Nginx的日志数据一般为:

36.157.150.1 - - [05/Nov/2019:12:59:28 +0800] "GET
/phpmyadmin_8c1019c9c0de7a0f/js/get_scripts.js.php?scripts%5B%5D=jquery/jquery-
1.11.1.min.js&scripts%5B%5D=sprintf.js&scripts%5B%5D=ajax.js&scripts%5B%5D=keyhandler.js&scr
ipts%5B%5D=jquery/jquery-ui-
1.11.2.min.js&scripts%5B%5D=jquery/jquery.cookie.js&scripts%5B%5D=jquery/jquery.mousewheel.j
s&scripts%5B%5D=jquery/jquery.event.drag-2.2.js&scripts%5B%5D=jquery/jquery-ui-timepickeraddon.js&scripts%5B%5D=jquery/jquery.ba-hashchange-1.3.js HTTP/1.1" 200 139613 "-"
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/45.0.2454.101 Safari/537.36"

这种日志是非格式化的,通常,我们获取到日志后,还要使用MapReduce或者Spark做一下数据清晰的操作,就是将非格式化的日志进行格式化操作。
在清晰的时候,如果日志的数据量比较大,那么也是需要花费一些时间的。
所以可以使用Logstash的grok功能,将Nginx的非格式化采集成格式化的数据。

安装插件

cd /opt/servers/logstash-7.3.0
bin/logstash-plugin install Logstash-filter-grok

可以看到安装结果如下图所示:
在这里插入图片描述

编写配置

定义Logstash的配置文件如下,我们从控制台输入Nginx的日志数据,然后经过Filter的过滤,将我们的日志文件转换为标准的数据格式:

cd /opt/servers/logstash-7.3.0/config
vim monitor_nginx.conf

写入的内容如下:

input {
  stdin {}
}

filter {
  grok {
    match => {
      "message" => "%{IPORHOST:clientip} \- \- \[%{HTTPDATE:time_local}\] \"(?:%{WORD:method} %{NOTSPACE:request}(?:HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:status} %{NUMBER:body_bytes_sent} %{QS:http_referer} %{QS:agent}"
    }
  }
}

output {
  stdout {
    codec => rubydebug
  }
}

写入的内容如下图所示:
在这里插入图片描述

检查配置

cd /opt/servers/logstash-7.3.0
bin/logstash -f /opt/servers/logstash-7.3.0/config/monitor_nginx.conf -t

检查结果如下图所示:
在这里插入图片描述

启动配置

cd /opt/servers/logstash-7.3.0
bin/logstash -f /opt/servers/logstash-7.3.0/config/monitor_nginx.conf

启动结果如下图所示:
在这里插入图片描述

测试数据

在控制台中输入如下的数据:

113.31.119.183 - - [05/Nov/2019:12:59:27 +0800] "GET
/phpmyadmin_8c1019c9c0de7a0f/js/messages.php?
lang=zh_CN&db=&collation_connection=utf8_unicode_ci&token=6a44d72481633c90bffcfd42f11e25a1
HTTP/1.1" 200 8131 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/45.0.2454.101 Safari/537.36"

可以看到控制台解析出了内容如下所示:
在这里插入图片描述


http://www.kler.cn/news/368749.html

相关文章:

  • 代码随想录 -- 动态规划 -- 使用最小花费爬楼梯
  • CSS_定位_网页布局总结_元素的显示与隐藏
  • Java 基于 poi 和 itextpdf 实现 excel 转 pdf
  • Cursor的composer和chat的应用
  • Matplotlib教程(005):Matplotlib双轴显示
  • jupyter notebook改变默认启动路径
  • APS开源源码解读: 排程工具 optaplanner II
  • Windows系统PyCharm右键运行.sh文件
  • Web API 哪家强?Axios、Fetch 和 HttpClient 优选指南
  • html5中获取元素的方法
  • 高效集成:聚水潭奇门至金蝶云星空的数据流自动化
  • Python爬虫-汽车投诉排行榜单数据
  • xss跨站及绕过与防护
  • Spring Boot 架构入门学习指南
  • NameNode的HA特性和基于ZKFC的自动故障转移机制
  • 前端浏览器知识总结
  • STM32 第18章 SysTick--系统定时器
  • kafka-console-ui的简介及安装使用
  • OceanMind海睿思受邀参加中国信通院2024数据要素发展大会
  • 使用 Spring Doc 为 Spring REST API 生成 OpenAPI 3.0 文档
  • Web做题思路
  • python实现数据库两个表之间的更新操作(模糊匹配)示例
  • Django-cookie,session
  • 工作中用到的 Linux 总结(持续更新中...)
  • Word 删除空白页:亲测有效的方法
  • 【JavaEE】【多线程】线程池