Splunk Cloud でログ集約してみたい
こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井です。
先日 Fargate のログドライバーに Splunk が対応しました。
Splunk は弊社ハマコーの記事にある通りパワフルなツールです。
Fargate のログ出力を Splunk に検討されるとして
運用を考えると一つのコンソールで全てのログ参照が出来ることがベストだと思います。
今回は Splunk でログ集約を試してみます。
Splunk Cloud
今回は Splunk Cloud を試します。
何が利点かと言えば、やはり 管理が不要 になることです。
仮想マシン、OS、パッチ、バージョンアップなど生産的ではないタスクから開放されることは
システム担当者からすると幸せな気持ちなるはずです。
収集可能なログ
執筆日時点で収集可能なログ、イベント、メトリクスは以下の通りです。
- Config
- Config Rules
- Description
- Inspector
- CloudTrail
- CloudWatch Logs
- CloudWatch
- Billing
- S3
- Kinesis
- SQS
最新情報はこちらを参照ください。
Source types for the Splunk Add-on for AWS
AWS サービスから直接収集するものと SQS-based S3 で収集するものが存在します。
今回は前者から Cloud Watch Logs、後者から CloudTrail を試します。
IAM 準備
まずは Splunk Cloud に必要な IAM ユーザー、ロール、ポリシーを作ります。
ロール用 IAM ポリシー
IAM ポリシーを作ります。
名前は任意ですがここでは splunk-role-policy とします。
ポリシーは 公式ドキュメント に従って以下の通りします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:GetQueueAttributes", "sqs:ListQueues", "sqs:ReceiveMessage", "sqs:GetQueueUrl", "sqs:SendMessage", "sqs:DeleteMessage", "s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation", "s3:ListAllMyBuckets", "s3:GetBucketTagging", "s3:GetAccelerateConfiguration", "s3:GetBucketLogging", "s3:GetLifecycleConfiguration", "s3:GetBucketCORS", "config:DeliverConfigSnapshot", "config:DescribeConfigRules", "config:DescribeConfigRuleEvaluationStatus", "config:GetComplianceDetailsByConfigRule", "config:GetComplianceSummaryByConfigRule", "iam:GetUser", "iam:ListUsers", "iam:GetAccountPasswordPolicy", "iam:ListAccessKeys", "iam:GetAccessKeyLastUsed", "autoscaling:Describe*", "cloudwatch:Describe*", "cloudwatch:Get*", "cloudwatch:List*", "sns:Get*", "sns:List*", "sns:Publish", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:GetLogEvents", "ec2:DescribeInstances", "ec2:DescribeReservedInstances", "ec2:DescribeSnapshots", "ec2:DescribeRegions", "ec2:DescribeKeyPairs", "ec2:DescribeNetworkAcls", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVolumes", "ec2:DescribeVpcs", "ec2:DescribeImages", "ec2:DescribeAddresses", "lambda:ListFunctions", "rds:DescribeDBInstances", "cloudfront:ListDistributions", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeInstanceHealth", "elasticloadbalancing:DescribeTags", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth", "elasticloadbalancing:DescribeListeners", "inspector:Describe*", "inspector:List*", "kinesis:Get*", "kinesis:DescribeStream", "kinesis:ListStreams", "kms:Decrypt", "sts:AssumeRole" ], "Resource": [ "*" ] } ] }
ユーザー用 IAM ポリシー
次にユーザー用 IAM ポリシーです。
名前は任意ですが splunk-user-policy にしました。
ポリシーは以下です。
「your-account-id」の箇所はご自身の AWS アカウントに置き換えてください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::your-account-id:role/splunk-role" } ] }
IAM ロール作成
IAM ロールを作ります。
名前は任意でここでは splunk-role にしています。
前の手順で作成した splunk-role-policy をアタッチしてください。
ロールをしたら、信頼関係タブから 信頼関係の編集 をクリックし以下のように編集します。
「your-account-id」の箇所はご自身の AWS アカウントに置き換えてください。
「splunk-user」 は次の手順で作成します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account-id:user/splunk-user" }, "Action": "sts:AssumeRole" } ] }
IAM ユーザー作成
IAM ユーザーを作ります。
名前は任意でここでは splunk-user としています。
ユーザーを作成する際には プログラムによるアクセス を選択してください。
※クレデンシャルが記述された csv ファイルを忘れずにダウンロードしておきます。
このユーザーには splunk-user-policy と CloudWatchLogsReadOnlyAccess の2つのポリシーをアタッチします。
Splunk Add-on for AWS のインストール
Splunk Cloud へログインします。
画面の左上に歯車のアイコンがあるのでクリックします。
Browse more apps をクリックしたのちに
Splunk Add-on for Amazon Web Services を探してインストールします。
Splunk Cloud セットアップ
画面左側に Splunk Add-on for AWS が表示されているのでクリックします。
Configuration タブ → Account → Add をクリックします。
前の手順で作成した splunk-user の Key ID と Secret Key を入力し任意の名前を付けて保存します。
続いて IAM Role タブ → Add をクリックします。
splunk-role の ARN と任意の名前を付けて保存します。
CloudWatch Logs の取込み
Splunk Add-on for AWS 画面のまま Inputs をクリックします。
Inputs 画面で Create New Input → Custom Data Type → CloudWatch Logs をクリックします。
情報を入力して保存します。
項目 | 値 |
---|---|
Name | 任意の名前 |
AWS Accont | 前の手順で設定したアカウントを選択 |
AWS Region | 取り込みたい CloudWatch Logs のリージョンを選択 |
Log Group | 取り込みたいロググループを選択、カンマ区切りで複数指定可能 |
Stream Matching Regex | .* |
Only After | 1970-01-01T00:00:00 |
Source Type | aws:cloudwatchlogs |
Index | default |
Log Group で指定したログが取り込まれていきます。
数分待ちます。
Splunk Add-on for AWS 画面上部の Search ボタンをクリックします。
検索画面に遷移します。
検索欄に以下を入力して検索しログを取り込まれていることを確認します。
sourcetype="aws:cloudwatchlogs"
CloudTrail の取込み
CloudTrail は SQS-Based S3 という方式で取り込みます。
Splunk が推奨している方式で、他には S3 Access Log、CloudFront Access Log、ELB Access Log など様々なログがこの方式です。
CloudTrail の場合は、CloudTrail → SNS → SQS → Splunk になります。
なるほどパワフルでスケーラブルですね。
Splunk に限らずログを外部に送るときは、どこかでキューイングしておくと
予期せぬトラブルが減って助かります。
CloudTrail の設定
CloudTrail で SNS への発行を有効にします。
AWS マネジメントコンソールでは以下のようにします。
CloudTrail の画面で SNS トピックを作ってしまうと楽です。
ここでは splunk-cloudtrail-topic と名前にしています。
SQS の設定
キューを2つ作成します。
スタンダードキューと DeadLetter 用の2つです。
ここでは splunk-cloudtrail-queue と splunk-cloudtrail-dlqueue にしています。
スタンダードキューはアクセス許可を以下の設定し、CloudTrail で指定した SNS トピックを許可します。
また、デフォルトの可視性タイムアウト を 5分 にします。(Splunk の推奨)
SNS の設定
CloudTrail で指定した SNS トピック画面を開きます。
CloudTrail 設定手順で splunk-cloudtrail-topic したトピックです。
サブスクリプションの作成 で前の手順で作成した SQS を設定します。
splunk-cloudtrail-queue としたキューです。
以下のようにステータスが 確認済み になれば OK です。
Splunk Cloud の設定
Splunk に戻ります。
Splunk Add-on for AWS 画面の Inputs をクリックします。
Inputs 画面で Create New Input → CloudTrail → SQS-Based S3 をクリックします。
情報を入力して保存します。
項目 | 値 |
---|---|
Name | 任意の名前 |
AWS Accont | 前の手順で設定したアカウントを選択 |
Assume Role | 前の手順で設定したロールを選択 |
AWS Region | CloudTrail の出力先リージョンを選択 |
SQS Queue Name | 前の手順で作成したスタンダードキュー |
SQS Batch Size | 10 |
S3 File Decoder | CloudTrail |
Source Type | aws:cloudtrail |
Index | default |
Splunk Add-on for AWS 画面上部の Search ボタンをクリックします。
検索画面に遷移します。
検索欄に以下を入力して検索しログを取り込まれていることを確認します。
sourcetype="aws:cloudtrail"
さいごに
Splunk Cloud でログ収集を試してみました。
今回は CloudWatch Logs と CloudTrail を試してみましたが、
他のログも同様の手順で収集可能です。
※ VPC Flow Log を Firehose 経由で収集したかったのですが、Splunk Cloud はまだ対応してないようです。
参考
Splunk Add-on for AWS
Install an add-on in Splunk Cloud
【祝】FargateでログドライバーにSplunkが利用可能になりました!
SplunkのAWS統合サービス「Splunk App for AWS」を試してみた
統合ログ分析ソリューションSplunkの凄さを公式チュートリアルで体感する