概要
この記事では、Logstashでログを読み込み、その内容を https で multipart/form-data 形式でPOSTする方法を記載します。
また、主に開発用を想定し、それを Windows 上の Docker で Logstash を動作させる方法も記載します。
要約
簡単に言えば、以下のように config に記載すればできるはずです。
output {
http {
http_method => "post"
url => "https://my-url/foo/bar"
format => "message"
content_type => "multipart/form-data; boundary=||^26Qx3v^||"
message => "--||^26Qx3v^||
Content-Disposition: form-data; name=field1
A new log entry was found!
%{message}
--||^26Qx3v^||--"
}
}
改行コードは CRLF としてください。
form-dataでのPOST
ドキュメントを探した限り、form-dataを扱うための仕組みは存在しませんでした。そのため、http output filterを使って生データをPOSTするしかないようです。
生データをPOSTするには、formatをmessageとし、content_typeにContent-Typeヘッダを指定します。ペイロードはmessageで指定します。content_typeで指定するboundaryは、当たり障りのない文字列を指定してください。
Logstashの config は、logstash.yml で指定した場合を除き \r\n
のような指定ができませんので、configをCRLFの改行コードとし上記のような定義としています。
Windows Docker 上で Logstash を利用
コンテナの実行
Windows で Docker Desktop を使って Logstash を稼働させるには、以下のコマンドを実行します。
docker run --rm -it --name=ls -v /f/es/docker/:/usr/share/logstash/pipeline/ -v /f/es/log/:/mnt/log/ docker.elastic.co/logstash/logstash-oss:7.3.2
この例では、F:\es\docker\logstash.conf
で config を指定しています。また、F:\es\log\
を /mnt/log/
にマウントしていますので、ここにログを配置してテストに使えます。
config のリロード
開発時は config をいろいろ修正して試行錯誤することがあるかと思います。プロセスにSIGHUPを送れば、config の再読込を行うことができます。
docker exec -it ls /bin/kill -SIGHUP 1