0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DatadogでStep Functionsのログを確認してみた

Posted at

背景・目的

以前、下記でカスタムモニタリングを試してみました。今回はDataDogのインテグレーション機能を利用してStep Functionsをモニタリングします。

実践

事前準備

Datadog Integrationsの準備

  1. DataDogにサインインします

  2. ナビゲーションペインで、「Integrations」をクリックします

  3. ① 「AWS」で検索し、②「Amazon Web Services」をクリックします

  4. 「Add AWS Account」をクリックします

  5. 下記を入力し、「Launch CloudFormation Template」をクリックします

    • Automatically using CloudFormation
    • ①:AWSのリージョン:ap-northast-1
    • ②:Add Datadog API Key:API KEYを指定します
    • ③ Send AWS Logs to Datadog:Yes
    • ④ Detect security issues:今回はNo
      image.png
  6. AWSのCloudFormationが開きます

  7. 「スタックの作成」をクリックします

  8. 完了すると、いくつかスタックが含まれています事がわかります
    image.png

Datadog

  1. Installedになりました
    image.png

IAMロールを修正

  1. AWSにサインインします
  2. CloudFormationに移動します
  3. DatadogIntegration-DatadogIntegrationRoleStackを選択します
  4. テンプレートタブをクリックします
  5. 「Infrastructure Composerで表示」をクリックします
  6. 「テンプレート」をクリックします
    image.png
  7. DatadogAWSIntegrationPolicyに下記を追加します
    states:ListStateMachines,
    states:DescribeStateMachine
    
  8. 「テンプレートを更新」をクリックします
  9. 更新します

VPCの作成

AWS Batchを動かすためにVPCを作成します

  1. AWSにサインインします
  2. VPCに移動します
  3. VPCを作成をクリックします
  4. 下記の要領で作成します
    • パブリックサブネット
    • プライベートサブネット
    • NAT GW

アプリケーションの作成

AWS Batch用コードの準備

  1. 下記のシンプルなコードを作成します

    import time
    import os
    
    print("Job started.")
    time.sleep(10)
    print("Job completed.")
    
  2. Dockerfileを作成します

    FROM python:3.11-slim
    COPY job.py /app/job.py
    WORKDIR /app
    CMD ["python", "job.py"]
    
  3. Dockerデーモンを起動するため、colimaを実行します

    colima start
    
  4. ビルドします

    docker build -t my-batch-job .
    
    % docker images my-batch-job
    REPOSITORY     TAG       IMAGE ID       CREATED              SIZE
    my-batch-job   latest    XXXXX   About a minute ago   130MB
    % 
    
  5. ローカルで動作確認してみます。動作しました

    % docker run -it my-batch-job      
    Job started.
    Job completed.
    %
    

イメージの準備

  1. ECRリポジトリを作成します

    % aws ecr create-repository --repository-name my-batch-job
    {
        "repository": {
            "repositoryArn": "arn:aws:ecr:ap-northeast-1:XXXXX:repository/my-batch-job",
            "registryId": "XXXXX",
            "repositoryName": "my-batch-job",
            "repositoryUri": "XXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/my-batch-job",
            "createdAt": "2025-03-20T17:09:03.320000+09:00",
            "imageTagMutability": "MUTABLE",
            "imageScanningConfiguration": {
                "scanOnPush": false
            },
            "encryptionConfiguration": {
                "encryptionType": "AES256"
            }
        }
    }
    % 
    
  2. ECRにログインします

    $ aws ecr get-login-password | docker login --username AWS --password-stdin <account_id>.dkr.ecr.<region>.amazonaws.com
    Login Succeeded
    
  3. タグ付けします

    % docker tag my-batch-job:latest <account_id>.dkr.ecr.ap-northeast-1.amazonaws.com/my-batch-job:latest
    % docker images <account_id>.dkr.ecr.ap-northeast-1.amazonaws.com/my-batch-job
    REPOSITORY                                                       TAG       IMAGE ID       CREATED          SIZE
    <account_id>.dkr.ecr.ap-northeast-1.amazonaws.com/my-batch-job   latest    XXXXXX   13 minutes ago   130MB
    % 
    
  4. ECRにプッシュします

    % docker push <account_id>.dkr.ecr.ap-northeast-1.amazonaws.com/my-batch-job:latest
    The push refers to repository [<account_id>.dkr.ecr.ap-northeast-1.amazonaws.com/my-batch-job]
    ・・・・
    latest: digest: sha256:XXXXXX size: 1366
    % 
    
  5. ECRでも確認できました
    image.png

AWS Batch

AWS Batchを作成します。

  1. AWS Batchに移動します

コンピューティング環境

  1. ナビゲーションペインで「コンピューティング環境」をクリックします
  2. 「作成」をクリックします
  3. 下記を指定し、「次へ」をクリックします
    • コンピューティングタイプ:EC2
    • オーケストレーション:マネージド型
    • 名前:任意
    • サービスロール:デフォルト
    • インスタンスロール:新しいロールの作成
      image.png
      image.png
  4. EC2スポットインスタンス等の設定をし、「次へ」をクリックします
  5. 作成したVPC、サブネットを選択し、「次へ」をクリックします
  6. 「コンピューティング環境を作成」をクリックします
  7. できました
    image.png

ジョブキュー

  1. ナビゲーションペインで「ジョブキュー」をクリックします

  2. 「作成」をクリックします

  3. 下記を指定し、「ジョブキューの作成」をクリックします

    • 名前:任意
    • 優先度:高いほど優先度高い
    • コンピューティング環境:上記で作成した環境
      image.png
  4. できました
    image.png

