1. はじめに
- AWS DevOps Agentの検証をしている。自分で構築した(=セルフホステッドの)Grafanaで監視を行っているシステムがあるため、DevOps AgentとGrafanaを接続する手順を確認する。
2. やったこと
- 検証用のDevOps Agent 及び Grafana(VPC内)を作成する。
- DevOps Agent用のPrivate Connection (VPCへの足出し)を作成する。
- DevOps AgentからGrafanaのデータ参照ができること、またGrafanaのアラートをトリガにGrafanaからDevOps Agentをキックできることを確認する。
3. 構成図
4. 手順
4.1 前提条件
事前に以下を作成しておく。
- DevOps Agentのエージェントスペース
- セルフホステッドのGrafana(VPC内)
- EC2インスタンス上に Grafana、Loki、PrometheusをインストールしてGrafanaサーバとする
- Grafanaのバージョン:
v13.2.1 - 監視対象EC2インスタンス(Grafana Alloyをインストール)からメトリクスとログを収集
4.2 Grafanaアクセス経路のhttps化
セルフホステッドのGrafanaは http\://10.0.0.224:3000 でアクセス可能。一方で、DevOps Agent が Grafana と接続する際の仕様として、httpsである必要がある。 そのためInternal ALBを挟み、経路をhttps化する。本筋の内容ではないため、手順詳細は割愛するが、以下の内容を設定する。
- VPC内にInternal ALBを作成し、リスナーをhttps、ターゲットグループにGrafanaのインスタンス(3000/tcp)を登録する。ヘルスチェック登録は 「/api/health」 とする。( デフォルトの「/」 だと、アクセスがログイン画面に転送され、レスポンスが302になってしまうため)
- InternalALBでhttps通信を行う場合、ALBに証明書をアタッチすることが必須。 ACMでパブリック証明書
grafana.xxxxxx.net(本記事上の仮のFQDN)というパブリック証明書を作成し、ALBにアタッチする。grafana.xxxxxx.netをRoute53 パブリックホストゾーンに登録し、Internal ALB をエイリアスとして登録する。 - 上記の設定により、VPC内のクライアントから、
https:\//grafana.xxxxxx.netで、Internal ALB経由でGrafanaへhttpsアクセス可能になる。
4.3 DevOps Agent Private Connection の作成
4.2項の設定でネットワーク経路ができたため、次にDevOps AgentのPrivate Connectionを作成する。詳細手順は「Private Connection」を参照。
- AWS DevOps Agent -> 機能プロバイダー -> プライベート接続 から、「新しい接続を作成」を選択する。
- DevOps Agentから接続したいVPC(GrafanaがあるVPC)を選択する。
- ホストアドレスはALBにアタッチした証明書のFQDN(
grafana.xxxxxx.net)を入力する。 - 今回はパブリックホストゾーンにレコードがあるため、DNS解決は「パブリック」を選択する。
- 設定完了後、実体として接続先のVPCにリソースゲートウェイが作成されている。
4.4 Grafana を機能プロバイダーとして登録&エージェントスペースへ紐づけ
4.3項で作成した Private Connection を用いて、セルフホステッドのGrafanaを機能プロバイダーとして登録し、さらにエージェントスペースへの紐づけを行う。
- 事前にGrafana側でサービスアカウント(Read Only Role) を作成しておく(DevOps AgentからGrafanaにアクセスするには、ID/Passwdではなくサービスアカウントが必要)。Grafanaの以下の管理画面で作成する。
- AWS DevOps Agent -> 機能プロバイダ -> Grafana から、「Register」を選択する。
- Grafana URLとして、「
https:\//grafana.xxxxxx.net」(ACMで作成しInternalALBにアタッチしたパブリック証明書のURLに対するhttps)を設定する(http://はエラーで登録不可)。 - サービスアカウントトークン(Grafanaであらかじめ作成しておいたトークン)を設定する。
- 「プライベート接続を使用してエンドポイントに接続」のチェックをONにして、4.3項で作成したPrivate Connectionを指定する。 (チェックを入れない場合はInternet経由での接続)
- 既存のエージェントスペースで、テレメトリ -> 追加 を選択し、作成した機能プロバイダー(Grafana)を紐づける。
- Grafanaへの読み取りツール (Alerting, Annotationなど)の使用を許可する。
- Grafanaへの書き込みツールはいったんOFFにしておく。
- GrafanaからDevOps Agentを起動する用のWebhook URLとBearerが表示されるので保存する。
4.5 DevOps Agentからのデータ参照
DevOps Agentのチャット画面で、Grafana経由の調査を依頼してみて、データ参照ができることを確認する。
4.6 Grafana側 Webhookの設定
Grafana側に、アラートが発生した時にDevOps AgentのWebhookを起動(キック)するための設定を追加する。
公式ドキュメントの「Grafana の接続」の通りに設定する。
カスタム通知テンプレート
- Alerting - Notification configuration - Templates で、通知テンプレート(通知する内容)を作成する。ここは公式ドキュメントに記載の内容の通りに設定する。
コンタクトポイント
- Alerting - Notification configuration - Contact Points で、Webhookの接続先を作成する。
- Integration: Webhook
- URL: DevOps Agent側のGrafana用のWebhook URL
- HTTP Method: POST
- Authorization Header - Scheme: そのまま(DefaultがBearerになっているため入力しない)
- Authorization Header - Credentails: DevOps AgentのWebhook用のBearerの値
- Custom Payload - Payload Template: 先の手順で作成したカスタム通知テンプレートを選択
アラートルールへの通知設定追加
- 作成済のアラートルールに対して、アラート状態(Firing)になった時、Webhookを実行する設定を追加する。「Configure Notifications」のところに前項で作成したコンタクトポイントを設定する。
4.7 テストアラートとDevOps Agent自動起動
- 監視対象のEC2インスタンスでCPUを高負荷にする。
[ec2-user@ip-10-0-0-142 ~]$ stress-ng --cpu 2
- DevOps Agent側でインシデントレスポンスが行われることを確認する。今回は「ユーザが直前にインスタンスにssh接続しているので、ユーザ操作に起因することが疑われる」のような、主にAWS内部での情報を元にした調査結果となった。
5. 所感
多少手間がかかったが、概ね想定通りに接続検証を行うことができた。AWS内の情報だけでは無理で、Grafanaの情報に接続できるから解決できた、のようなユースケースを確認していきたい。





















