9
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?

Instana ObservabilityAdvent Calendar 2023

Day 18

InstanaでサーバーレスのWebアプリケーション(AWS Lambda, API Gateway, DynamoDB)を監視する#1_エージェント導入と設定編

Last updated at Posted at 2023-12-18

はじめに

こんにちは。Instana Observability Advent Calendar 2023 18日目を担当します、ふるかわです。何気に3回目の投稿となります。前回前々回は、概念的な部分も多かったので、今回は手を動かしてやってみる系の記事にしました。

対象とする読者

Instanaを用いたサーバレスアプリケーションの監視に興味がある方

ゴール

  • Instanaを用いたサーバレスアプリケーションの監視を行うにあたり、どのような手順/設定が必要か理解する。
  • Instanaでどのようなメトリクスが取れるか確認する。

今回の検証(概要)

概要

AWS環境にInstanaエージェントを導入し、必要なセットアップをした後、Serverlessアプリの監視を行います。本記事では、エージェントの導入方法とLambdaの監視に必要なセットアップ手順までを主に解説します。

  • 検証1. AWS環境にエージェントを導入し、必要な設定を行う(本記事)
  • 検証2. エージェント導入結果を確認する(本記事)
  • 検証3. アプリケーション・パースペクティブを設定する(次回以降の記事)
  • 検証4. TBD(次回以降の記事)

参考記事:
InstanaでAWS Serverlessアプリを可視化しよう!Lambda編
@LgmQue(Shu Adachi)さん

アーキテクチャ

本検証のアーキテクチャ概要は以下の通りです。

Screenshot 2024-01-05 at 17.34.36.png

  • Amplify:HTML、CSSなどの静的コンテンツのホストとして機能。CD(Continuous Delivery)の基盤としても利用。
  • Amazon Cognito:ユーザー管理機能と認証機能を実装。
  • Lambda と API Gateway:バックエンドAPIとして利用。
  • DynamoDB :データベースとして利用。

Instanaの監視対象

AWS Lambda, API Gateway, DynamoDB

監視対象のアプリケーション

"Wild Rydes"というサーバレスWebアプリケーションです。一言で言うと、タクシー配車アプリのGoみたいな感じです。地図上で自分の現在地を指定し、ユニコーンを呼ぶと、ユニコーンがお迎えに来てくれるという、なんともかわいらしいアプリケーションです。

AWSさんのこちらのハンズオンアセットを利用して構築しています。

Screenshot 2023-12-18 at 15.41.59.png

Screenshot 2023-12-18 at 16.40.11.png

検証1. AWS環境にエージェントを導入し、必要な設定を行う。

1. AWSエージェントを導入する。

1.ホストにAWSエージェントをインストールする
AWSエージェント導入方法については、こちらを参考にしてください。

AWSエージェントと言っているのは、EC2やECSに導入するこのエージェントのことです。AWSエージェントはホスト・エージェントと呼ばれることもあります。2で出てくるサーバレス・エージェントとは全く別物です。

Instanaにはエージェント、センサー、トレーサーという3つのコンポーネントがあります。エージェントとトレーサーは自分で監視対象側にインストールする必要があります。一方、センサーはエージェントさえ導入すれば、自動でセットアップされるため、手作業でのインストールは不要です。

各種メトリクスやトレースデータはエージェントを介してバックエンドに送信されます。つまりエージェントがいないと何もデータを取ってこれません。

2.エージェントの設定を行う。
エージェントのconfiguration.yamlを修正します。当該ファイルの場所は、Linuxであればfileコマンドで探してください。

viなどで当該ファイルを開き、監視したいサービスのプラグインのenabledフラグをtureに変更します。各フラグはコメントアウトされているので併せて外してください。以下のようなイメージです。今回はcloudwatch_pridodのコメントも外しました。こちらの設定値は今回はデフォルトのままとしています。

configuration.yaml
#com.instana.plugin.aws.apigateway:
  enabled: true
  cloudwatch_period: 60
#  include_tags:
#  exclude_tags:
#  include_untagged: true

#com.instana.plugin.aws.dynamodb:
  enabled: true
  cloudwatch_period: 300
#  include_tags:
#  exclude_tags:
#  include_untagged: true

#com.instana.plugin.aws.lambda:
  enabled: true
  cloudwatch_period: 300
  # include_tags:
  # exclude_tags:
  
#com.instana.plugin.aws.ec2:
  enabled: true
  tags-poll-rate: 30

2.サーバレス・エージェント(Lambdaトレーサー)を導入する。

「サーバレス・エージェントを導入する」と記載していますが、厳密には、サーバーレス環境を監視するためのInstanaセンサーを構成することを指しています。このセンサーを構成するには、InstanaのLambdaトレーサーをAWS Lambda関数にインストールする必要があります。

  1. サーバレス・エージェント(Lambdaトレーサー)インストールに必要なスクリプトを用意する。
    1-1. Instana UIの左のメニューバーから「その他」>「エージェント」を選択。
    Screenshot 2023-12-18 at 10.17.16.png

    1-2. 遷移先の画面で「エージェントのインストール」を選択。
    Screenshot 2023-12-18 at 10.20.41.png

    1-3. 「AWS Lambda」を選択。Lambdaランタイムを選択。AWSのGUIでもCLIでもトレーサーのインストールは可能ですが、今回はCLIでやってみます。
    Screenshot 2023-12-18 at 10.22.29.png

    1-4. 同画面で提供されているトレーサーのインストールに必要なシェルスクリプトをエディタなどにコピーし、<>の箇所を任意の値に置き換えて、保存。

    install_lambda_tracer_for_lambda.sh
    #!/bin/bash
    aws --region <YOUR_AWS_RESION> lambda update-function-configuration \
        --function-name <YOUR_FUNCTION_NAME> \
        --layers <YOUR_LAMBDA_LAYER_ARN> \
        --handler instana-aws-lambda-auto-wrap.handler \
        --environment "Variables={INSTANA_ENDPOINT_URL=
        <YOUR_INSTANA_ENDPOINT_URL>, INSTANA_AGENT_KEY=<YOUR_INSTANA_AGENT_KEY> }"```
    
    

