1、Logstash的概念
Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到选择的目的地。
2、Logstash的特点
2.1、日志与指标
Logstash可以处理所有类型的日志数据,轻松地摄取大量的web日志(如Apache)和应用程序日志(如Java的log4j),可以捕获许多其他日志格式,如syslog、网络和防火墙日志等;
支持Filebeat的安全日志转发功能;
支持通过TCP和UDP从Ganglia、colltd、NetFlow、JMX和许多其他基础设施和应用程序平台收集指标。
2.2、采集网络数据
2.2.1、将HTTP请求转换为事件
Logstash支持使用网络服务进行数据分析,同时支持许多监视器警报用例。
2.2.2、根据需要轮询HTTP端点来创建事件
从web应用程序接口捕获健康、性能、指标和其他类型的数据。
2.3、数据存储和数据流
从已经拥有的数据中发现更多价值,进行数据挖掘和分析。
数据来源可以是来自任何关系型数据库或NoSQL数据库,也可以是来自消息队列(如Apache Kafka、RabbitMQ和Amazon SQS)的不同数据流。
3、Logstash的工作组件
Logstash事件处理管道有三个阶段:inputs → filters → outputs。inputs:生成事件;filters:修改事件;outputs:将处理后的事件输出到目的地。
inputs 和 outputs 支持编解码器,可以再数据进入或退出管道时对其进行编码或解码,从而不需要使用单独的过滤器。即,Logstash有两个必需的元素(输入和输出)和一个可选元素(过滤器)。
inputs 输入插件读取源数据,filters 过滤插件可修改数据,outputs 输出插件将数据写入目的地。
3.1、inputs
inputs 是数据的输入,对接的是数据源,常用 inputs如下:
file | 读取文件系统上的一个文件 |
syslog | 在端口514上监听syslog消息,按照RFC3164格式进行解析 |
Redis | 从Redis服务器读取数据,使用Redis通道和Redis列表 |
beats | 处理Beats发送的事件 |
3.2、Filters
过滤器是Logstash管道中的中间处理设备,可以设置条件,以便处理满足特定条件的事件。
gork | 解析和构建任意文本,Grok目前是Logstash中将非结构化日志数据解析为结构化和可查询的内容的最佳方式 |
mutate | 对事件字段执行转换。可以重命名、删除、替换和修改事件中的字段。 |
drop | 删除事件 |
clone | 创建事件的副本,可能会添加或删除字段 |
geoip | 添加IP地址的地理位置信息 |
3.3、Outputs
Outputs 是Logstash管道的最后阶段。事件可以通过多个 Outputs 传递,但是一旦完成所有 Outputs 处理,就完成了事件的执行。
常用的Outputs如下:
elasticsearch | 发送事件数据到Elasticsearch,可以高效、方便、易于查询的格式保存事件数据 |
file | 将事件数据写入磁盘上的文件 |
graphite | 将事件数据发送到graphite,这是一种流行的用于存储和绘制指标的开源工具 |
statsd | 发送事件数据到statsd,statsd通过侦听UDP发送的统计信息,如计数器和计时器,并将聚合信息发送到一个或多个可插入的后端服务 |
3.4、Codecs
编解码器基本上是流过滤器,可以作为输入或输出的一部分进行操作。编解码器可以轻松地将消息的传输与序列化过程分离开来。当前流行的编解码器包括json、msgpack和plain (text)。
json | 对数据进行json格式的编码或解码 |
multiline | 将多行文本事件(如Java exception和stacktrace消息)合并为单个事件 |