Logstash 可以獲取資料源,將資料源進行資料切割及過濾,在將清洗過的資料傳算到指定的位置。

在獲取資料方面,可以分成不同的方式,這裡介紹幾個常見的 plugin:

1.tcp

TCP 可以用來接收 TCP socket 資訊,屬於被動接收,並且可透過 type 來設定分類

# 預設對外提供 tcp 接口
input {
	tcp {
		port => 5000,
		type => my-web-source-type
	}
	tcp {
		port => 5000,
		type => my-app-source-type
	}
}

## Add your filters / logstash plugins configuration here

output {
	elasticsearch {
		hosts => "elasticsearch:9200"
		user => "elastic"
		password => "changeme"
	}
}

2.http

http plugin 可以讓你透過 webhooks 的方式傳送資料到 Logstash,

input {
  http {
    host => "127.0.0.1" # default: 0.0.0.0
    port => 31311 # default: 8080
  }
}

由於開放性的接口,若需要暴露對外開放,則可以加上安全驗證

input {
   port => 3332
   user => myuser
   password => "$tr0ngP4ssWD!"
   ssl => on
   keystore => "/tmp/mykeystore.jks"
   keystore_password => "keystore_pass"
}

更進階用法可參考 https://www.elastic.co/blog/introducing-logstash-input-http-plugin

3.kafka

可透過訂閱 Kafka 進行消費,以下是設定的範例:

### INPUTS
input {
	kafka {
		codec => "json"
		topics_pattern => "log-my-project" #要訂閱的主題模式
		bootstrap_servers => "localhost:9092" 
		auto_offset_reset => "latest" #  automatically reset the offset to the latest offset
		group_id => "log-my-project" #設定群組ID,不同群組的 consumer 之間不會互相影響
	}
}

詳細參數可參考 https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html#plugins-inputs-kafka-bootstrap_servers

4.file

File plugin 可以用來偵測靜態檔案,當檔案發生變化時,就觸發擷取,例如,擷取 Laravel log。

input {
	file {
		path => ["/var/www/html/mysite/storage/log/*.log", "/var/www/html/mysite2/storage/log/*.log"]
		type => "laravel-site-log"
	}
}

5.log4j

使用 JAVA 常用的 log4j ,可以透過 log4j plugin 將訊息切割成 timestamp, path, proiority,, logger_name….

input {
	log4j {
		port => 3690
		type => "my-java-project"
	}
}

更多 logstash plugin 可參考 https://www.elastic.co/guide/en/logstash/current/input-plugins.html