fluentd(td-agent)の検証環境を作成するCloudFormationワンライナー(2014.09版)
はじめに
ログコレクタのfluentdの検証環境をCloudFormationで作りました。fluentdのインストールは簡単ですので素のOSにいれてもよいのですが、EC2の場合ですとSecurityGroupの設定だったり、保存先をS3にする場合の設定だったり、なにかと面倒だったりします。
クラスメソッド都元さんのCloudFormationでfluentdサーバを一発構築するのブログでCloudFormation(CFn)テンプレートを見つけましたが、こちらは最新版の2014.06のAmazon Linux AMIには対応していないようでした。追加プラグインも含めたかったので、こちらをベースにスクリプトを作成しました。
Fluentd CloudFormation テンプレートの概要
AWSアイコンの枠線で囲まれた部分が今回の構築対象です。
元のテンプレートからの変更点
以下となります。
- 2014/06 AMIイメージ対応 (元からあった2013/*は削除しました)
- HVM形式対応 (PVには非対応です)
- fluentd-secure-forward-plugin追加 (24225番ポート利用)
- InternetからfluentdにアクセスできるようにSecurityGroupを修正
- CloudFormation スタックを削除してもインスタンスとバケットが消えないように"DeletionPolicy" : "Retain"を追加
CloudFormation スタックの作成
GUIで行なうのは面倒ですので、スクリプトで実行したいとおもいます。AWS CLIが使える前提です。
スタック作成には以下の3つのパラメータを必要とします。
パラメータ名 | 意味 |
---|---|
stack-name | CloudFormationのスタック名です(重複だめ) |
KeyName | EC2にログインするためのKeyPair名です。 |
SSLSharedKey | FluendのSecure Forwardプラグインで利用する暗号化キーです |
それぞれシェル変数にして渡して実行します。(ワンライナーといいつつ4行になってしまいますが実行は1行ということで。。。)
CFN_STACKNAME=fluentd-test #CloudFormaionのスタック名です。
CFN_KEYNAME='key_takekawa' #EC2にログインするためのキー名です。
CFN_SSLKEY='XXXXXXXXXX' #fluentdのsecure fowardプラグインで利用する暗号化キーです。
aws cloudformation create-stack --disable-rollback --region ap-northeast-1 --stack-name $CFN_STACKNAME --parameters ParameterKey=KeyName,ParameterValue=$CFN_KEYNAME ParameterKey=SSLSharedKey,ParameterValue="$CFN_SSLKEY" --template-url https://s3-ap-northeast-1.amazonaws.com/takekawa-fluentd-test/fluentd.cfn
実際の実行例はこんなかんじです。
$ CFN_STACKNAME='fluentd-test' #CloudFormaionのスタック名です。
$ CFN_KEYNAME='key_takekawa' #EC2にログインするためのキー名です。
$ CFN_SSLKEY='XXXXXXXXXX' #fluentdのsecure fowardプラグインで利用する暗号化キーです。
$
$ aws cloudformation create-stack --disable-rollback --region ap-northeast-1 --stack-name $CFN_STACKNAME --parameters ParameterKey=KeyName,ParameterValue=$CFN_KEYNAME ParameterKey=SSLSharedKey,ParameterValue="$CFN_SSLKEY" --template-url https://s3-ap-northeast-1.amazonaws.com/takekawa-fluentd-test/fluentd.cfn
A client error (AlreadyExistsException) occurred when calling the CreateStack operation: Stack [fluentd-test] already exists
エラーでてますね。同じ名前のスタックは作れないというエラーです。
ということで修正して再実行します。
$ CFN_STACKNAME='fluentd-test3' #CloudFormaionのスタック名です。
$ aws cloudformation create-stack --disable-rollback --region ap-northeast-1 --stack-name $CFN_STACKNAME --parameters ParameterKey=KeyName,ParameterValue=$CFN_KEYNAME ParameterKey=SSLSharedKey,ParameterValue="$CFN_SSLKEY" --template-url https://s3-ap-northeast-1.amazonaws.com/takekawa-fluentd-test/fluentd.cfn
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:180400166198:stack/fluentd-test3/0e5b7000-3f29-11e4-9047-507bfc8840a6"
}
$
作成に10分ほどかかります。進捗はマネージメントコンソールで確認するとよいです。
エラーになった場合は、Eventsを確認すると原因がわかることが多いです。ないKeyPairを指定していたりするとエラーになります。
fluentd 動作確認
構築がおわったら、動作確認です。クライアントのMacからサーバーにfluentのメッセージを送ってみましょう。fluent-postというコマンドが便利です。
$ sudo gem install --no-ri --no-doc fluent-logger
Fetching: fluent-logger-0.4.9.gem (100%)
Successfully installed fluent-logger-0.4.9
1 gem installed
使い方はこんなかんじです。 %%PUBLIC_IP%% の部分はfluentdのPublicIPを指定してください。
$ fluent-post
Usage: fluent-post -t tag.foo.bar -v key1=value1 -v key2=value2
-t [tag (default nil)]
-p [port (default 24224)]
-h [host (default localhost)]
-v [key=value]
$ fluent-post -t test -h %%PUBLIC_IP%% -v key=value -v key2=value2
post successed. #=> {"key"=>"value", "key2"=>"value2"}
しばらく待って、以下のようにS3にファイルが出てきたら、成功です。
おわりに
fluentdの環境構築をCloudFormationで作成してみました。書くと簡単ですが、HVMのディスクの配置にはまったり、fluentdの設定をあやまったりと、なんだかんだで時間がかかってしまいました。
今後は、これをベースにkibana/elastic search/fluent cloudwatch pluginを追加して簡易的な監視メトリクスの調査環境を作っていきたいとおもいます。
Author And Source
この問題について(fluentd(td-agent)の検証環境を作成するCloudFormationワンライナー(2014.09版)), 我々は、より多くの情報をここで見つけました https://qiita.com/tt2004d/items/b6ee5cc229962849947d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .