通知をFluentdで受ける方法

設定手順

EC2を起動します

  • 今回はAmazonEC2を利用します。OSはAmazonLinuxにしました。
  • Fluentdのin_httpプラグインはデフォルトで9880ポートで受けるので、セキュリティグループの設定はTCP 9880を開けておきます。

パッケージのインストール

  • gemインストールに必要になるので開発ツールパッケージとruby-develをインストールします。
$ sudo yum groupinstall "Development Tools"
$ sudo yum install ruby20-devel

Fluentdのインストール

$ gem install fluentd --no-ri --no-rdoc

fluent.confを記述

  • 動作確認のため、下記のように記述します。
  • httpインプットプラグインで入力し、debug.*タグを標準出力に出力する設定です。
<source>
  @type http
  port 9880
  format json
</source>
<match debug.**>
  @type stdout
  @id stdout_output
</match>

Fluentdを起動

  • 記述したコンフィグファイルでFluentdを起動します。
$ fluentd -c ./fluent.conf
  • Fluentdサーバーは起動したままにして、次の作業を行います。

Amazon SNSの設定

  • AWS Management ConsoleからSNSの設定を行います。

TopicとSubscriptionを作成

  • まずはTopicを作成します。
  • Sns1.png
  • 次に作成したTopicにSubscriptionを作成します。
    • ARNはデフォルト、ProtocolはHTTPを選択します。
    • Endpointに準備したFluentdサーバーを指定します。ここでは http://<IPアドレス>:9880/debug.test と指定します。「debug.test」部分はFluentd側ではタグとして解釈されます。
  • Sns2.png
  • 「Create Subscription」をクリックすると、指定したURLへサブスクリプション確認アクセスが行われます。
    • この時点ではまだサブスクリプションは有効ではありません。Subscription ARNフィールドにPendingConfirmationと表示されているはずです。
  • 起動したままのFluentdサーバーを確認すると下記のようにアクセスが記録されているはずです。(1行で出力されますが、表示上改行しています)
2015-02-22 12:57:34 +0000 debug.test: {"Type":"SubscriptionConfirmation","MessageId":"f25c7edf-2544-4ee4-b62a-b474adbabbca",
"Token":"2336412f37fb687f5d51e6e241d7700ae500a4e64537b034e6e5eaaad27e48c50717735028119c0041dae07cf7aa68313fbcfddb2704544dfd57e7261c761f42b5ffe22ff9b6e8615bad183e7bddc0c2a977a3e3d6ff4b6e9b6f85b683c894930daa48c6cc23048951094592fc53a7bbdd746beb3ad23a230ed04ac89a405fa5",
"TopicArn":"arn:aws:sns:ap-northeast-1:395716534135:notification-test",
"Message":"You have chosen to subscribe to the topic arn:aws:sns:ap-northeast-1:395716534135:notification-test.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
"SubscribeURL":"https://sns.ap-northeast-1.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:ap-northeast-1:395716534135:notification-
test&Token=(...snip...)9a405fa5",
"Timestamp":"2015-02-22T12:57:34.773Z",
"SignatureVersion":"1",
"Signature":"HItIY(....snip....)YnEY0oOkgYpjJBp1as0SE30XPSkJ79lQCja6SMHHCONQcxXNBhEwdPH/20zeO/rX4HfwZxSVRQrJPb84onUf6A==",
"SigningCertURL":"https://sns.ap-northeast-1.amazonaws.com/SimpleNotificationService-d6d679a1d18e95c2f9ffcf11f4f9e198.pem"}

Subscription ConfirmURLへアクセス

  • アクセスの記録から、「SubscribeURL」で示されるURLをコピーして、ブラウザなどでアクセスします。
    • この作業を行うとサブスクリプションが有効になります。AWS Management Console上でもSubscription ARNフィールドに arn:....と表示されるはずです。
  • コマンド好きな人は下記のようにしても良いでしょう。
$ curl "https://sns.ap-northeast-1.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:ap-northeast-1:395716534135:notification-test&Token=(...snip...)9a405fa5"

以上でサブスクリプション設定が完了しました。

facebook slideshare rubygems github qiita