
DevOps Agentのメトリクスとログを確認してみた
こんにちは。たかやまです。
AWS DevOps AgentはGAに伴い、メトリクスとログの配信がサポートされました。
今回のサポートでDevOps Agentでは調査タスクや評価タスクの稼働状況をCloudWatchメトリクスで確認できるようになりました。
また、サードパーティーからの受信イベントやトポロジ作成といったサービス運用イベントをVended Logsで確認できるようになりました。
今回は DevOps Agentのメトリクスとログ を実際に確認していきたいと思います。
さきにまとめ
メトリクス
- Service-Linked Role
AWSServiceRoleForAIDevOpsが前提条件(プレビュー期間中に Agent Space を作成した場合は手動作成が必要) AWS/AIDevOpsネームスペースに以下5種類のメトリクスがAgentSpaceUUIDディメンション単位で発行されるTopologyCompletionCountトポロジ処理の完了数ConsumedInvestigationTime調査タスクの実行時間(秒)ConsumedEvaluationTime評価タスクの実行時間(秒)ConsumedOnDemandTimeオンデマンドSREタスクの実行時間(秒、公式ドキュメント未記載)ConsumedChatRequestsチャットリクエスト数
ログ
- Vended LogsはDevOps Agentサービスの運用イベントログ(調査タスクの内部処理は対象外)
- 配信先はCloudWatch Logs / S3 / Firehoseの3種類から選択可能
- 配信レベルはサービスレベル / Agent Spaceレベルで設定可能
メトリクス確認
Service-Linked Roleの作成
こちら前提条件としてService-Linked Roleが必要になります。
プレビュー期間中にDevOps Agentを作成していた方は、手動で作成する必要があります。
※3月13日以降にDevOps Agentを作成して、Service-Linked Roleが作成されている場合には対応不要です。

Vended Logs and Metrics - AWS DevOps Agent
作成については、IAMコンソールまたはAWS CLIのいずれかで作成できます。
- IAMコンソールで「AWS DevOps Agent」サービスに対応する
AWSServiceRoleForAIDevOpsロールを作成 - AWS CLIで以下のコマンドを実行して作成
aws iam create-service-linked-role --aws-service-name aidevops.amazonaws.com
私の環境では AWSServiceRoleForAIDevOps ロールが存在しなかったため、今回はAWS CLIで作成します。
実行した結果は以下のとおりです。
~ $ aws iam create-service-linked-role --aws-service-name aidevops.amazonaws.com
{
"Role": {
"Path": "/aws-service-role/aidevops.amazonaws.com/",
"RoleName": "AWSServiceRoleForAIDevOps",
"RoleId": "AROAT37FWTZQSFGC5WVQB",
"Arn": "arn:aws:iam::266232831585:role/aws-service-role/aidevops.amazonaws.com/AWSServiceRoleForAIDevOps",
"CreateDate": "2026-04-18T08:48:24+00:00",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Principal": {
"Service": [
"aidevops.amazonaws.com"
]
}
}
]
}
}
}
作成後、IAMコンソールで以下のようにService-Linked Roleが表示されています。

