logstash從AWS S3獲取日志信息的常用方法有兩種,一種是利用AWS lambda,另一種就是利用logstash的S3 input插件。
插件github:https://github.com/logstash-plugins/logstash-input-s3
插件文檔:https://www.elastic.co/guide/en/logstash/7.3/plugins-inputs-s3.html
需要注意的是,logstash 7.3版本和6.3版本對應的S3 input的版本也不同,兩者支持的設置選項也不同。一個明顯的區別是logstash 7.3對應的S3 input多了一個watch_for_new_files選項。
配置選項的話,其實值得說的內容並不多。主要有以下幾個:
access_key_id
secret_access_key
region
這三個配置是跟登陸S3服務相關的。其中access key和secret access key在My Security Credentials中進行查看和管理。
bucket
這個是指定數據來源的桶的名稱。
prefix
exclude_pattern
這兩個是用來指定或過濾文件的。
prefix將指定一個字符串前綴,符合該前綴的文件將被
收集。
exclude_pattern將指定一個正則表達式,符合該正則表達式的文件將被
忽略。
另外有一點,在S3中,雖然文件在形式上是以文件夾的結構進行管理的,但文件夾的實質是文件名的前綴。例如,假設桶中有一個文件夾叫gg,gg中有一個叫abc.log的文件,那么實際上abc.log的文件全名是gg/abc.log。在進行文件的匹配和過濾時,也是按文件全名進行處理的。如果有 prefix => "gg/",則可以匹配到在gg文件夾中的abc.log。
S3 input插件將讀取符合配置的每個文件的內容,並將文件中的每一行轉換為一個message,后續可以利用filter對message進行處理。在讀取了S3上的文件后,S3 input會在./data/plugins/inputs/s3/中建立文件並記錄目前已經讀取文件的最后上傳時間。該文件即標記了logstash讀取文件的進度。刪除該文件將導致logstash在啟動后重新讀取S3上的符合配置要求的文件內容。