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

AWS DevOps Agent を使ってみる (8) : VPC内Grafanaとの接続

2
Posted at

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. 構成図

image.png

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 -> 機能プロバイダー -> プライベート接続 から、「新しい接続を作成」を選択する。

image.png

  • DevOps Agentから接続したいVPC(GrafanaがあるVPC)を選択する。
  • ホストアドレスはALBにアタッチした証明書のFQDN(grafana.xxxxxx.net)を入力する。
  • 今回はパブリックホストゾーンにレコードがあるため、DNS解決は「パブリック」を選択する。

image.png
image.png

  • 設定完了後、実体として接続先のVPCにリソースゲートウェイが作成されている。

image.png

4.4 Grafana を機能プロバイダーとして登録&エージェントスペースへ紐づけ

4.3項で作成した Private Connection を用いて、セルフホステッドのGrafanaを機能プロバイダーとして登録し、さらにエージェントスペースへの紐づけを行う。

  • 事前にGrafana側でサービスアカウント(Read Only Role) を作成しておく(DevOps AgentからGrafanaにアクセスするには、ID/Passwdではなくサービスアカウントが必要)。Grafanaの以下の管理画面で作成する。

image.png

  • AWS DevOps Agent -> 機能プロバイダ -> Grafana から、「Register」を選択する。

image.png

  • Grafana URLとして、「https:\//grafana.xxxxxx.net」(ACMで作成しInternalALBにアタッチしたパブリック証明書のURLに対するhttps)を設定する(http://はエラーで登録不可)。
  • サービスアカウントトークン(Grafanaであらかじめ作成しておいたトークン)を設定する。
  • 「プライベート接続を使用してエンドポイントに接続」のチェックをONにして、4.3項で作成したPrivate Connectionを指定する。 (チェックを入れない場合はInternet経由での接続)

image.png

  • 既存のエージェントスペースで、テレメトリ -> 追加 を選択し、作成した機能プロバイダー(Grafana)を紐づける。

image.png

  • Grafanaへの読み取りツール (Alerting, Annotationなど)の使用を許可する。

image.png

  • Grafanaへの書き込みツールはいったんOFFにしておく。

image.png

  • GrafanaからDevOps Agentを起動する用のWebhook URLとBearerが表示されるので保存する。

image.png

4.5 DevOps Agentからのデータ参照

DevOps Agentのチャット画面で、Grafana経由の調査を依頼してみて、データ参照ができることを確認する。

image.png

image.png

4.6 Grafana側 Webhookの設定

Grafana側に、アラートが発生した時にDevOps AgentのWebhookを起動(キック)するための設定を追加する。
公式ドキュメントの「Grafana の接続」の通りに設定する。

カスタム通知テンプレート

  • Alerting - Notification configuration - Templates で、通知テンプレート(通知する内容)を作成する。ここは公式ドキュメントに記載の内容の通りに設定する。

image.png

コンタクトポイント

  • 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: 先の手順で作成したカスタム通知テンプレートを選択

image.png

image.png

アラートルールへの通知設定追加

  • 作成済のアラートルールに対して、アラート状態(Firing)になった時、Webhookを実行する設定を追加する。「Configure Notifications」のところに前項で作成したコンタクトポイントを設定する。

image.png

image.png

4.7 テストアラートとDevOps Agent自動起動

  • 監視対象のEC2インスタンスでCPUを高負荷にする。
[ec2-user@ip-10-0-0-142 ~]$ stress-ng --cpu 2

image.png

  • DevOps Agent側でインシデントレスポンスが行われることを確認する。今回は「ユーザが直前にインスタンスにssh接続しているので、ユーザ操作に起因することが疑われる」のような、主にAWS内部での情報を元にした調査結果となった。

image.png

image.png

5. 所感

多少手間がかかったが、概ね想定通りに接続検証を行うことができた。AWS内の情報だけでは無理で、Grafanaの情報に接続できるから解決できた、のようなユースケースを確認していきたい。

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