作成されたロールのポリシーと信頼関係は以下の通りです。
IAMポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "sid1",
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricData"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"cloudwatch:namespace": [
"AWS/AIDevOps"
]
}
}
},
{
"Sid": "LatticeCreateResourceGateway",
"Effect": "Allow",
"Action": [
"vpc-lattice:CreateResourceGateway"
],
"Resource": "arn:aws:vpc-lattice:*:*:resourcegateway/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/AWSAIDevOpsManaged": "true"
}
}
},
{
"Sid": "LatticeTagResourceGateway",
"Effect": "Allow",
"Action": [
"vpc-lattice:TagResource"
],
"Resource": "arn:aws:vpc-lattice:*:*:resourcegateway/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/AWSAIDevOpsManaged": "true"
}
}
},
{
"Sid": "LatticeManageTaggedResourceGateways",
"Effect": "Allow",
"Action": [
"vpc-lattice:DeleteResourceGateway"
],
"Resource": "arn:aws:vpc-lattice:*:*:resourcegateway/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/AWSAIDevOpsManaged": "true"
}
}
},
{
"Sid": "LatticeGetResourceGateway",
"Effect": "Allow",
"Action": [
"vpc-lattice:GetResourceGateway"
],
"Resource": "arn:aws:vpc-lattice:*:*:resourcegateway/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/AWSAIDevOpsManaged": "true"
}
}
},
{
"Sid": "DescribeApis",
"Effect": "Allow",
"Action": [
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
},
{
"Sid": "CreateLatticeServiceLinkedRole",
"Effect": "Allow",
"Action": "iam:CreateServiceLinkedRole",
"Resource": "arn:aws:iam::*:role/aws-service-role/vpc-lattice.amazonaws.com/AWSServiceRoleForVpcLattice",
"Condition": {
"StringLike": {
"iam:AWSServiceName": "vpc-lattice.amazonaws.com"
}
}
}
]
}
おもな権限として以下になりますね
- CloudWatchメトリクス発行:
cloudwatch:PutMetricDataをAWS/AIDevOpsネームスペースに限定 - VPC Lattice Resource Gateway管理:
AWSAIDevOpsManagedタグ付きリソースに限定して作成・削除・参照・タグ付け - EC2ネットワーク情報参照:
ec2:DescribeVpcs/DescribeSubnets/DescribeSecurityGroupsで構成把握 - VPC Lattice用SLR作成:
AWSServiceRoleForVpcLatticeの自動作成委譲
信頼関係
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "aidevops.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
メトリクスの確認
Service-Linked Roleが適切に設定されると、DevOps Agent は CloudWatch に対して自動的にメトリクスを発行します。
メトリクスは AgentSpaceUUID ディメンション単位で 発行されます。
現在利用可能なメトリクスとして以下のメトリクスが発行されます。
| メトリクス名 | 説明 | 単位 | 有用な統計 |
|---|---|---|---|
ConsumedChatRequests |
Agent Spaceが消費したチャットリクエスト数 | Count | Sum, Average |
ConsumedInvestigationTime |
調査タスクの実行時間 | Seconds | Sum, Average, Maximum |
ConsumedEvaluationTime |
評価タスク(Prevention)の実行時間 | Seconds | Sum, Average, Maximum |
TopologyCompletionCount |
トポロジ処理(初期作成・手動更新・日次更新)の完了数 | Count | Sum, SampleCount |
メトリクス一覧
後述する載っていないメトリクスもあるので執筆時点の内容を魚拓としてスクショを載せておきます。

Vended Logs and Metrics - AWS DevOps Agent
メトリクスはCloudWatchコンソールの、左ペインの「メトリクス」>「すべてのメトリクス」>「AIDevOps」から確認できます。

メトリクスはAgent Space の UUID 単位でメトリクスが表示されます。

