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 之間不會互相影響
}
}
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