本篇文章主要講解如下安裝Logstash,logstash依賴于Java環(huán)境,首先安裝Java,安裝腳本如下:
yum install java
logstash安裝
Logstash的安裝腳本如下:
# 下載logstash的壓縮包
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.2.0.zip
# 解壓壓縮包
upzip logstash-7.2.0.zip
# 將解壓的包移到/usr/share目錄下
mv logstash-7.2.0 /usr/share/
cd /usr/share/logstash-7.2.0/
stash第一個(gè)事件
Logstash管道有兩個(gè)必需元素,輸入和輸出,以及一個(gè)可選元素filter。 輸入插件使用來自源的數(shù)據(jù),過濾器插件在您指定時(shí)修改數(shù)據(jù),輸出插件將數(shù)據(jù)寫入目標(biāo)。
如下如

要測試Logstash安裝成功,運(yùn)行最基本的Logstash管道。 執(zhí)行以下的命令
bin/logstash -e 'input { stdin { } } output { stdout {} }'
-e標(biāo)志使您可以直接從命令行指定配置。 通過在命令行指定配置,可以快速測試配置,而無需在迭代之間編輯文件。 示例中的管道從標(biāo)準(zhǔn)輸入stdin獲取輸入,并以結(jié)構(gòu)化格式將輸入移動(dòng)到標(biāo)準(zhǔn)輸出stdout。
啟動(dòng)Logstash后,等到看到“Pipeline main started”,然后在命令提示符下輸入hello world,顯示的如下:
hello world
{
"host" => "VM_0_13_centos",
"message" => "hello world",
"@version" => "1",
"@timestamp" => 2019-07-02T06:26:28.684Z
}
配置logstash輸出到elasticsearch
修改logstash的安裝目錄的config目錄下的logstash-sample.conf文件,配置如下:
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://10.0.0.5:9200", "http://10.0.0.13:9200", "http://10.0.0.17:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
在上面的配置中,輸入數(shù)據(jù)源為filebeat,關(guān)于filebeat見下一小節(jié),輸出源為elasticsearch。更多的輸入和輸出源的配置見官網(wǎng)https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html
用下面的命令從后臺(tái)啟動(dòng)logstash:
./bin/logstash -f config/logstash-sample.conf >logstash.log 2>&1 &
logstash結(jié)合filebeat
在分布式系統(tǒng)中,一臺(tái)主機(jī)可能有多個(gè)應(yīng)用,應(yīng)用將日志輸出到主機(jī)的指定目錄,這時(shí)由logstash來搬運(yùn)日志并解析日志,然后輸出到elasticsearch上。由于于
logstash是java應(yīng)用,解析日志是非的消耗cpu和內(nèi)存,logstash安裝在應(yīng)用部署的機(jī)器上顯得非常的笨重。最常見的做法是用filebeat部署在應(yīng)用的機(jī)器上,logstash單獨(dú)部署,然后由
filebeat將日志輸出給logstash解析,解析完由logstash再傳給elasticsearch。
下載filebeat,下載命令如下:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.2.0-linux-x86_64.tar.gz
tar -zxvf filebeat-7.2.0-linux-x86_64.tar.gz
mv filebeat-7.2.0-linux-x86_64 /usr/share/
cd /usr/share/filebeat-7.2.0-linux-x86_64/
vim filebeat.yml修改配置:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/service-hi.log
output.logstash:
hosts: ["192.168.1.4:5044"]
主要配置的是日志的搜集目錄為/var/log/service-hi.log,這個(gè)目錄是應(yīng)用service-hi輸出日志的文件。輸出到logstsh的地址為192.168.1.4
啟動(dòng)filebeat,執(zhí)行一下命令:
sudo chown root filebeat.yml
sudo ./filebeat -e >filebeat.log 2>&1 &
Spring Boot整合ELK+Filebear構(gòu)建日志系統(tǒng)
在SpringBoot應(yīng)用service-hi,定時(shí)輸出日志如下:
@SpringBootApplication
public class ElkTestApplication {
Logger logger= LoggerFactory.getLogger(ElkTestApplication.class);
Random random=new Random(10000);
public static void main(String[] args) {
SpringApplication.run(ElkTestApplication.class, args);
new ElkTestApplication().initTask();
}
private void initTask(){
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
logger.info("seed:"+random.nextInt(999999));
}
},100,100, TimeUnit.MILLISECONDS);
}
}
然后在部署了filebeat的機(jī)器上部署該應(yīng)用,應(yīng)用的輸出文件為/var/log/service-hi.log,應(yīng)用啟動(dòng)命令如下:
nohup java -jar elk-test-0.0.1-SNAPSHOT.jar > /var/log/service-hi.log 2>&1 &
應(yīng)用啟動(dòng)成功后日志輸出如下:
2019-07-02 17:13:13.530 INFO 31579 --- [pool-1-thread-1] com.example.elktest.ElkTestApplication : seed:562779
2019-07-02 17:13:13.630 INFO 31579 --- [pool-1-thread-1] com.example.elktest.ElkTestApplication : seed:963836
2019-07-02 17:13:13.730 INFO 31579 --- [pool-1-thread-1] com.example.elktest.ElkTestApplication : seed:825694
2019-07-02 17:13:13.830 INFO 31579 --- [pool-1-thread-1] com.example.elktest.ElkTestApplication : seed:33228
2019-07-02 17:13:13.930 INFO 31579 --- [pool-1-thread-1] com.example.elktest.ElkTestApplication : seed:685589
這時(shí)的日志數(shù)據(jù)的傳輸路徑如下圖:

在kibana組件上查看,可以看到創(chuàng)建了一個(gè)filebeat開頭的數(shù)據(jù)索引,如下圖:

在日志搜索界面,可以看到service-hi應(yīng)用輸出的日志,如圖所示:

參考資料
https://www.elastic.co/guide/en/logstash/7.2/installing-logstash.html#_yum
https://www.elastic.co/guide/en/logstash/7.2/first-event.html
https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html