コンソール上ではドキュメントではなかった、 ConsumedOnDemandTime メトリクスがありました。
多分こちらは オンデマンド SRE タスク の稼働時間を表すメトリクスになりそうですね。
この辺りも追ってドキュメントが追いついてくれると思います。
総稼働時間にアラート設定しようとしてみる
ここからはありそうなユースケースとして、DevOps Agentの合計調査時間を可視化してコスト監視アラートを設定してみたいと思います。
DevOps Agentは、各タスクの稼働時間に対して「$0.0083 / エージェント秒(1時間あたり約 $29.88)」の従量課金が発生します。
(また、初回タスク実行後2ヶ月間はAWS Free Tierが提供されます。)
| 項目 | 料金 |
|---|---|
| Investigation(調査) | $0.0083 / エージェント秒 |
| Evaluation(評価) | $0.0083 / エージェント秒 |
| On-demand SRE tasks(チャット) | $0.0083 / エージェント秒 |
そのため「今月、調査タスクが何時間動いたのか」はコスト感の把握に直結します。
ConsumedInvestigationTime は各 Agent Space で5分ごとに秒単位で発行されます。
全 Agent Space を横断して合算し、月初からの累計時間として算出することで「今月の総稼働時間」が把握できます。
合計調査時間のメトリクス式
CloudWatchコンソールの「グラフ化したメトリクス」タブで「数学式を追加」→「空の式」を選択し、以下の3つの式を入力します。
e1(検索式・グラフ非表示)として全 Agent Space の系列を動的に取得します。
SEARCH('{AWS/AIDevOps,AgentSpaceUUID} MetricName="ConsumedInvestigationTime"', 'Sum', 300)
e2(合算・時間単位・グラフ非表示)として全系列を合算し秒→時間に変換します。後続のダッシュボードで参照する中間値です。
SUM(e1)/3600
e3(月間累積・グラフ表示)として e2 を累積し、月初からの合計調査時間を右肩上がりの線グラフで表示します。
RUNNING_SUM(e2)
RUNNING_SUM は前のデータポイントに現在値を加算する演算子です。
e2 が「その5分で消費した時間」なので、累積することで月初からの累計時間になります。
e1で設定した SEARCH 式を使うことで、新しい Agent Space が追加された場合も自動的に合算対象に含まれます。

次にこちらの数式を使ってアラートを設定してみます。
メトリクスから設定してみようとしますが... SEARCH 関数を含む数式はアラームを設定できないと出ました。

公式ドキュメントにも以下の通り記載されており、複数の時系列を対象にするには Metrics Insights SQL を使用する必要があるとのことです。
You can't create an alarm based on the SEARCH expression. Only alarms based on Metrics Insights SQL queries can operate on multiple time series.
「アラームの作成」→「マルチソースクエリ」タブから以下のSQLクエリを入力します。
SELECT SUM("ConsumedInvestigationTime")
FROM "AWS/AIDevOps"
ただ、Metrics Insights でのアラームは最大3時間の集計期間しか設定できないため、月間監視という意味ではできなさそうです。
Only the latest 3 hours of data can be used for evaluating the alarm's conditions. However, you can visualize up to two weeks of data on the alarm's detail page graph
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/alarm-limits.html

そもそもDevOps Agent自体で月間の合計時間を出しています。

月初からの正確な累計時間の利用状況を取得したい場合は、aws devops-agent get-account-usage APIを利用するのが確実だと思います。
実行すると以下のようなレスポンスがかえってきます。
内容としては monthlyAccountInvestigationHours.usage / limit が時間単位で含まれており、月初リセットも API 側で管理されます。
(こちらのAPIを使ったアラームの設定はまた別記事で検証したいと思います)
$ aws devops-agent get-account-usage
{
"monthlyAccountInvestigationHours": {
"limit": 200,
"usage": 2.3852777777777776
},
...
"usagePeriodStartTime": "2026-04-01T00:00:00+00:00",
"usagePeriodEndTime": "2026-04-25T07:59:43.918000+00:00"
}
get-account-usage - AWS CLI Command Reference
ただ、通常のメトリクスでも単一のAgent SpaceになりますがCloudWatchアラームで最大7日間の集計期間であれば設定できるので、短期間でのスパイク検知には利用できますね

