Ruby アプリケーションのインスツルメント

Ruby アプリケーションのインスツルメント

必須セットアップ

未構成の場合:

  • AWS インテグレーションをインストールします。これにより、Datadog は AWS から Lambda メトリクスを取り込むことができます。
  • AWS Lambda トレース、拡張メトリクス、カスタムメトリクス、ログの取り込みに必要な Datadog Forwarder Lambda 関数をインストールします。

AWS インテグレーションDatadog Forwarder をインストールしたら、手順に従ってアプリケーションをインスツルメントし、Datadog にメトリクス、ログ、トレースを送信します。

コンフィギュレーション

Datadog Lambda ライブラリのインストール

Datadog Lambda ライブラリは、レイヤーまたは gem としてインストールできます。Datadog では、ほとんどの関数でライブラリをレイヤーとしてインストールすることを推奨しています。お使いの Lambda 関数がコンテナイメージとしてデプロイされている場合は、ライブラリを gem としてインストールする必要があります。

datadog-lambda gem のマイナーバージョンは、常にレイヤーのバージョンに一致します。例: datadog-lambda v0.5.0 は、レイヤーバージョン 5 のコンテンツに一致。

レイヤーの使用

以下のフォーマットで、ARN を使用して Lambda 関数にレイヤーを構成します。

# 通常のリージョンの場合
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:<VERSION>

# 米国政府リージョンの場合
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:<VERSION>

使用できる RUNTIME オプションは、Ruby2-5Ruby2-7 です。VERSION については、最新リリースを参照してください。例:

arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Ruby2-7:5

Lambda 関数が、コード署名を使用するよう構成してある場合、Datadog Lambda ライブラリをレイヤーとして追加するには事前に Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc) を関数のコード署名コンフィギュレーションに追加する必要があります。

Gem の使用

Gemfile に下記を追加します。

gem 'datadog-lambda'

Datadog APM を使用するには、Gemfile で ddtrace を 2 番目の依存関係として追加する必要があります。

gem 'datadog-lambda'
gem 'ddtrace'

ddtrace には、AWS Lambda で動作するよう Amazon Linux 用にコンパイルする必要のあるネイティブ拡張機能が含まれています。そのため、Datadog では Lambda をコンテナイメージとして構築しデプロイすることを推奨しています。AWS Lambda を使用するが関数をコンテナイメージとしてデプロイできない、という場合は、Lambda ライブラリを gem ではなくレイヤーとしてインストールすることをおすすめします。

お使いの関数の Dockerfile で bundle install を実行する前に、gccgmp-develmake をインストールし、ネイティブ拡張機能を正常にコンパイルします。

FROM <base image>

# コンテナイメージをアセンブル

RUN yum -y install gcc gmp-devel make
RUN bundle config set path 'vendor/bundle'
RUN bundle install

関数の構成

Datadog APM を有効にし、Datadog Lambda ライブラリが提供するラッパーを使用して Lambda ハンドラー関数をラップします。

require 'datadog/lambda'

Datadog::Lambda.configure_apm do |c|
# インスツルメンテーションを有効にします
end

def handler(event:, context:)
    Datadog::Lambda.wrap(event, context) do
        return { statusCode: 200, body: 'Hello World' }
    end
end

Datadog Forwarder をロググループにサブスクライブ

メトリクス、トレース、ログを Datadog へ送信するには、関数の各ロググループに Datadog Forwarder Lambda 関数をサブスクライブする必要があります。

  1. まだの場合は、Datadog Forwarder をインストールします
  2. Datadog Forwarder を関数のロググループにサブスクライブします

統合サービスタグ付け

これはオプションですが、Datadog は、統合サービスタグ付けのドキュメントに従って、サーバーレスアプリケーションに envserviceversion タグをタグ付けすることを強くお勧めします。

Datadog サーバーレスモニタリングの利用

以上の方法で関数を構成すると、Serverless Homepage でメトリクス、ログ、トレースを確認できるようになるはずです。

カスタムビジネスロジックの監視

カスタムメトリクスまたはスパンの送信をご希望の場合は、以下のコード例をご参照ください。

require 'ddtrace'
require 'datadog/lambda'

Datadog::Lambda.configure_apm do |c|
# インスツルメンテーションを有効にします
end

def handler(event:, context:)
    # Datadog ラッパーを適用します
    Datadog::Lambda::wrap(event, context) do
        # Lambda 関数スパンにカスタムタグを追加します
        # X-Ray トレーシングが有効になっている場合は機能しません
        current_span = Datadog.tracer.active_span
        current_span.set_tag('customer.id', '123456')

        some_operation()

        Datadog.tracer.trace('hello.world') do |span|
          puts "Hello, World!"
        end

        # カスタムメトリクスを送信します
        Datadog::Lambda.metric(
          'coffee_house.order_value', # メトリクス名
          12.45, # メトリクス値
          time: Time.now.utc, # オプション、過去 20 分以内である必要があります
          "product":"latte", # タグ
          "order":"online" # タグ
        )
    end
end

# 関数をインスツルメントします
def some_operation()
    Datadog.tracer.trace('some_operation') do |span|
        # ここで何かをします
    end
end

カスタムメトリクス送信の詳細については、ここを参照してください。カスタムインスツルメンテーションの詳細については、カスタムインスツルメンテーションの Datadog APM ドキュメントを参照してください。

その他の参考資料