热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

logstash常用插件介绍

前言在《使用EFK快速搭建安全可靠的日志服务》一文中,我们已经大致介绍了分布式日志服务的各个组件。但是对于很多实现细节,并未涵盖到。本文主要介绍logs

前言

在《使用EFK快速搭建安全可靠的日志服务》一文中,我们已经大致介绍了分布式日志服务的各个组件。但是对于很多实现细节,并未涵盖到。本文主要介绍logstash用到的插件,以及对插件的离线打包,避免每次手动安装插件。本文主要分为4部分:

  1. 插件的离线打包
  2. input插件
  3. filter插件
  4. output插件

在使用插件之前,我们先了解一个概念:事件。Logstash 每读取一次数据的行为叫做事件。

1.插件的离线打包

在生产环境中,logstash可能是部署到多台机器上,如果每次logstash的安装更新都需要手动更新一遍插件成本是非常高的。那我们可以对用到的插件进行offline打包。
制作logstash-offline-plugins-x.x.x.zip说明:

  1. 需要在一台已经安装了logstash的机器上,先给logstash安装好所需要的插件
  2. 然后再导出插件,具体命令:

bin/logstash-plugin update logstash-filter-mutate
bin/logstash-plugin install logstash-filter-json_encode
bin/logstash-plugin prepare-offline-pack logstash-filter-mutate logstash-filter-json_encode

参考elastic的官方文档:https://www.elastic.co/guide/...

在logstash安装时通过如下命令进行插件包的安装:

bin/logstash-plugin install file://$(pwd)/logstash-offline-plugins.zip

安装插件后要及时观察logstash的打印日志,避免因为插件版本冲突导致的logstash启动失败的情况。

2.input插件

输入插件允许一个特定的事件源可以读取到 Logstash 管道中,配置在 input {} 中,且可以设置多个。 在《使用EFK快速搭建安全可靠的日志服务》一文中我们是分别将input、filter和output三部分的配置放到了不同的配置文件中。input的配置在input.conf文件中。
由于我们使用的是EFK,因此需要beats插件。可以参考官网:https://www.elastic.co/guide/...

input {beats {port => 5044client_inactivity_timeout => 600ssl => truessl_certificate_authorities => ["/home/work/certificate/chain-ca.pem"]ssl_certificate => "/home/work/certificate/server.crt.pem"ssl_key => "/home/work/certificate/server.key.pem"ssl_verify_mode => "force_peer"}
}

需要注意的是,在6.4版本以上的beats配置中,多了ssl_peer_metadata,可以拿到证书里的meta信息,可以便于我们后续在logstash上做一些鉴权校验。
除了beats插件,inputs类型插件还有很多种,主要列举如下:

  • elasticsearch
  • file
  • log4j
  • kafka

更多插件配置介绍参考官网:https://www.elastic.co/guide/...

3.filter插件

filter插件就比较多了。日志接入之后要进行日志的规则匹配、过滤等操作,配置filter是必不可少的。最长用到的filter插件有以下几种:

  • grok
  • date
  • mutate
  • geoip
  • split
  • uuid
  • json
  • jsonencode

3.1 grok插件

Grok是logstash最主要的过滤插件,grok是通过系统预定义的正则表达式或者通过自己定义正则表达式来匹配日志中的各个值,安装了logstash后默认会有一些常用软件的日志匹配正则,在使用时自己可以根据自己的日志格式或者对匹配正则进行调整或者直接调用。如果,自己想在其他目录定义正则规则匹配日志,在使用时需要指定正则的路径。
对于以下一行日志:

55.3.244.1 GET /index.html 15824 0.043

使用如下的规则:

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

grok配置示例如下:

filter {grok {match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }}
}

那么这行日志经过grok之后会得到以下的field:

client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043

常用的配置选项:

  • match:用来对字段的模式进行匹配
  • patterns_dir:用来指定规则的匹配路劲,如果使用logstash自定义的规则时,不需要写此参数。Patterns_dir可以同时制定多个存放过滤规则的目录。语法格式:patterns_dir => [“/ opt / logstash / patterns”,“/ opt / logstash / extra_patterns”]
  • remove_field:如果匹配到某个”日志字段,则将匹配的这个日志字段从这条日志中删除