ログ確認
次はログ確認です。
ここで配信されるログは「DevOps Agent サービス自体の運用イベントログ」です。
具体的にはエージェントが外部サービスから受信したイベント、トポロジ作成・更新ジョブの状態変化、Webhook検証エラー、サービス登録失敗などが対象になります。
調査タスク(Investigation)や評価タスク(Evaluation)の 内部処理内容そのもの はログとして配信されないので、調査時間・回数のトラッキングは前のセクションで紹介した CloudWatch メトリクスを利用します。
主なログイベント種別
| イベント | 内容 | レベル |
|---|---|---|
| Agent inbound event received | 統合ソースからのイベント受信(例 PagerDutyのインシデントイベント) | INFO |
| Agent inbound event dropped | 受信イベントがエージェント処理前に破棄された(不正データ等の理由が含まれる) | TBD |
| Agent outbound communication failure | 第三者連携への外部通信失敗(タスクIDと宛先識別子を含む。例 認証エラー) | TBD |
| Topology creation queued | トポロジ作成ジョブがキューイングされた | INFO |
| Topology creation started | トポロジ作成ジョブの処理が開始された | INFO |
| Topology creation finished | トポロジ作成ジョブの完了(初回作成・更新・日次リフレッシュ) | INFO |
| Resource discovery failed | トポロジ作成中のリソースディスカバリ失敗 | ERROR |
| Service registration failed | サービス登録の不可逆な失敗 | ERROR |
| Webhook Validation fails | DevOps Agentが受信したWebhookが期待するスキーマと一致しない | ERROR |
| Association Validation status updates | Agent Spaceアソシエーションの検証ステータスがvalid⇔invalidに変化(IAMロール不正等が原因) | ERROR/INFO |
DevOps Agentでは、Vended LogsとしてCloudWatch Logs / Amazon S3 / Amazon Data Firehoseの3つの配信先にログを送信できます。
配信されるログタイプは執筆時点で APPLICATION_LOGS の1種類で、サービスが発行する全ての運用イベントが含まれます。
裏ではCloudWatch Logsの配信基盤(Delivery Source / Destination / Delivery)を経由してログがルーティングされる仕組みです。
Vended Logs and Metrics - AWS DevOps Agent
ログ配信設定
ログ配信は以下の2つのレベルで設定できます。
| 配信レベル | 設定画面 | 含まれるイベント |
|---|---|---|
| サービスレベル | サービス登録 (Service Registration) | アカウント全体のサービス連携イベント |
| Agent Spaceレベル | Agent Space ページ | 個別Agent Spaceに紐づくイベント |
サービスレベル

Agent Spaceレベル

配信レベルでの設定は変わらないので、今回はAgent SpaceからS3を指定して設定します。
S3のみオプションでHive互換ファイルの指定とパーティションの指定設定があります。

ログ配信を設定するIAMユーザー/ロールには aidevops:AllowVendedLogDeliveryForResource 権限が必要です。
加えて、CloudWatch Logsの配信API群(logs:PutDeliverySource / logs:PutDeliveryDestination / logs:CreateDelivery 等)と、配信先別の権限(CloudWatch Logs / S3 / Firehose)が必要になります。
詳細な権限要件は公式ドキュメントを参照してください。
なお、コンソールから設定する場合は、設定者に上記権限が付与されていればコンソール側で自動的に必要なAPIが呼び出されます。
配信されたログの確認
数分後、指定したS3バケットにログが配信されてきました。
S3バケットには AWSLogs/{アカウントID}/aidevops/{リージョン}/{yyyy}/{MM}/{dd}/{HH}/ のパーティション形式でgzip圧縮されたNDJSONファイルとして格納されます。

