Logstash是一个开源的数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据保存到指定库中,如ES。
logstash运行需要java1.8环境,因此需要先安装java环境
下载安装文件并复制到服务器
解压后目录结构如下:
[root@localhost apps]# ll
总用量 687700
drwxr-xr-x. 9 elsearch elsearch 155 6月 23 15:43 elasticsearch-6.5.4
-rw-r--r--. 1 root root 113322649 6月 23 15:24 elasticsearch-6.5.4.tar.gz
lrwxrwxrwx. 1 elsearch elsearch 19 6月 23 15:32 elsearch -> elasticsearch-6.5.4
lrwxrwxrwx. 1 root root 27 6月 28 13:43 filebeat -> filebeat-6.5.4-linux-x86_64
drwxr-xr-x. 7 root root 4096 6月 29 00:08 filebeat-6.5.4-linux-x86_64
-rw-r--r--. 1 root root 11287049 6月 27 19:14 filebeat-6.5.4-linux-x86_64.tar.gz
lrwxrwxrwx. 1 root root 13 6月 23 14:50 jdk -> jdk1.8.0_191/
drwxr-xr-x. 7 10 143 245 10月 6 2018 jdk1.8.0_191
-rw-r--r--. 1 root root 191753373 12月 25 2018 jdk-8u191-linux-x64.tar.gz
lrwxrwxrwx. 1 root root 25 6月 28 18:55 kibana -> kibana-6.5.4-linux-x86_64
drwxrwxr-x. 11 elsearch elsearch 212 12月 18 2018 kibana-6.5.4-linux-x86_64
-rw-r--r--. 1 root root 206631363 6月 27 20:03 kibana-6.5.4-linux-x86_64.tar.gz
drwxr-xr-x. 12 root root 255 6月 29 01:43 logstash-6.5.4
-rw-r--r--. 1 root root 160286824 6月 27 20:30 logstash-6.5.4.tar.gz
lrwxrwxrwx. 1 root root 29 6月 28 18:07 metricbeat -> metricbeat-6.5.4-linux-x86_64
drwxr-xr-x. 6 root root 254 6月 28 22:54 metricbeat-6.5.4-linux-x86_64
-rw-r--r--. 1 root root 19925669 6月 27 20:28 metricbeat-6.5.4-linux-x86_64.tar.gz
lrwxrwxrwx. 1 root root 12 6月 28 13:34 nginx -> nginx-1.12.2
drwxr-xr-x. 9 1001 1001 186 6月 28 13:39 nginx-1.12.2
-rw-r--r--. 1 root root 981687 2月 19 2019 nginx-1.12.2.tar.gz
运行示例
捕获到控制台输入内容后直接在控制台输出
bin/logstash -e 'input { stdin { } } output { stdout {} }'
logstash运行在jvm中,因此启动速度较慢
启动后输入内容后可以看到打印输出
22
{
"@version" => "1",
"message" => "22",
"@timestamp" => 2020-06-28T17:49:46.904Z,
"host" => "localhost.localdomain"
}
Logstash的配置有三部分,如下:
input { #输入
stdin { ... } #标准输入
}
filter { #过滤,对数据进行分割、截取等处理
...
}
output { #输出
stdout { ... } #标准输出
}
数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据
实时解析和转换数据。数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它
们转换成通用格式,以便更轻松、更快速地分析和实现商业价值
Logstash 提供众多输出选择,可以将数据发送到指定的地方
创建配置文件 内容如下:
[root@localhost logstash]# vi test-log.conf
input {
file {
path => "/opt/apps/logstash/logs/app.log"
start_position => "beginning"
}
}
filter {
mutate {
split => {"message"=>"|"}
}
}
output {
stdout { codec => rubydebug }
}
启动 logstash
[root@localhost logstash]# ./bin/logstash -f ./test-log.conf
在监控的日志文件中写入内容
[root@localhost logs]# echo "2019-03-15 21:21:21|ERROR|读取数据出错|参数:id=1002" >> app.log
可以看到logstash 将日志内容做了分割如下:
{
"@timestamp" => 2020-06-28T18:03:30.720Z,
"host" => "localhost.localdomain",
"path" => "/opt/apps/logstash/logs/app.log",
"@version" => "1",
"message" => [
[0] "2019-03-15 21:21:21",
[1] "ERROR",
[2] "读取数据出错",
[3] "参数:id=1002"
]
}
修改配置文件内容如下:
input {
file {
path => "/opt/apps/logstash/logs/app.log"
start_position => "beginning"
}
}
filter {
mutate {
split => {"message"=>"|"}
}
}
output {
elasticsearch {
hosts => ["192.168.12.10:9200","192.168.12.11:9200","192.168.12.12:9200"]
}
}
启动logstash
[root@localhost logstash]# ./bin/logstash -f ./test-log.conf
日志文件写入多条数据
[root@localhost logs]# echo "2019-03-15 21:21:21|ERROR|读取数据出错|参数:id=1002" >> app.log
[root@localhost logs]# echo "2019-03-15 21:21:21|ERROR|读取数据出错|参数:id=1002" >> app.log
[root@localhost logs]# echo "2019-03-16 21:21:21|ERROR|读取数据出错|参数:id=1002" >> app.log
[root@localhost logs]# echo "2019-03-17 21:21:21|ERROR|读取数据出错|参数:id=1003" >> app.log