一、概述
Logstash 是一个开源的数据收集和日志处理工具,它是 Elastic Stack(ELK Stack)的一部分,用于从各种数据源中采集、转换和传输数据,以帮助分析和可视化大规模数据。Logstash 通常与 Elasticsearch 和 Kibana 一起使用,以实现实时日志分析和监控。
以下是 Logstash 的主要功能和特点:
- 数据采集:Logstash 可以从多种数据源中采集数据,包括日志文件、数据文件、消息队列、数据库、网络流量等。它支持多种输入插件,以适应不同数据源的需要。
- 数据转换:Logstash 具有强大的数据转换功能,可以对采集的数据进行过滤、解析、转换和丰富操作。它使用过滤插件来对数据执行各种操作,包括正则表达式解析、字段拆分、数据脱敏、时间戳生成等。
- 多通道数据处理:Logstash 允许将数据流式传输到不同的通道,以满足不同的需求。通道可以是 Elasticsearch、Kafka、RabbitMQ 等,或者您可以定义自定义输出插件。
- 数据过滤和插件:Logstash 有丰富的插件生态系统,包括输入插件、过滤插件和输出插件。这些插件可以根据特定需求来配置和扩展,以适应各种数据处理任务。
- 实时数据处理:Logstash 具有实时数据处理能力,可以将数据从源头到目的地以实时或近实时的方式传递。这使得它适用于日志监控、安全分析、性能监控等实时应用。
- 可伸缩性:Logstash 可以与多个Logstash 实例一起部署,以实现数据采集和处理的横向扩展。这有助于应对大规模数据需求。
- 易于配置:Logstash 使用简单的配置文件(通常是YAML格式)来定义数据流的处理过程。配置文件非常直观,易于理解和维护。
- 社区和支持:Logstash 是一个广泛采用的开源项目,拥有活跃的社区支持和大量的文档资源。
Logstash 是 Elastic Stack 中的一个重要组件,与 Elasticsearch 和 Kibana 配合使用,可以构建强大的实时日志和数据分析解决方案。它为组织提供了强大的数据采集和处理工具,用于监控、分析和可视化大规模数据。
官方文档:
二、Logstash 架构
图片
Logstash 包含3个主要部分: 输入(inputs),过滤器(filters)和输出(outputs)
Logstash的事件(logstash将数据流中等每一条数据称之为一个event)处理流水线有三个主要角色完成:inputs –> filters –> outputs。
- inpust:必须,负责产生事件(Inputs generate events),常用:File、syslog、redis、kakfa、beats(如:Filebeats);官方文档:https://www.elastic.co/guide/en/logstash/7.17/input-plugins.html
- filters:可选,负责数据处理与转换(filters modify them),常用:grok、mutate、drop、clone、geoip;官网文档:https://www.elastic.co/guide/en/logstash/7.17/filter-plugins.html
- outpus:必须,负责数据输出(outputs ship them elsewhere),常用:elasticsearch、file、graphite、kakfa、statsd;官方文档:https://www.elastic.co/guide/en/logstash/7.17/output-plugins.html
二、ElasticSearch 部署
这里可以选择以下部署方式:
- 通过docker-compose部署:通过 docker-compose 快速部署 Elasticsearch 和 Kibana 保姆级教程
- on k8s 部署:ElasticSearch+Kibana on K8s 讲解与实战操作(版本7.17.3)
这里我选择 docker-compose 部署方式。
1)部署 docker
2)部署 docker-compose
3)创建网络
4)修改 Linux 句柄数和最大线程数
5)下载部署包开始部署
三、Logstash 部署与配置讲解
1)下载Logstash安装包
访问官方网站 https://www.elastic.co/downloads/logstash ,下载相应版本的zip文件。
2)解压安装包文件
3)不同场景测试
1)测试1:采用标准的输入和输出
图片
2)测试2:使用配置文件 +标准输入输出
配置文件:config/logstash-1.conf
启动服务
3)测试3:配置文件+file输入 +标准的屏幕输出
配置文件:./config/logstash-2.conf
启动服务
图片
4)测试4:配置文件+文件输入+kafka输出
kafka 部署,可以参考我以下几篇文章:
- 【云原生】zookeeper + kafka on k8s 环境部署
- 【中间件】通过 docker-compose 快速部署 Kafka 保姆级教程
配置文件:./config/logstash-3.conf
启动服务
消费 kafka 数据
图片
5)测试5:配置文件+filebeat端口输入+标准输出
filebeat 部署,可以参考我以下几篇文章:
- 轻量级的日志采集组件 Filebeat 讲解与实战操作
- Filebeat on k8s 日志采集实战操作
服务器产生日志(filebeat)---》logstash服务器
配置文件:./config/logstash-4.conf
启动服务
启动后会在本机启动一个5044端口,不要和系统已启动的端口冲突即可,配合测试我们在 filebeat 服务器上修改配置文件。
filebeat 配置文件内容:filebeat.yml
启动 filebeat
6)测试6:配置文件+filebeat端口输入+输出到kafka
服务器产生日志(filebeat)---> logstash服务器---->kafka服务器
配置文件:./config/logstash-5.conf
启动服务
7)测试7:filebeat数据采集+kafka读取当输入+logstash处理+输出到 ES
服务器产生日志(filebeat)---> kafka服务器__抽取数据___> logstash服务器---->ES
图片
logstash的配置:./config/logstash-6.conf
filebeat.yml output.kafka 配置:
使用 systemctl 启动 filebeat
使用 systemctl 启动 logstash
启动服务
四、Logstash filter常用插件
负责数据处理与转换(filters modify them),常用:grok、mutate、drop、clone、geoip;官网文档:https://www.elastic.co/guide/en/logstash/7.17/filter-plugins.html
1)使用grok内置的正则案例
grok 插件:Grok是将非结构化日志数据解析为结构化和可查询内容的好方法,底层原理是基于正则匹配任意文本格式
此工具非常适合syslog日志、apache和其他Web服务器日志、mysql日志,以及一般来说,任何通常为人类而不是计算机消费编写的日志格式。
grok内置了120种匹配模式,也可以自定义匹配模式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
filebeat配置:filebeat.yml
logstash 配置:stdin-grok-stout.conf
2)使用grok自定义的正则案例
参考官网地址:https://www.elastic.co/guide/en/logstash/7.17/plugins-filters-grok.html
配置如下:
3)filter插件通用字段案例(添加/删除字段、tag)
原有字段(nginx的json解析日志)
配置如下:
4)date 插件修改写入ES的时间案例
测试日志:如下是我们要收集的一条json格式的日志
配置如下:
5)geoip分析原IP地址位置案例
测试数据为:nginx的json格式日志
配置如下:
GeoLite2-City.mmdb 下载:https://dev.maxmind.com/geoip/geolite2-free-geolocation-data
图片
7)mutate组件常用案例
mutate 测试数据 python 脚本:
8)logstash的多if分支案例
配置如下: