はじめに
先日からGCPを触っているが、その際にPrometheusからGCPの監視データを取得してくれるstackdriver_exporterを見つけた。
今回はこのstackdriver_exporterをAWS(EC2)上に構築してそこからGCPのデータを取得してみようと思う。
なお、大きく使う予定がないのでAWS-GCP間の連携にWorkload Identityは使用しない。
前提
GCP上のIAMで「閲覧者」のサービスアカウントとキーを作成しておくこと。
(github上では「roles/monitoring.viewer」でいいと書いてあるが動かなかったので)
GCP設定ファイル設置
作成したキーファイルを配置して参照用の環境変数ファイルを設置しておく。
暫定で今回は/root/.gcp.jsonに設置した前提とする。
GOOGLE_APPLICATION_CREDENTIALS=/root/.gcp.json
バイナリ取得
wget https://github.com/prometheus-community/stackdriver_exporter/releases/download/v0.11.0/stackdriver_exporter-0.11.0.linux-amd64.tar.gz
tar -zxf stackdriver_exporter-0.11.0.linux-amd64.tar.gz
mv stackdriver_exporter-0.11.0.linux-amd64/stackdriver_exporter /usr/local
サービス化とコンフィグファイル作成
stackdriver_exporterはコマンド実行時に監視項目などOptionを指定する作りになっているのでこのままサービス化しても使いづらい。
他のPrometheus系のRPMのようにOptionを/etc/default/stackdriver_exporterから参照できるよう設定を少しいじっている。
※併せてGOOGLE_APPLICATION_CREDENTIALSも参照設定も入れている。
サービス用コンフィグ
[Unit]
Description=stackdriver-exporter
After=network.target
[Service]
EnvironmentFile=-/etc/default/stackdriver_exporter
EnvironmentFile=/root/gcpenv
Type=simple
User=root
ExecStart=/usr/local/stackdriver_exporter $STACKDRIVER_EXPORTER_OPTS
[Install]
WantedBy=multi-user.target
stackdriver_exporterコンフィグ
ここにコマンドオプションを切り出しているので監視項目を変更する際はここを変更する。
この例ではGCPインスタンスcpu,memory,disk,network全てを取得する設定としている。
STACKDRIVER_EXPORTER_OPTS='--monitoring.metrics-type-prefixes "compute.googleapis.com/instance/cpu,compute.googleapis.com/instance/disk,compute.googleapis.com/instance/memory,compute.googleapis.com/instance/network"'
サービス登録&起動
systemctl enable stackdriver_exporter
systemctl start stackdriver_exporter
Prometheus設定追加
prometheusに参照設定を入れてreloadする。
- job_name: stackdriver-exporter
static_configs:
- targets: ['localhost:9255']
あとがき
クラウドサービスはそれぞれで監視機能を持っているのでマルチクラウドなところだと各環境毎に監視サーバを持ってしまっているケースってよくみる。
それ自体は悪いことではないのだけどやっぱり本末転倒な気がするので、今回新たに専用のインスタンスを増やさずGCPを監視させる形を作れたのはよかった。
なんかできそうな感じがするので次回はこれまで作ってきたprometheusをGCPに複製してAWS-GCP間で冗長化する、という記事を書こうかと思っている。
※最終型がしょぼい感じになりそうなので再検討
なお、なんでもかんでもAWS・Prometheus前提になっているが私はそのあたりからの回し者ではない。全然別の記事も書きたい。