AWS Fargate の Amazon Elastic Container Service (Amazon ECS) タスクで Splunk ログドライバーを使用したいと考えています。
簡単な説明
Fargate の Docker の Splunk ログドライバー (「ロギングドライバー」とも呼ばれる) を使用して、コンテナログを Enterprise Splunk ログコレクターまたは Splunk Cloud に送信できます。
解決策
Fargate ログを受信するように Splunk Cloud 環境をセットアップする
- Splunk Cloud アカウントを作成するには、無料の Splunk オプションを使用してください。Splunk Cloud アカウントをすでにお持ちの場合は、ステップ 2 に進んでください。詳細については、Splunk ウェブサイトの「無料 Splunk」を参照してください。
- Splunk Cloud アカウントにサインインします。
**注:**アカウントを作成したら、Splunk Cloud のURL、ユーザー名、パスワードを使用してサインインします。
- ナビゲーションメニューで [設定] を選択します。
- データセクションで、[データ入力] を選択します。
- ローカル入力セクションの「アクション」列で、[新規追加] を選択します。
**注:**HTTP イベントコレクター (HEC) トークンを作成すると、データイベントとアプリケーションイベントを HTTP および Secure HTTP (HTTPS) プロトコルで Splunk デプロイに送信できます。
- 名前にトークンの名前を入力し、[次へ] を選択します。
- セットアップウィザードの残りのページに進み、[送信] を選択して HEC トークンを作成します。
**注:**デフォルト値はそのままにしておくことができます。
- curl または Docker を使用して新しいトークンをテストします。
注:デフォルトでは、Splunk はポート 8088 でリッスンし、/services/collector パス上のイベントを受け入れます。
curl:
curl -k https://prd-p-9l79p.splunkcloud.com:8088/services/collector -H "Authorization: Splunk splunk-token" -d '{"event": "Put this message in Splunk"}'
**注:**splunk-token は、以前に作成した HEC トークンに置き換えてください。
Docker:
docker run --publish 80:80 --log-driver=splunk --log-opt splunk-token=splunk token --log-opt splunk-url=https://prd-p-u7z1u.splunkcloud.com:8088 --log-opt splunk-insecureskipverify=true --log-opt splunk-sourcetype=docker-test --log-opt splunk-index=main nginx
**注:**splunk-token は、以前に作成した HEC トークンに置き換えてください。
HEC トークンを使用するように AWS Secrets Manager を設定する
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Fargate がトークンを安全に使用できるように、HEC トークンを Secrets Manager に保存するには、次のコマンドを実行します。
aws secretsmanager create-secret --name splunk-token --secret-string token-value
**注:**splunk-token を HEC トークンに置き換えてください。token-value をトークンの値に置き換えてください。
シークレットにアクセスする権限を持つタスク実行ロールの設定
- AWS Identity and Access Management (IAM) コンソールを開きます。
- ナビゲーションペインで、**[ロール]**を選択します。
- ロールのリストから、ecsTaskExecutionRole を検索して選択します。
- [インラインポリシーの追加] を選択します。
- エディターの JSON タブを選択し、次のポリシーを入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"kms:Decrypt"
],
"Resource": [
"arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>",
"arn:aws:kms:<region>:<aws_account_id>:key/<key_id>"
]
}
]
}
**注:**カスタムの AWS Key Management Service (AWS KMS) キーを使用してシークレットを暗号化する場合は、KMS キーの kms:Decrypt 権限と Amazon リソースネーム (ARN) を指定します。
- **[ポリシーの確認]**を選択します。
- [名前] に、ポリシーの名前を入力します。
- [ポリシーを作成] を選択します。
Fargate で Amazon ECS タスク用のタスク定義を設定します。
- Amazon ECS コンソールを開きます。
- ナビゲーションペインの Amazon ECS セクションで、[タスク定義] を選択します。
- [新しいタスク定義の作成] を選択します。
- [Fargate] を選択し、[次のステップ] を選択します。
- [タスクとコンテナ定義の設定]セクションの、[タスク定義の名前] に、タスク定義の名前を入力します。
- [タスクロール] で、前に設定したロールを選択します。
- [タスクサイズ] セクションの [タスクメモリ (GB)] と [タスク CPU (vCPU)] に、タスクに適した値を入力します。
- 「コンテナ定義」セクションで、[コンテナを追加] を選択します。
- コンテナのニーズに合った適切なオプションを選択してください。
- ドロップダウンメニューの 「ログ」セクションで、[ログを Splunk にエクスポート] を選択します。
- ログオプションのキーと値のオプションには、次のように入力します。
**キー: **splunk-url
**値:**お使いの Splunk エンドポイント (例:)
**キー: ** splunk-insecureskipverify
値: True
**キー: ** splunk-token
**valueFrom:**前に作成したシークレット ARN
- [追加] を選択します。
**注:**Splunk のコードと構成の詳細については、GitHub の splunk.go と Docker ウェブサイトの Splunk オプションを参照してください。
- タスク定義を作成するには、[作成] を選択します。
- Amazon ECS サービスを作成するか、前に作成したタスク定義を使用するタスクを実行します。
Splunk Cloud でログを確認する
Splunk Cloud でログを確認する前に、タスクが実行中であることを確認してください。
注:ログ設定で splunk-index を指定していないため、ログはデフォルトでメインインデックスの splunk-index に送信されます。
- Splunk Cloud アカウントに接続します。
- ナビゲーションメニューで [検索] を選択します。
- 検索ボックスに **index="main」**と入力します。
**注:**前のステップに従って、Amazon ElasticCompute クラウド (Amazon EC2) 起動タイプの Amazon ECS のタスク定義を作成できます。その後、任意の ECS タスクから Splunk ログドライバーを使用して、Splunk ログコレクターにログを送信できます。
関連情報
Amazon ECS タスク実行 IAM ロール