三歩あるけば物も忘れる

お腹のお肉がメタボックル

ユーザ用ツール

サイト用ツール


Aws:ElasticSearch:AutomaticallyRegisterFilesPlacedS3

13.S3に置いたファイルを自動登録する

結局ShellScript頼みなので、ご参考までに・・・。

成功事例

■処理の流れ
S3→SQS→Logstash→ShellScript→ElasticSearch
※S3イベント通知の設定はAws/SimpleQueueService/S3イベント通知を参照願います。

■処理イメージ図

Logstash.conf

・input:plugins-inputs-sqsでSQSからキューを取得
・filter:SQSからキューで取得できるRecords(fields)からkeyとsizeとbucketnameを抽出。※urldecodeは日本語ファイルを想定してです。
・output:sizeが0じゃなかったらkeyとbucketnameをShellScriptに渡しています。※sizeが0はフォルダ作成イベントなので除外。

input {
  sqs {
    queue => "{SQSのキュー名}"
    region => "ap-northeast-1"
  }
}
filter {
    split { field => "Records" }
    mutate {
        add_field => {
            "key" => "%{[Records][s3][object][key]}"
            "size" => "%{[Records][s3][object][size]}"
            "bucket" => "%{[Records][s3][bucket][name]}"
            }
        remove_field => [ "Records" ]
    }
    urldecode { field => "key" }
}
output {
    if !([size] == "0") {
       exec {
           command => "bash /tmp/logstash.sh %{key} %{bucket}"
       }
    }
    stdout{}
}

/tmp/logstash.sh

Aws/ElasticSearch/11.日本語ファイルを登録するの処理を流用し、前処理にAWSCLIコマンドでバケット名とキー名からファイルを取得しています。

#! /bin/bash
path="/tmp/filebeat/"
file_name=$(basename $1)
file_path=$path$file_name
aws s3api get-object --bucket $2 --key $1 $file_path

file=$(base64 $file_path | perl -pe 's/\n//g')
echo -e "{ \"index\" : { \"_index\" : \"{インデックス名}\", \"_type\" : \"_doc\", \"_id\" : \"{ID}\", \"pipeline\": \"{pipeline名}\" }\n{ \"@timestamp\" : \"`date +'%Y-%m-%dT%H:%M:%S.%NZ'`\", \"data\" : \"$file\" }" > input.json
curl -X POST -H 'Content-Type: application/json' '{Elasticsearchエンドポイント}/_bulk?pretty' --data-binary @input.json

rm -f $file_path

Template、Pipeline

TemplateとPipelineは下記を参考に設定願います。
Aws/ElasticSearch/3.Template
Aws/ElasticSearch/4.Pipeline

失敗事例

その1Logstash(Filebeatのoutput.logstash)連携

・S3→SQS→Filebeat→Logstash→ElasticSearch
 →Aws/ElasticSearch/12.ディレクトリに置いたファイルを自動登録するの失敗事例と同じで実現を断念、やはりバイナリファイル向きではない。

その2Logstash(Filebeatのoutput.file)連携

・S3→SQS→Filebeat→Logstash→ShellScript→ElasticSearch
 →output.fileは、SQSのキュー毎にファイルが分けられない為Aws/ElasticSearch/12.ディレクトリに置いたファイルを自動登録するの成功事例の方法が使えなかった。

コメント

コメントを入力:
G A M J᠎ I
 
Aws/ElasticSearch/AutomaticallyRegisterFilesPlacedS3.txt · 最終更新: 2021/07/21 by 127.0.0.1