はじめに
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インスタンスを構築する
-
AWSコンソールにログインし、検索ボックスで"EC2"と入力/検索し、EC2の画面を開きます。
-
OSを選択します。エージェントのシステム要件の詳細はこちらをご覧ください。今回は、Amazon Linux、CPUアーキテクチャは64-bit(x86)を利用します。
-
インスタンスタイプを選択します。今回のインスタンスは、エージェント導入先としてのみ利用するので、安価なt2.microにします。
-
Network settings 、Configure storage はデフォルトのままでOKです。(もちろん必要があれば設定してください。)
-
キーペアを作成します。インスタンスにSSH接続するときに必要です。後続の手順で、EC2にSSH接続して、エージェントのconfiguration.yamlを編集するという作業があるので、ここで設定しちゃいましょう。(既に既存のものがあれば、新規作成は不要で、既存のものを流用していただいて構いません。)
-
画面を下にスクロールし、Advanced detailsを開き、ユーザーデータに指定のワンライナーを入力します。ワンライナーの取得方法は次の手順で説明します。
ユーザーデータはEC2起動時に実行されるスクリプトのことです。
9.ワンライナーを取得します。Instana UIの左のメニューバーから「その他」>「エージェント」を選択します。
10. 遷移先の画面で「エージェントのインストール」>AWSを選択します。
11. 「テクノロジー」のプルダウンから、「Elastic Computing (EC2) - Linux」 を選択。パッケージは「動的」、ランタイムは「Azul Zulu 1.8」(デフォルトのままま)とします。必要な項目を選択/入力していくと、エージェントインストールに必要なワンライナーが表示されます。これをコピーして、手順8のユーザーデータの欄に貼り付け、「Save」をクリックします。
12. EC2の設定及びエージェントインストールの準備が整いました。EC2を作成します。
EC2の画面を一番下までスクロールして、「Launch Instances」をクリックします。
13. AWSマネジメントコンソール>左メニュー>EC2 dashboard>Instanaces(runnnig)より、インスタンスが作成されたことを確認します。Instance stateが「Running」になっていればOKです。
2. IAMポリシーを作成する
Instanaエージェントは、各センサーからデータを収集し、バックエンド側に送信する仕組みです。
- エージェント:ホストに導入するコンポーネント。AWS環境であれば、EC2などに導入し、VMware環境であれば、vSphere上の仮想マシンに導入します。
- センサー:様々なAWSサービスやミドルウェアなどからデータを収集するコンポーネントです。
エージェントは手動でのインストール作業が必要ですが、エージェントさえ導入してしまえば、センサーは自動的に構成されるので、センサーのインストール作業は不要です。
エージェントが、各センサーからデータを収集できるようにするために、
EC2に指定のIAMロールを付与する必要があります。
では、IAMロール付与の手順を見ていきます。
IAMロールの設定方法はAWSマネジメントコンソール or CLI利用の2種類がありますが、
今回はCLIでやってみます。
- ポリシードキュメントファイルの作成:
IAMポリシーの元となるファイルを作成します。以下jsonをファイルとして保存してください。公式docsに合わせて、ファイル名は「configuration.json」とします。このポリシーは、Instanaが監視できるAWSサービス全てを網羅しているので、一度このポリシーを作ってしまえば、あとは修正等は不要です。
{
"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ロールを作成する
- 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インスタンスがこのロールを引き受けることを許可する信頼ポリシードキュメントを含むファイルです。ファイルの内容は以下の通りです。
{
"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インスタンスにアタッチ
前提:インスタンスプロファイルが必要になるため、予め作成しておきます。
- インスタンスプロファイルを作成します。
後続の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に変更してください。
監視間隔を変更する場合は、cloudwatch_periodを変更してください。
include_tags、exclude_tagsはコメントアウトのままでも良いです。もちろんコメントアウトを外してタグを指定すれば、そのリソースをInstanaの監視対象にする/しないといった、より高度な運用もできるようになります。
7. Instanaエージェントが正常にインストールされたことを確認する。
- エージェントをインストールしたEC2の詳細画面で「Hostname Type」を取得します。メモ帳などに貼り付けておいてください。あとで使います。
- Instana UI>左メニュー>インフラストラクチャ・モニタリング画面の検索バーで、先ほど取得した「Hostname Type」で検索します。
3.結果が表示されれば、そのホストは無事、Instanaで検知されています。
4.エージェントの状態を確認します。
Instana UIの左メニュー>設定>エージェントを選択します。エージェント画面の上部の検索ボックスに先ほど取得してきた、値を入力して検索します。「報告中」のステータスになっていれば、エージェントが正常に稼働しています。(バックエンドに対して、データを送信できているということです。)
以上です!これでAWS監視の準備が整いました!
Instanaライフを始めましょう!