LoginSignup
1
0

Amazon EC2へのInstanaエージェント導入&セットアップ

Posted at

はじめに

IBM Instana Observability(以下、Instana)は、アプリケーションパフォーマンス管理(Application Performance Management | APM)を実現する監視ソフトウェア/SaaSです。

Instanaを利用するには、監視対象のアプリケーションがデプロイされているホストに
エージェントを導入する必要があります。今回は、Amazon EC2にエージェントを導入する方法をまとめます。
(2024/2/21時点)

公式ドキュメントはこちらです。併せてご確認ください。
https://www.ibm.com/docs/ja/instana-observability/current?topic=agents-amazon-web-services-aws

Amazon EC2にInstanaエージェントを導入する

1. エージェント導入先のEC2インスタンスを構築する

  1. AWSコンソールにログインし、検索ボックスで"EC2"と入力/検索し、EC2の画面を開きます。

  2. "Launch Instnace"というオレンジのボタンをクリックします。
    Screenshot 2023-12-19 at 16.13.08.png

  3. 遷移後の画面で任意のInstnace名を入力します。
    Screenshot 2023-12-19 at 16.14.32.png

  4. OSを選択します。エージェントのシステム要件の詳細はこちらをご覧ください。今回は、Amazon Linux、CPUアーキテクチャは64-bit(x86)を利用します。
    Screenshot 2023-12-19 at 16.16.54.png

  5. インスタンスタイプを選択します。今回のインスタンスは、エージェント導入先としてのみ利用するので、安価なt2.microにします。
    Screenshot 2023-12-19 at 16.18.03.png

  6. Network settings 、Configure storage はデフォルトのままでOKです。(もちろん必要があれば設定してください。)

  7. キーペアを作成します。インスタンスにSSH接続するときに必要です。後続の手順で、EC2にSSH接続して、エージェントのconfiguration.yamlを編集するという作業があるので、ここで設定しちゃいましょう。(既に既存のものがあれば、新規作成は不要で、既存のものを流用していただいて構いません。)
    Screenshot 2023-12-19 at 16.21.51.png

  8. 画面を下にスクロールし、Advanced detailsを開き、ユーザーデータに指定のワンライナーを入力します。ワンライナーの取得方法は次の手順で説明します。
    Screenshot 2024-01-06 at 15.41.48.png

ユーザーデータはEC2起動時に実行されるスクリプトのことです。

9.ワンライナーを取得します。Instana UIの左のメニューバーから「その他」>「エージェント」を選択します。
Screenshot 2023-12-18 at 10.17.16.png
10. 遷移先の画面で「エージェントのインストール」>AWSを選択します。
Screenshot 2023-12-18 at 10.20.41.png
11. 「テクノロジー」のプルダウンから、「Elastic Computing (EC2) - Linux」 を選択。パッケージは「動的」、ランタイムは「Azul Zulu 1.8」(デフォルトのままま)とします。必要な項目を選択/入力していくと、エージェントインストールに必要なワンライナーが表示されます。これをコピーして、手順8のユーザーデータの欄に貼り付け、「Save」をクリックします。
Screenshot 2023-12-19 at 16.33.59.png
12. EC2の設定及びエージェントインストールの準備が整いました。EC2を作成します。
EC2の画面を一番下までスクロールして、「Launch Instances」をクリックします。
13. AWSマネジメントコンソール>左メニュー>EC2 dashboard>Instanaces(runnnig)より、インスタンスが作成されたことを確認します。Instance stateが「Running」になっていればOKです。
Screenshot 2023-12-19 at 16.26.56.png

2. IAMポリシーを作成する

Instanaエージェントは、各センサーからデータを収集し、バックエンド側に送信する仕組みです。

  • エージェント:ホストに導入するコンポーネント。AWS環境であれば、EC2などに導入し、VMware環境であれば、vSphere上の仮想マシンに導入します。
  • センサー:様々なAWSサービスやミドルウェアなどからデータを収集するコンポーネントです。

エージェントは手動でのインストール作業が必要ですが、エージェントさえ導入してしまえば、センサーは自動的に構成されるので、センサーのインストール作業は不要です。

エージェントが、各センサーからデータを収集できるようにするために、
EC2に指定のIAMロールを付与する必要があります。
では、IAMロール付与の手順を見ていきます。

IAMロールの設定方法はAWSマネジメントコンソール or CLI利用の2種類がありますが、
今回はCLIでやってみます。

  1. ポリシードキュメントファイルの作成:
    IAMポリシーの元となるファイルを作成します。以下jsonをファイルとして保存してください。公式docsに合わせて、ファイル名は「configuration.json」とします。このポリシーは、Instanaが監視できるAWSサービス全てを網羅しているので、一度このポリシーを作ってしまえば、あとは修正等は不要です。

