前言

惦记logstash很久了。一直没舍下时间来弄。因为logstash有能力将不同的数据源整合成我要的数据格式,就给kafka和es。这就让我可以在写代码的情况下具备收集和分析数据的能力。这也是我接触logstash的初衷。

安装

官网地址 我用的是二进制压缩包,根据官网的提示,解压出来就好了。不过不要解压到路径中携带英文冒号的路径上。另外,需要预先安装jdk11或者jdk17。我这里装得是11。
安装jdk11 我的安装路径是

/opt/logstash

小试一下

输入如下指令

/opt/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'

注意,需要启动一会儿,等启动后,你输入字符串,回车,就能看到输出。大概如下图:

Java项目配置Logstash推送日志 logstash指定jdk_官网


上图中,我输入的是test3,回车后会出现下面大括号中的内容。

其实指令的内容也不难理解,就是我们启动了logstash,输入是标准输入,输出是标准输出。

试下Filebeat

Filebeat是一个高可靠低延迟的轻量级工具。Filebeat在宿主机上仅会占用很少的资源。Logstash默认安装会包含Beats input插件。Beats input插件使logstash可以从Elastic Beatc框架接收事件。这意味着任何Beat都可以向logstash写事件。

安装

Filebeat的安装没有源码安装。我现在使用的机器是centos7的,所以我使用rpm包或者yum进行安装。为了更好得控制版本,这次我选择rpm包进行安装。

rpm -ivh filebeat-8.3.2-x86_64.rpm

此命令中各选项参数的含义为:
-i:安装(install);
-v:显示更详细的信息(verbose);
-h:打印 #,显示安装进度(hash);

配置

总体上来说,我们需要将Filebeat的内容传输给logstash。这里我还没有启动logstash,我们先配置Filebeat,并启动它。在logstash还没启动的时候,它会持续的向其发送,知道它准备好。下面是配置文件(/root/logstash/test-filebeat.yml):

filebeat.inputs:
- type: log
  paths:
    - /root/logstash/test-filebeat-data.txt
output.logstash:
  hosts: ["localhost:5044"]

这里面我们可以看到,我们配置了inputs和output。input是我自己创建的一个文本文件,一会儿我会向里面添加文本进行测试。output是配置到logstash的。默认的Beats input插件的监听端口就是5044
启动filebeat

filebeat -e -c /root/logstash/test-filebeat.yml

启动logstash。我的logstash是解压到/opt/logstash目录的,所以需要先去这个目录

cd /opt/logstash
./bin/logstash -f /root/logstash/test-logstash-pipline.conf --config.reload.automatic

测试

其实,经过上面的配置和启动,就已经联通了。基本的测试语句如下:

echo 'test' > /root/logstash/test-filebeat-data.txt   # 覆盖文件中的文本
echo 'test' >> /root/logstash/test-filebeat-data.txt  # 追加文件中的文本
rm /root/logstash/test-filebeat-data.txt  # 删除文件中的文本

经测试,无论是追加、删除还是覆盖中的文本,filebeat总是可以准确地识别到新进来的文本,并切分发送,可靠好用。

后台启动

filebeat后台启动指令

nohup /bin/filebeat -e -c /root/logstash/test-filebeat.yml > /dev/null 2>&1 &

logstash后台启动指令

nohup /opt/logstash/bin/logstash -f /root/logstash/test-logstash-pipline.conf --config.reload.automatic > /dev/null 2>&1 &