ジョブ定義

  1. ナビゲーションペインで「ジョブ定義」をクリックします

  2. 「作成」をクリックします

  3. 下記を指定し、「次へ」をクリックします

    • オーケストレーションタイプ:EC2
    • 全般
      • 名前:任意
      • 実行タイムアウト:300秒
      • スケジュールの優先度:1
      • ジョブの試行:1

    image.png
    image.png

  4. コンテナ設定では、作成したECRを指定し「次へ」をクリックします

  5. Linnuxとロギングの設定を「次へ」をクリックします

  6. 「ジョブ定義を作成」をクリックします

AWS Step Functions

AWS Batchを呼び出す、Step Functionsを作成します。

  1. AWS Step Functionsに移動します

ステートマシンの作成

  1. 「ステートマシンの作成」をクリックします

  2. ステートマシン名を指定し、「続行」します

  3. 下記のコードを指定し、「作成」をクリックします

    {
      "Comment": "sample statement",
      "StartAt": "SubmitBatchJob",
      "States": {
        "SubmitBatchJob": {
          "Type": "Task",
          "Resource": "arn:aws:states:::batch:submitJob.sync",
          "Arguments": {
            "JobName": "sample-job",
            "JobDefinition": "arn:aws:batch:ap-northeast-1:XXXXXX:job-definition/my-job-definition:1",
            "JobQueue": "arn:aws:batch:ap-northeast-1:XXXXXX:job-queue/my-batch-queue"
          },
          "End": true
        }
      },
      "QueryLanguage": "JSONata"
    }
    
  4. ロールの作成で「確認」をクリックします

  5. できました

テスト

上記で作成したステートメントを実行してみます

  1. 作成したステートメントを選択し、「実行を開始」をクリックします

  2. 成功しました
    image.png

  3. CloudWatch Logsにもログが記録されました
    image.png

Step Functions(Batch)とDatadogを統合

Step Functionsの設定変更

Step FunctionsでCloudWatch Logsにログを出力するように設定します。

IAMロール

デフォルトで作成されたIAMロールにはCloudWatch Logsへのログ出力ポリシーが含まれていないため、修正します。

  1. IAMロールに移動します
  2. 該当のロールにアタッチされているIAMポリシーに、下記のポリシーを追加します
    {
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogDelivery",
            "logs:GetLogDelivery",
            "logs:UpdateLogDelivery",
            "logs:DeleteLogDelivery",
            "logs:ListLogDeliveries",
            "logs:PutResourcePolicy",
            "logs:DescribeResourcePolicies",
            "logs:DescribeLogGroups",
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ],
        "Resource": "*"
    }
    

Step Functions

  1. Step Functionsに移動します

  2. 対象のステートマシンを選択します

  3. 「ステートマシンの編集」をクリックします

  4. 「設定」タブをクリックします
    image.png

  5. ログ記録でログレベルに「ALL」を指定し、「保存」をクリックします
    image.png

DataDogの準備

DataDogの設定を確認しておきます。

  1. Datadogにサインインします

AWS Integration 設定確認

  1. ナビゲーションペインで、「Integrations」をクリックします
  2. 「Amazon Web Services」をクリックします
  3. 「Metric Collection」タブをクリックし、「Step Functions」を検索します
  4. 有効になっている事がわかります
    image.png

Datadog Forwarderのセットアップ

API KEYの準備

DatadogのAPI KEYを取得します

  1. ナビゲーションペインで、「アカウント」>「API Keys」をクリックします
  2. API Keysをコピーします

Lambdaのセットアップ

  1. こちらのページで、「Launch Stack」をクリックします

    image.png

  2. 下記を入力し、「スタックの作成」をクリックします

    • ①:DdApiKey:上記のAPI Key
    • ②:DdSite:東京のエンドポイント(ap1.datadoghq.com)を指定
      image.png
  3. 作成されました
    image.png

  4. Lambdaも作成されています
    image.png

CloudWatchのサブスクリプションフィルターの設定

サブスクリプションの設定

  1. CloudWatchに移動します

  2. ナビゲーションペインの「ロググループ」をクリックします

  3. 対象のロググループを選択します

  4. ①「サブスクリプションフィルター」>②「Lambdaサブスクリプションフィルターを作成」をクリックします

  5. 下記を指定します

    • ①:Lambda関数:作成したLambda
    • ②:ログの形式:その他
    • ③:サブスクリプションフィルター名:任意
      image.png
  6. 「パターンをテスト」をクリックすると出力イメージがわかります

  7. 「ストリーミングを開始」をクリックすると、作成されます

ログイベントの作成

  1. 対象のCloudWatch Logsを選択します

  2. 「ログストリームを作成」をクリックします

  3. ログストリーム名を入力し、「Create」をクリックします

  4. 作成したログストリームをクリックします

  5. 「ログイベントの作成」をクリックします
    image.png

  6. メッセージを入力し、「作成」をクリックします
    image.png

  7. 表示されました
    image.png

Logsで確認

  1. ナビゲーションペインで、「Logs」をクリックします

  2. 「Get Started」をクリックします

  3. 「Cloud」をクリックします

  4. 「AWS」、「CloudFormation」、最後に「Explore Your Logs」をクリックします
    image.png

  5. テストで入力したイベント(ログ)が表示されました
    image.png

Step Functionsを実行し、Datadogで確認する

  1. Step Functionsに移動します

  2. ナビゲーションペインで、「ステートマシン」をクリックします

  3. 対象のステートマシンをクリックします

  4. 「実行を開始」をクリックします

  5. 完了しました
    image.png

  6. CloudWatch Logsを確認します。出力さていました
    image.png

  7. Datadogを確認します
    image.png

考察

今回、下記を試してみました。次回は実行ステータスを可視化してみたいと思います。

  • Step FunctionsのログをCloudWatch Logsへ出力
  • CloudWatch Logsにサブスクリプションフィルターを設定
  • Datadogで確認

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?