点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
- 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"
复制代码 可以看到控制台剖析出了内容如下所示:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |