一、Logstash 介绍
logstash是一个用来管理事件和日志的工具,它的作用是收集日志,解析日志,存储日志为以后使用。
Logstash 是一个轻量级、强大的日志处理工具,可以用来分散的、多样化的日志搜收集起来、自定义过滤处理转换、存储日志数据到某个文件或者服务器。用于从文件中收集日志事件。
Logstash 也可以进行数据的转换:Logstash提供了多种输入和输出插件,可以从各种数据源读取数据,并将其发送到各种目标。对于SQL数据库,Logstash提供了一些特定的输入和输出插件,如JDBC输入插件和JDBC输出插件,可以方便地与关系型数据库进行数据交互。通过配置Logstash的输入和输出插件,你可以定义数据源和目标的连接信息、查询语句或写入操作,以实现数据迁移。
对于NoSQL数据库,Logstash也提供了一些特定的输入和输出插件,如Elasticsearch输入插件和Elasticsearch输出插件,可以与Elasticsearch进行数据交互。此外,Logstash还支持其他NoSQL数据库,如MongoDB和Cassandra,可以使用相应的插件进行数据迁移
Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中派生出结构,从 IP 地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程
logstash处理事件有三个阶段:input —> filter —> output。input产生事件,filter 对事件进行修改,output输出到其它地方。
-
数据输入采集阶段:
采集各种样式、大小和来源的数据:数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择,可以同时从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。 -
筛选
数据从源传输到存储库的过程中,Logstash 筛选器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。
Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响:- 利用 Grok 从非结构化数据中派生出结构
- 从 IP 地址破译出地理坐标
- 将 PII 数据匿名化,完全排除敏感字段
- 简化整体处理,不受数据源、格式或架构的影响。
使用我们丰富的筛选器库和功能多样的 Elastic Common Schema,您可以实现无限丰富的可能。
-
输出
选择您的存储库,传输您的数据
尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。
Logstash 提供了众多输出选择,您可以将数据发送到所需的位置,并且能够灵活地解锁众多下游用例。
二、配置文件
Logstash配置文件位于Logstash安装目录下bin/logstash.conf
启动参数
启动命令:
logstash -f logstash.conf
其中我们启动的时候给Logstash脚本传入了-e的参数,但实际上,Logstash的启动参数有很多,我们来看一下各个启动参数的作用:
-e #立即启动实例,例如:./logstash -e “input {stdin {}} output {stdout {}}”
-f #指定启动实例的配置文件,例如:./logstash -f config/test.conf
-t #测试配置文件的正确性,例如:./logstash -f config/test.conf -t
-l #指定日志文件名称,例如:./logstash -f config/test.conf -l logs/test.log
-w #指定filter线程数量,不指定默认是5,例如:./logstash-f config/test.conf -w 8
配置文件介绍
文件 | 描述 |
---|---|
logstash.yml | 配置Logstash的yml。 |
pipelines.yml | 包含在单个Logstash实例中运行多个管道的框架和说明。 |
jvm.options | 配置Logstash的JVM,使用此文件设置总堆空间的初始值和最大值,此文件中的所有其他设置都被视为专家设置。 |
log4j2.properties | 包含log4j 2库的默认设置。 |
logstash.yml
logstash.yml 配置 es 数据推送的地址
logstash.con
logstash.con 文件 主要用于定义数据处理插件配置
logstash.conf配置文件结构
input {
#标准输入源插件
stdin {
}
#普通文件源插件
file {
path => ["/var/log/*.log", "/var/log/message"]
....
}
......
}
filter {
#grok过滤插件
grok {
match => ["message", "%{HTTPDATE:logdate}"]
.....
}
#date过滤插件
date {
match => ["logdate", "dd/MMM/yyyy:HH:mm:ss Z"]
.....
}
.....
}
output {
stdout {
}
elasticsearch {
hosts => ["127.0.0.1:9200"]
....
}
.....
}
input 输入插件;filter 过滤器插件;output 输出插件。
配置文件结构示例
input {
file {
path => "/home/test/logstash/ml-25m/movies.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
separator => ","
columns => ["id","content","genre"]
}
mutate {
split => {
"genre" => "|" }
remove_field => ["path", "host","@timestamp","message"]
}
mutate {
split => ["content", "("]
add_field => {
"title" => "%{[content][0]}"}
add_field => {
"year" => "%{[content][1]}"}
}
mutate {
convert => {
"year" => "integer"
}
三 、插件基础
logstash功能很强大。从 logstash 1.5.0 版本开始,logstash 将所有的插件都独立拆分成 gem 包。这样每个插件都可以独立更新,不用等待 logstash 自身做整体更新的时候才能使用了。为了达到这个目标,logstash 配置了专门的 plugins 管理命令
logstash通过管道完成数据的采集与处理,管道配置中包含input、output和filter(可选)插件,input和output用来配置输入和输出数据源、filter用来对数据进行过滤或预处理,阿里云Logstash支持多管道并行运行,目前最多支持20个;
每个配置部分可以包含一个或多个插件。例如,指定多个filter插件,Logstash会按照它们在配置文件中出现的顺序进行处理。
1.Logstash插件分类
- inputs:输入
- codecs:解码
- filters:过滤
- outputs:输出
2. logstash 中支持的数据类型
Boolean,例如:ssl_enable => true
Number,例如:port => 33
String,例如:name => “Hello world”
hash,例如:options =>