Datadogを使ってAWSLambdaのメトリクス・ログ監視を行う機会がありましたので、備忘録を残したいと思います。
この記事では、監視対象のLambdaから監視データを取得するための設定について記載しています。監視設定を行う手順については後編に記載予定です。
Datadogの初期設定などについては以下のブログを参照いただければと思います。
1、Datadog・AWSの事前設定
1-1、Lambdaメトリクスを取得するための設定
1-1-1、DatadogのLambdaのメトリクス収集設定
DatadogのAWSインテグレーションタイルでLambdaのメトリクス収集設定が有効化されていることを確認します。
・左ペイン「Integrations」→AWSアイコン(Amazon Web Service)をクリック
(1)左ペインの項目でLambdaにチェックがあるか確認します。
この項目にチェックがある場合は、Datadogに登録した全AWSカウントでLambdaメトリクスの取得が有効になります。Lambda メトリクスの取得有無をAWSアカウントごとに決める場合は、チェックを外します。
(2)各AWSアカウントの項目では、以下を設定します。
・「to Lambda with tag:」の設定
監視したいLambda ファンクションのタグ設定で「to Lambda with tag:」に設定したタグを指定するとメトリクス監視が開始されます。
今回は、「datadog-enable:true」を設定したと想定します。
・「Per namespace:」の設定
特定のAWSアカウントでLambdaメトリクスを有効にする場合は、「Service」で「Lambda」を選択し、「Collect Metrics」にチェックを入れます。
・項目設定後、画面下部分にある「Update Configuration」をクリックし、設定を保存します。
1-1-2、AWSアカウントでのDatadogアクセス許可設定
監視対象のLambdaが存在するAWSアカウントでDatadogのアクセス許可がある事を確認します。
・AWSコンソールのIAMコンソールを表示して、左ペインから「ポリシー」をクリックします。
・検索欄に「DatadogAWSIntegrationPolicy」を入力し、表示された項目をクリックします
・「アクセス権限」タブでポリシーを確認し、「lambda:List*」「tag:GetResources」が設定されていることを確認します。
1-2、Lambda実行ログの取得設定
Datadog公式手順:Datadog Forwarder
1-2-1、AWSアカウントにログイン
設定対象のLambdaが存在するAWSアカウントにログインします。
1-2-2、リージョンの切り替え
設定対象のLambdaが存在するリージョンに切り替えます。
尚、ログ取得設定を別リージョンでも行う場合は、(2)~(5)の操作を繰り返し行います。
1-2-3、ログフォワーダー設定画面の表示
「1-2-2」でAWSコンソールを表示しているブラウザーで、以下のリンクへアクセスし、「Launch Stack」をクリックします。
Datadog ForwarderのCloudFomationテンプレート
・このような画面が表示されます。
1-2-4、ログフォワーダーの作成
以下のパラメータを入力し、「スタックの作成」をクリックします。
DdApiKey | 対象DatadogのAPIキー |
DdSite | datadoghq.com(デフォルト) |
DdFetchLambdaTags | true |
「DdApiKey」はDatadogコンソール画面で以下のように確認します。
画面下の「変換では、アクセス機能が必要になる場合があります」に表示された項目は全てチェックします。
1-2-5、実行結果確認
ステータスが「CREATE_COMPLETE」となっている事を確認します。
2、監視対象のLambdaを指定する
「1、」でLambdaの監視を行う準備作業が終了しました。「2、」以降の作業では監視対象のLambdaを指定して実際にメトリクス・ログを取得できるように設定します。
また、Lambda 関数を新規作成し、監視を追加する場合も、「2、」以降の作業を行います。
ここでの作業はAWSCLIを用いて行います。インストールを行っていない場合は以下のリンクを参照し、インストール・セットアップを行ってください。
2-1、Lambda実行メトリクス取得の設定
2-1-1、メトリクス取得対象の関数名取得
以下のコマンドを実行し、メトリクス取得対象の関数名を取得します。
aws lambda list-functions | jq .Functions[].FunctionName | grep <関数名のプレフィックスなど>
2-1-2、対象関数へのタグ付け
「datadog-enable=true」の部分は項目1-1-(1)で設定した「to Lambda with tag:」の値を設定します。その際、”:”を”=”に置換します。
設定する関数名は「”」を入力しないようにします。
aws lambda tag-resource --resource arn:aws:lambda:<リージョン識別子>:<アカウントID>:function:<取得した関数名> --tags datadog-enable=true,system=<システムの識別子など>
2-2、Lambda実行ログ取得設定
※この操作を実行する前に対象のLambda関数を1回実行し、ロググループを作成します。
2-2-1、ログ取得対象のロググループ名取得
以下のコマンドを実行し、対象のロググループ名を取得します。
aws logs describe-log-groups | jq .logGroups[].logGroupName | grep <関数名のプレフィックスなど>
2-2-2、ログフォワーダーの設定
設定するロググループ名は「”」を入力しないようにします。
ログ転送量を少なくするために、可能であれば「–filter-pattern」を設定します。設定構文は以下のリンクを参照します。
aws logs put-subscription-filter --log-group-name <取得したロググループ名> --filter-name DDLambda --filter-pattern "" --destination-arn <Datadog ForwarderのARN>
「Datadog ForwarderのARN」は項目1-2-(5)画面で「出力」タブをクリックし確認します。
3、メトリクス・ログの取得確認
3-1、メトリクス取得確認
Datadogコンソール左ペインの「infrastructure」→「Serverless」をクリックします。
画面上部の検索欄に監視設定をした関数名を入力し対象関数の実行時間などが表示されている事を確認します。
※監視設定前のメトリクスは表示されないため、監視設定実施後に1回Lambda 関数を実行します。
※関数を実行してからメトリクスが表示されるまで最大15分程度かかる場合があります。
3-2、ログ取得確認
Datadogコンソール→左ペインの「Logs」→「Search」をクリックします。
画面上部の検索欄に以下の形式で関数名を入力し、対象の関数が表示される事を確認します。
functionname:*関数名*
以上で、監視データの取得設定は終了です。