Logstash之二:原理
一、Logstash 介绍
Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。
二、工作流程
Logstash 工作的三个阶段:
input 数据输入端,可以接收来自任何地方的源数据。
-
file:从文件中读取
-
syslog:监听在514端口的系统日志信息,并解析成RFC3164格式。
-
redis:从redis-server list 中获取
-
beat:接收来自Filebeat的事件
Filter 数据中转层,主要进行格式处理,数据类型转换、数据过滤、字段添加,修改等,常用的过滤器如下。
-
grok: 通过正则解析和结构化任何文本。Grok 目前是logstash最好的方式对非结构化日志数据解析成结构化和可查询化。logstash内置了120个匹配模式,满足大部分需求。
-
mutate: 在事件字段执行一般的转换。可以重命名、删除、替换和修改事件字段。
-
drop: 完全丢弃事件,如debug事件。
-
clone: 复制事件,可能添加或者删除字段。
-
geoip: 添加有关IP地址地理位置信息。
output 是logstash工作的最后一个阶段,负责将数据输出到指定位置,兼容大多数应用,常用的有:
-
elasticsearch: 发送事件数据到 Elasticsearch,便于查询,分析,绘图。
-
file: 将事件数据写入到磁盘文件上。
-
mongodb:将事件数据发送至高性能NoSQL mongodb,便于永久存储,查询,分析,大数据分片。
-
redis:将数据发送至redis-server,常用于中间层暂时缓存。
-
graphite: 发送事件数据到graphite。http://graphite.wikidot.com/
-
statsd: 发送事件数据到 statsd。
三、 Logstash部署架构
Logstash的理念很简单,它只做3件事情:
- Collect:数据输入
- Enrich:数据加工,如过滤,改写等
- Transport:数据输出
别看它只做3件事,但通过组合输入和输出,可以变幻出多种架构实现多种需求。这里只抛出用以解决日志汇总需求的部署架构图:
解释术语:
- Shipper:日志收集者。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来,输出到Redis暂存。
- Indexer:日志存储者。负责从Redis接收日志,写入到本地文件。
- Broker:日志Hub,用来连接多个Shipper和多个Indexer。
无论是Shipper还是Indexer,Logstash始终只做前面提到的3件事:
- Shipper从日志文件读取最新的行文本,经过处理(这里我们会改写部分元数据),输出到Redis,
- Indexer从Redis读取文本,经过处理(这里我们会format文本),输出到文件。
一个Logstash进程可以有多个输入源,所以一个Logstash进程可以同时读取一台服务器上的多个日志文件。Redis是Logstash官方推荐的Broker角色“人选”,支持订阅发布和队列两种数据传输模式,推荐使用。输入输出支持过滤,改写。Logstash支持多种输出源,可以配置多个输出实现数据的多份复制,也可以输出到Email,File,Tcp,或者作为其它程序的输入,又或者安装插件实现和其他系统的对接,比如搜索引擎Elasticsearch。
总结:Logstash概念简单,通过组合可以满足多种需求。