configuration.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "apigateway:GET",
        "elasticbeanstalk:DescribeEnvironments",
        "elasticbeanstalk:ListTagsForResource",
        "elasticbeanstalk:DescribeInstancesHealth",
        "cloudfront:GetDistribution",
        "cloudfront:ListDistributions",
        "cloudfront:ListTagsForResource",
        "dynamodb:ListTables",
        "dynamodb:DescribeTable",
        "dynamodb:ListTagsOfResource",
        "rds:DescribeDBInstances",
        "rds:DescribeEvents",
        "rds:ListTagsForResource",
        "sqs:ListQueues",
        "sqs:GetQueueAttributes",
        "sqs:ListQueueTags",
        "elasticache:ListTagsForResource",
        "elasticache:DescribeCacheClusters",
        "elasticache:DescribeEvents",
        "elasticloadbalancing:DescribeLoadBalancers",
        "elasticloadbalancing:DescribeTags",
        "elasticmapreduce:ListClusters",
        "elasticmapreduce:DescribeCluster",
        "es:ListDomainNames",
        "es:DescribeElasticsearchDomain",
        "es:ListTags",
        "ec2:DescribeInstances",
        "ec2:DescribeTags",
        "ec2:DescribeVolumes",
        "kafka:ListClusters",
        "kafka:ListNodes",
        "kafka:ListTagsForResource",
        "kafka:DescribeCluster",
        "kinesis:ListStreams",
        "kinesis:DescribeStream",
        "kinesis:ListTagsForStream",
        "lambda:ListTags",
        "lambda:ListFunctions",
        "lambda:ListEventSourceMappings",
        "lambda:GetFunctionConfiguration",
        "lambda:ListVersionsByFunction",
        "mq:ListBrokers",
        "mq:DescribeBroker",
        "s3:GetBucketTagging",
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation",
        "s3:GetBucketPolicyStatus",
        "xray:BatchGetTraces",
        "xray:GetTraceSummaries",
        "tag:GetResources"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Action": [
        "cloudwatch:GetMetricStatistics",
        "cloudwatch:GetMetricData",
        "cloudwatch:ListMetrics"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

2.AWS CLIを使用してポリシーを作成します。
先ほどのファイルを利用して、CLIを介して新しいIAMポリシーを作成します。以下のコマンドを実行してください。(your-policy-name は適切なポリシー名に置き換えてください):

$ aws iam create-policy --policy-name your-policy-name --policy-document file://configuration.json

実行結果

{
    "Policy": {
        "PolicyName": "your-policy-name",
        "PolicyId": "xxxxxxxxxxxxx",
        "Arn": "arn:aws:iam::xxxxxxxxxxxxxxxxxxxxx",
        "Path": "/",
        "DefaultVersionId": "v1",
        "AttachmentCount": 0,
        "PermissionsBoundaryUsageCount": 0,
        "IsAttachable": true,
        "CreateDate": "2023-12-19T10:21:05+00:00",
        "UpdateDate": "2023-12-19T10:21:05+00:00"
    }
}

3. IAMロールを作成する

  1. IAMロールを作成します。今回はロール名は、EC2_discover_instana_sensor としました。また、EC2に対してAssumeRoleする必要があるので、以下のtrust-policy.jsonというファイルを作成/利用して、ロールに信頼ポリシーをアタッチしてください。
$ aws iam create-role --role-name EC2_discover_instana_sensor --assume-role-policy-document file://trust-policy.json

trust-policy.json はEC2インスタンスがこのロールを引き受けることを許可する信頼ポリシードキュメントを含むファイルです。ファイルの内容は以下の通りです。

trust-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

コマンドの実行結果は以下です。

{
    "Role": {
        "Path": "/",
        "RoleName": "EC2_discover_instana_sensor",
        "RoleId": "xxxxxxxxxxxxxxxxx",
        "Arn": "arn:aws:iam::xxxxxxxxxxxx:role/EC2_discover_instana_sensor",
        "CreateDate": "2023-12-19T10:30:58+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "ec2.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        }
    }
}

4. IAMポリシーをIAMロールにアタッチする。

手順2で作成したポリシーを手順3で作成したロールにアタッチします。以下のコマンドを実行します。

$aws iam attach-role-policy --role-name your-role-name --policy-arn your-policy-arn

your-policy-arn は先ほど作成したIAMポリシーのARNに置き換えてください。

実行結果は特に何も出力されないので、以下のコマンドを実行して、ポリシーがロールにアタッチされたかを確認します。以下、実行結果の”RoleName”に自分が作成したロールの名前が入っていればOKです。

$ aws iam list-entities-for-policy --policy-arn "your-polisy-arn" 

実行結果