ここで簡単にAWSコマンドの解説をしておきます。不要な方は読み飛ばしてください。

$ aws --region ap-northeast-1 lambda update-function-configuration
      --function-name <YOUR_FUNCTION_NAME>

東京リージョン(ap-northeast-1)にデプロイされたLambdaの設定をアップデートする、という意味のコマンド。YOUR_FUNCTION_NAME で指定したLambda関数の設定を更新するという意味。

$aws --layers <YOUR_LAMBDA_LAYER_ARN>

Lambda関数にレイヤーを追加するコマンド。<YOUR_LAMBDA_LAYER_ARN>でレイヤーのARN(Amazon Resource Name)を指定している。

$aws --handler instana-aws-lambda-auto-wrap.handler:

Lambda関数のハンドラーを指定するコマンド。ハンドラーはLambda関数のエントリーポイント。この例では、instana-aws-lambda-auto-wrap.handlerをハンドラーとして設定している。

$aws --environment "Variables={INSTANA_ENDPOINT_URL=<YOUR_INSTANA_ENDPOINT_URL>, INSTANA_AGENT_KEY=<YOUR_INSTANA_AGENT_KEY> }"

Lambdaの環境変数を設定するコマンド。INSTANA_ENDPOINT_URLとINSTANA_AGENT_KEYには、
以下キャプチャの赤枠箇所からコピーした値を埋め込んでください。
Screenshot 2024-01-05 at 21.34.31.png

2.スクリプトを実行する
2-1. ひとつ前の手順で用意したスクリプトの実行に必要なIAMポリシーをIAMユーザに割り当てる。例えば、lambda:UpdateFunctionConfiguration などのポリシーが必要です。

スクリプト実行時、他にもpermission denied系のエラーが出るかもしれません。エラー内容を見ながらご自身の環境に応じた適切な権限をアタッチして、スクリプトを実行してください。

2-2. AWSコンソールでIAMを開き、任意のIAMユーザを選択。今回は監視対象のアプリを構築するときに使ったIAMユーザを使用。
Screenshot 2023-12-18 at 19.36.18.png

2-3.「Permissions」タブを追加。プルダウンから「Create inline policy」を選択。
Screenshot 2023-12-18 at 19.37.01.png

2-4.遷移先の画面で「JSON」のメニューを選択。既存のポリシーを以下のポリシーで上書きする。その後、画面左下「next」を選択。

Screenshot 2023-12-18 at 19.43.38.png

IAM_Policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:UpdateFunctionConfiguration",
        "lambda:GetLayerVersion"
      ],
      "Resource": "*"
    }
  ]
}

2-5.任意のポリシー名を付け、「Create Policy」をクリック。
Screenshot 2023-12-18 at 19.46.04.png

2-6.先ほど作成したポリシーがIAMユーザにアタッチされていることを確認。
Screenshot 2023-12-18 at 19.47.51.png

これで、IAMユーザに適切な権限を持つポリシーを付与することができました。これでスクリプト実行の準備完了です。

2-7.いざスクリプトを実行。実行結果はこんな感じ。

{
    "FunctionName": "<YOUR_LAMBDA_FUNCTION_NAME>",
    "FunctionArn": "<YOUR_LAMBDA_FUNCTION_ARN>",
    "Runtime": "nodejs16.x",
    "Role": "arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<IAM-ROLE-NAME>",
    "Role": "arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<IAM-ROLE-NAME>",
    "LastModified": "2023-12-18T12:33:17.000+0000",

     ~  ~
    
    "Layers": [
        {
            "Arn": "<YOUR_LAMBDA_LAYER_ARN>",
        }
    ],
    "State": "Active",
     ~  ~
}

以上で、AWSエージェントとサーバレス・エージェント(Lambdaトレーサー)の導入、各種セットアップが完了しました。では、AWSの各種サービスがInstanaで検知されているか確認してみます。

検証2. エージェント導入結果を確認する

AWSエージェントが正常に稼働していることがわかります。
Screenshot 2024-01-05 at 21.10.02.png

今回は直接関係ありませんが、Instanaのインフラストラクチャーモニタリング機能で、無事、EC2が検出されています。
Screenshot 2024-01-05 at 23.21.26.png

また、アプリケーションモニタリング機能のサービスとしてLambdaが検出されていることがわかります。
Screenshot 2024-01-05 at 21.05.29.png

DynamoDBも無事、検出されました。
Screenshot 2024-01-05 at 21.11.33.png

おわりに

これでエージェント導入とセットアップは完了です!
次回はプリケーションモニタリングに必要なアプリケーション・パースペクティブを設定してみます。

改版履歴

2024/01/05 以下、追記、修正を実施。

  • AWSエージェントをインストールする手順を追記。
  • AWSエージェントとサーバレスエージェント(Lambdaトレーサー)の違いを明記。
  • アーキテクチャー図更新(エージェンントとトレーサー、センサーを明示)
9
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
9
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?