Grok过滤正则规则可以自己根据自己的日志格式自行编写,在编写grok过滤规则时容易出错,此时可以使用grokdebug网站对自己的日志及编写的正则规则进行调试,grokdebug网址为(https://grokdebug.herokuapp.com/)

3.2 date插件

date用于解析字段中的日期,然后使用该日期或时间戳作为事件的logstash时间戳。
对于date插件的介绍,在https://segmentfault.com/a/11...(感觉是官网https://www.elastic.co/guide/... 的翻译版本)中有非常详细的介绍。我来列举一个自己在配置过程中遇到的示例:
对于给定的时间格式:

2019-01-10T18:11:28.699+08:00

需要进行配置的pattern应该如下:

date {match => ["[@metadata][log_timestamp]", "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"]timezOne=> "Asia/Shanghai"
}

需要注意的是,对于filter.conf配置是可以热加载的,如果时间格式配置错误,会导致logstash进程挂掉,对于问题的排查,可以自行查询logstash的日志。

3.3 mutate插件

mutate 插件可以在字段上执行变换,包括重命名、删除、替换和修改。这个插件相当常用。
比如:
你已经根据 Grok 表达式将 Tomcat 日志的内容放到各个字段中,想把状态码、字节大小或是响应时间,转换成整型;
你已经根据正则表达式将日志内容放到各个字段中,但是字段的值,大小写都有,这对于 Elasticsearch 的全文检索来说,显然用处不大,那么可以用该插件,将字段内容全部转换成小写。
示例如下:

filter {mutate {split => ["hostname", "."]add_field => { "shortHostname" => "%{hostname[0]}" }}mutate {rename => ["shortHostname", "hostname" ]}
}

在笔者之前写的《使用EFK快速搭建安全可靠的日志服务》一文中,主要使用mutate插件来add_field, remove_field, convert,gsub等操作。其中covert可以将字符串类型转换为int/long/float等类型,便于进行聚合等操作。
例如:

mutate {cOnvert=> {"averageSliceQueryTime" => "integer""maxSliceQueryTime" => "integer"}

关于更多filter类型插件可以参考:https://www.elastic.co/guide/...

4.output插件

和前面介绍的input插件一样,output插件也是最基础最简单的输出插件。在《使用EFK快速搭建安全可靠的日志服务》一文中我们使用的elasticsearch作为最终的输出存储,因此output插件使用的是elasticsearch。对于grok解析失败的文件会写入到本地文件中,因此用了file插件,通过分支进行判断。示例如下:

output {if "_grokparsefailure" in [tags] or "_jsonparsefailure" in [tags] {file {path => "/home/work/logstash/failure_output/failure-%{+YYYY-MM-dd}.log"}} else {elasticsearch {hosts => ["https://es-host1:9920","https://es-host2:9920","https://es-host3:9920"]index => "logstash-%{[@metadata][index_name]}-%{+YYYY.MM.dd}"document_id => "%{[@metadata][document_id]}"ssl => truessl_certificate_verification => truetruststore => "/home/work/certificate/truststore.jks"truststore_password => "adofkoe"user => "logstash"password => "dafodmfkamkefadfg"}}
}

除了elasticsearch,还支持以下输出:

  • email
  • file
  • influxdb
  • mongodb
  • redis

更多可以参考官网:https://www.elastic.co/guide/...

总结

logstash的各种插件极大丰富了其功能。在实际使用中,我们可以根据自己的实际需求进行相关配置,来构建自己的日志服务系统。笔者此处主要是对自己使用过程中所用到内容的总结。遇到的很多实际问题,可以自行查询官网进行解决。



推荐阅读
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 2022年2月 微信小程序 app.json 配置详解:启用调试模式
    本文将详细介绍如何在微信小程序的 app.json 文件中启用调试模式(debug),并通过实际案例展示其配置方法和应用场景。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
author-avatar
teemitop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有