【祝】FargateでログドライバーにSplunkが利用可能になりました!
AWS Fargate、みなさん利用していますか?
ホストインスタンスの管理なしにコンテナワークロードを実行可能な超絶便利なサービスなんですが、そのAWS FargateのログドライバーにSplunkが追加されました!
AWS Fargate PV1.3 now supports the Splunk log driver
従来、FargateではログドライバーにCloudWatchLogsしか指定できなかったのですが、ついに初めてのFargateのログドライバー拡張です。こりゃやってみるしか無いでしょ!というわけで、早速試してみた様子をお届けします。
ログドライバー追加きたか…!! ( ゚д゚) ガタッ / ヾ __L| / ̄ ̄ ̄/_ \/ /
ログドライバーアップデート内容の詳細
今回のアップデートは、大きく分けて2つの部分から構成されます。
1.ログドライバーAPIの拡張
タスク定義内のコンテナ定義において利用するログドライバーが拡張されました。ログドライバーのAPIドキュメントがこちら。
以下の記述「splunk」が追加されています。
For tasks using the Fargate launch type, the supported log drivers are awslogs and splunk.
引用:LogConfiguration - Amazon Elastic Container Service
2.ログドライバーで機密情報設定のためのマネージドサービス参照可能化
SplunkのHTTPエンドポイントコレクターに接続するためのトークンのような機密情報を扱うために、ログドライバーの設定からAWS Secrets ManagerやAWS Systems Manager Parameter Storeの値を参照できるようになりました。
詳細はこちらに記載されていますが、新しくSecretOptions
という項目が追加されています。
具体的なタスク定義のスニペットは、以下で参照してみてください。
{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080" }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }] }
もちろん、上記設定はWebコンソールからの登録も可能です。
FargateのログをSplunkに転送してみた
というわけで、実際にFargateのログをSplunkに転送してみます。
Splunk環境の準備
まだSplunk使ったことない人は、先にSplunkを使える状態にしておきます。Splunkは、ホストインストール型もSaaS版も両方ありますが、自分はMarketPlaceからの起動が簡単なホストインストール型を利用しました。
SplunkへのHTTPイベントコレクタの登録
ログドライバーからは、SplunkのHTTPイベントコレクタ経由でログを流し込むので、事前にトークンの発行を含めたHTTPイベントコレクターの動作確認をしていきます。
設定は、公式のこちらを参考に実施してみてください。手順最後の方で、サンプルデータをcurlで投げてみて、無事データが登録されれば、HTTPイベントコレクタの設定は完了です。
curlでの動作確認例です。
$curl -k http://<host>:8088/services/collector -H 'Authorization: Splunk <token>' -d '{"sourcetype": "mysourcetype", "event":"Hello, World!"}' {"text":"Success","code":0}
パラメータストアに、Splunkのトークンを格納
Fargateログドライバーには、以下の設定が必要になります。
- SplunkのHTTPイベントコレクタのエンドポイントURL
- HTTPイベントコレクタに接続するためのトークン(←こちらは機密情報)
Fargateのタスク定義内のコンテナ定義にこれらの値を設定しますが、トークンを平文で格納するのはリスクがあります。そのため、みんな大好きSystemsManagerのパラメータストアに、そのトークンをSecureStringとして登録します。
以下のコマンドで、トークンを登録します。パラメータストアの名前はsplunk-token
。この値は、後手順のログドライバーの設定で利用します。
$ aws ssm put-parameter --name "splunk-token" --value "取得したトークンの値" --type "SecureString" { "Version": 1 }
登録内容を確認します。
$ aws ssm describe-parameters --filters "Key=Name,Values=splunk-token" { "Parameters": [ { "Name": "splunk-token", "Type": "SecureString", "KeyId": "alias/aws/ssm", "LastModifiedDate": 1556920691.404, "LastModifiedUser": "arn:aws:sts::XXXXYYYYZZZZ:assumed-role/cm-hamada.koji/AAAAAAAAAAAAAAAA", "Version": 1 } ] }
無事にパラメータストアに登録された値のメタデータが表示されればOKです。
Fargateのタスク定義設定
ログドライバー含めたFargateのタスク定義を設定していきます。ここでは、Webコンソールで説明します。とりあえず動作確認のための最小限の設定です。
「新しいタスク定義の作成」→「FARGATE」を選択します。
- タスク定義名:「fargate-splunk-logdriver-sample」
- タスクロール:タスク実行中、ログドライバーのところでパラメータストアにアクセスするために、そのためのポリシーを付与しておきます
- タスク実行ロール:任意
- タスクCPU:任意
- タスクメモリ:任意
- コンテナ定義
- コンテナ名:「splunk-logtest-container」
- イメージ:「httpd:latest」(apacheの最新版をdockerhubから利用)
ログ設定部分は、以下の通り。
- ログドライバー:splunk
- ログオプション
- splunk-url:Value:HTTPイベントコレクタのURL(下の注意を参照)
- splunk-token:ValueFrom:splunk-token(パラメータストアに登録した名前)
Splunk-url設定上の注意点
splunk-urlに指定するURLは、実際のエンドポイントではなく、ドメイン、プロトコル、ポート部分のみ指定します。
- 正しい例
- https://10.0.2.217:8088
- 誤っている例
- https://10.0.2.217:8088/services/collector
curlなどでエンドポイントの確認をするときは下のURLを使用しますが、ログドライバーに設定するURLは上になるのでご注意ください。
上記設定を完了し、無事にタスク定義が登録できれば、前準備は完了です。
Fargateのタスクを実行し、動作を確認
いよいよ動作確認。上で定義したタスク定義を元にタスク実行します。詳細は省きますが、無事タスクがRUNNING
状態になればOk。
タスクの正常起動を確認したら、Splunkのサーチ画面で、ソースにHTTPエンドポイントコレクターの名前を指定して検索してみます。サーチクエリ例は以下の通り。
source="http:fargate-logdriver-collector" (index="history" OR index="main" OR index="summary")
こんな感じで、コンテナ内のログが無事イベント検索できたらOkです。いやっほぅ!!
後は、Splunkの世界の話なので、ログを煮るなり焼くなり好きにすれば良いんじゃないでしょうか。
ログドライバーにおけるSplunkとCloudWatchLogsのコンソール相違点
ログドライバーにCloudWatchLogsを使用していた場合は、タスク画面にLogs
タブがあり、そこでもログの簡易的な検索は可能でした。
対して、ログドライバーにSplunkを使用する場合は、タスク画面にそもそもLogs
タブがありません。すべてSplunk側で確認する必要がありますので注意しましょう。
今後のFargateログドライバー拡張が期待できるアップデート
ECS(on EC2)では、元々ログドライバーとして、「json-file | syslog | journald | gelf | fluentd | awslogs | splunk」などが用意されています。対して、ECS(on Fargate)では、今までCloudWatchLogs(awslogs)しか対応していませんでした。
慣れたログプラットフォームをFargateでも使いたいという要望は常にあったわけですが、そこに最初にやってきたのが、Splunkというわけです。
今後、fluentdなどの対応も予定されていますので、Fargateのログドライバーの拡張、これからもどんどん広がっていけば、もっと便利にFargateを利用できるシチュエーションが増えそうです。
それでは、今日はこのへんで。濱田(@hamako9999)でした。
関連記事
Splunk馴染みが無い方は、こちらの公式チュートリアルをやってみると、凄さが際立ちます。ステキです。
SplunとAWSとの統合に関しては、こちらを参考にしてみてください。