前言
惦记logstash很久了。一直没舍下时间来弄。因为logstash有能力将不同的数据源整合成我要的数据格式,就给kafka和es。这就让我可以在写代码的情况下具备收集和分析数据的能力。这也是我接触logstash的初衷。
安装
官网地址 我用的是二进制压缩包,根据官网的提示,解压出来就好了。不过不要解压到路径中携带英文冒号的路径上。另外,需要预先安装jdk11或者jdk17。我这里装得是11。
安装jdk11 我的安装路径是
/opt/logstash
小试一下
输入如下指令
/opt/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'
注意,需要启动一会儿,等启动后,你输入字符串,回车,就能看到输出。大概如下图:
上图中,我输入的是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 &