{
    "PolicyGroups": [],
    "PolicyUsers": [],
    "PolicyRoles": [
        {
            "RoleName": "EC2_discover_instana_sensor",
            "RoleId": "xxxxxxxxxxxxxxxxxx"
        }
    ]
}

5. IAMロールをEC2インスタンスにアタッチ

前提:インスタンスプロファイルが必要になるため、予め作成しておきます。

  1. インスタンスプロファイルを作成します。
    後続の2の手順でインスタンスプロファイルが必要になるので、予めプロファイルの情報を確認してください。ない場合は、作成してください。

1-1.プロファイルの有無を確認します。

aws ec2 describe-instances --instance-ids your-instana-id --query 'Reservations[*].Instances[*].IamInstanceProfile'

これはプロファイルがない場合の実行結果です。

[
    []
]

プロファイルがなければ、以下のコマンドで作成してください。

1-2. インスタンスプロファイルの作成。
以下のコマンドで、新しいインスタンスプロファイルを作成できます。
今回は、EC2_Discover_Instana_Sensor_Profileという名前を使用しました。

aws iam create-instance-profile --instance-profile-name EC2-discover-instana-sensor_profile

実行結果

{
    "InstanceProfile": {
        "Path": "/",
        "InstanceProfileName": "EC2-discover-instana-sensor_profile",
        "InstanceProfileId": "xxx",
        "Arn": "arn:aws:iam::your-account-id:instance-profile/EC2-discover-instana-sensor_profile",
        "CreateDate": "2023-12-19T10:52:37+00:00",
        "Roles": []
    }
}

1-3. IAMロールをインスタンスプロファイルに追加します。

aws iam add-role-to-instance-profile --instance-profile-name EC2-discover-instana-sensor_profile --role-name EC2_discover_instana_sensor

1-4.IAMインスタンスプロファイルをEC2インスタンスにアタッチ
作成したインスタンスプロファイルをEC2インスタンスにアタッチします。以下のコマンドを実行してください(instance-idやプロファイル名な適切な値に置き換えてください)

aws ec2 associate-iam-instance-profile --instance-id instance-id --iam-instance-profile Name=EC2-discover-instana-sensor_profile

1-5. IAMロールがインスタンスプロファイルに追加されたことを確認
実行結果の中に、このセクションがいれば無事紐付けができています。

"IamInstanceProfile": {
                       "Arn": "<YOUR_INSTANCE_PROFILE_NAME>",
                       "Id": "xxxxxxxxxxxxxxxxxxxxxx"
                       },

これでプロファイルの作成が完了です。

2.手順4で作成したロールをEC2インスタンスにアタッチします。以下のコマンドを実行します。先ほど作成したプロファイルを利用しています。
(instance-idとinstance-profile名は適切な値に置き換えてください):

$aws ec2 associate-iam-instance-profile --instance-id instance-id --iam-instance-profile Name=EC2_Discover_Instana_Sensor

6. エージェントの設定を行う。

ホストにエージェントを導入すると、configurstion.yamlが作成されます。EC2にSSH接続し、fileコマンドなどで当該ファイルの場所を探してください。見つかったらviなどで編集します。
デフォルトだとこんな感じでコメントアウトされているので、監視したいAWSサービスのコメントアウトを外して、監視を有効化してください。また、enabledフラグをtureに変更してください。

変更前:
Screenshot 2024-02-21 at 15.58.29.png

変更後:
Screenshot 2024-02-21 at 15.59.00.png

監視間隔を変更する場合は、cloudwatch_periodを変更してください。
include_tags、exclude_tagsはコメントアウトのままでも良いです。もちろんコメントアウトを外してタグを指定すれば、そのリソースをInstanaの監視対象にする/しないといった、より高度な運用もできるようになります。

7. Instanaエージェントが正常にインストールされたことを確認する。

  1. エージェントをインストールしたEC2の詳細画面で「Hostname Type」を取得します。メモ帳などに貼り付けておいてください。あとで使います。
  2. Instana UI>左メニュー>インフラストラクチャ・モニタリング画面の検索バーで、先ほど取得した「Hostname Type」で検索します。
    Screenshot 2023-12-19 at 17.28.20.png
    Screenshot 2023-12-19 at 17.24.40.png
    3.結果が表示されれば、そのホストは無事、Instanaで検知されています。
    Screenshot 2024-01-06 at 16.36.30.png
    4.エージェントの状態を確認します。
    Instana UIの左メニュー>設定>エージェントを選択します。エージェント画面の上部の検索ボックスに先ほど取得してきた、値を入力して検索します。「報告中」のステータスになっていれば、エージェントが正常に稼働しています。(バックエンドに対して、データを送信できているということです。)
    Screenshot 2024-02-09 at 10.44.11.png

以上です!これでAWS監視の準備が整いました!
Instanaライフを始めましょう!

1
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
1
0