実際のログイベントは以下のようなJSON形式です。
PagerDutyからの受信イベント(Agent inbound event received)
{
"optional_account_id": "123456789012",
"optional_agent_space_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"optional_level": "INFO",
"optional_association_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"optional_status": "PROCESSING",
"optional_webhook_id": "-",
"optional_mcp_endpoint_url": "-",
"optional_service_type": "pagerduty",
"optional_service_endpoint_url": "-",
"optional_service_id": "-",
"optional_request_id": "-",
"optional_operation": "-",
"optional_task_type": "-",
"optional_task_id": "-",
"optional_reference": "-",
"optional_error_type": "-",
"optional_error_message": "-",
"optional_details": {},
"resource_arn": "arn:aws:aidevops:us-east-1:123456789012:agentspace/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"event_timestamp": 1776810884234,
"timestamp": "1776810884234",
"resource_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
他のサンプル(Topology作成完了 / optional_details)
Topology作成完了イベント(Topology creation finished)
{
"optional_account_id": "123456789012",
"optional_agent_space_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"optional_level": "INFO",
"optional_association_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"optional_status": "COMPLETED",
"optional_webhook_id": "-",
"optional_mcp_endpoint_url": "-",
"optional_service_type": "-",
"optional_service_endpoint_url": "-",
"optional_service_id": "-",
"optional_request_id": "-",
"optional_operation": "TOPOLOGY_REFRESH",
"optional_task_type": "-",
"optional_task_id": "-",
"optional_reference": "-",
"optional_error_type": "-",
"optional_error_message": "-",
"optional_details": {},
"resource_arn": "arn:aws:aidevops:us-east-1:123456789012:agentspace/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"event_timestamp": 1776963808950,
"timestamp": "1776963841260",
"resource_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
optional_details にサービス固有のメッセージが入る場合もあります(PagerDuty受信のevent ID付き例)。
{
"optional_level": "-",
"optional_status": "-",
"optional_service_type": "-",
"optional_operation": "-",
"optional_details": {
"message": "Received event from PagerDuty with event ID XXXXXXXXXXXXXX"
},
"resource_arn": "arn:aws:aidevops:us-east-1:123456789012:agentspace/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"event_timestamp": 1777296184981,
"timestamp": "1777296223332",
"resource_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
ログのフィールドは以下のとおりです。
| フィールド | 型 | 説明 |
|---|---|---|
event_timestamp |
Long | イベント発生時刻(Unixタイムスタンプ) |
resource_arn |
String | イベントを発行したリソースのARN |
request_id |
String | AWS CloudTrailやサポートチケットと紐付けるためのリクエスト識別子 |
optional_account_id |
String | ログに紐づくAWSアカウントID |
optional_level |
String | ログレベル(INFO / WARN / ERROR) |
optional_agent_space_id |
String | Agent Space の識別子 |
optional_association_id |
String | ログに紐づくアソシエーション識別子 |
optional_status |
String | トポロジ操作のステータス |
optional_webhook_id |
String | Webhook識別子 |
optional_mcp_endpoint_url |
String | MCPサーバーのエンドポイントURL |
optional_service_type |
String | 連携サービス種別(PAGERDUTY / DYNATRACE / DATADOG / GITHUB / SLACK / SERVICENOW) |
optional_service_endpoint_url |
String | 第三者連携のエンドポイントURL |
optional_service_id |
String | ソースの識別子 |
optional_operation |
String | 実行された操作名 |
optional_task_type |
String | エージェントバックログタスク種別(INVESTIGATION / EVALUATION) |
optional_task_id |
String | エージェントバックログタスクの識別子 |
optional_reference |
String | エージェントタスクからの参照情報(例 Jiraチケット) |
optional_error_type |
String | エラー種別 |
optional_error_message |
String | 操作失敗時のエラー内容 |
optional_details |
String/JSON | 操作パラメータや結果を含むサービス固有のイベントペイロード |
optional_ プレフィックスのフィールドはイベント種別に応じて値が入る条件付きフィールドで、すべてのログイベントがすべてのフィールドを使うわけではありません。
最後に
DevOps Agent のメトリクスとログを実際にCloudWatchで確認してみました。
メトリクス側は ConsumedInvestigationTime をSum集計し、math式(SEARCH() + SUM(e1)/3600)で全 Agent Space 横断の合計調査時間を時間単位で可視化できました。
SEARCH式を使う数式はそのままではアラームに利用できないため、累計値を扱いたい場合は aws devops-agent get-account-usage APIが選択肢になります。
ログ側はVended LogsとしてS3に配信し、Agent inbound event received や Topology creation 系のサービス運用イベントが流れていることが確認できました。
こうしたメトリクスとログの可観測性が揃ったことで、DevOps Agentを本格運用に乗せやすくなりますね。
このブログがどなたかの参考になれば幸いです。
以上、たかやま(@nyan_kotaroo)でした。






