0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LogstashでWebhookにform-dataをPOSTする

Last updated at Posted at 2021-12-29

概要

この記事では、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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?