先日、Grafana Meetup Japan というコミュニティのイベントが開催されていました。 キーノートは JAXA の SLIM 月面着陸時に使われていた Grafana ダッシュボードの紹介で、着陸時の配信を見ていた自分はこのイベントを視聴(オンライン参加)して、案の定 Grafana 熱が高まってしまいました。

Grafana Meetup Japan #1 (2024/04/24 19:00〜)
我が家の Grafana は Kubernetes クラスタで稼働済みですが、自宅外では見れないような状況です。 そこで、Grafana 熱が冷めないうちに Grafana Cloud を使って外部からも自宅ラボの状況を確認できるようにします。
今回は Grafana Cloud を登録、自宅内の Kubernetes クラスタにある Prometheus をデータソースとしてダッシュボードに表示するところまでやっていきます。
Grafana Cloud の登録
まずは Grafana Cloud の登録から。

Grafana Cloud | Observability platform overview
公式サイトでアカウントを作成して、Grafana stack とやらを作成します。

14日間は無料ですべての機能を使えるトライアル期間のようですが、トライアル終了後も費用を掛けずに使いたいので Grafana だけ設定していきます。
Grafana にログインできるようになったら、とりあえずの登録は完了です。
プライベートネットワーク内の Prometheus を参照
自宅内のプライベートネットワークにある Prometheus は外部公開していないため、Grafana Cloud から Prometheus をデータソースとして登録することはできません。 そこで、Private data source connect (PDC) という機能を使っプライベートネットワーク内の Prometheus をデータソースとして参照できるようにします。

Private Data Source Connect
Private data source connect は PDC Agent というエージェントをプライベートネットワーク内で動かすことで Grafana Cloud とデータソースの間を仲介してくれます。
引用: Private data source connect (PDC) concepts
PDC Agent は Grafana の [Connections -> Private data source connect] からデプロイ方法やトークンの情報を確認できます。 デプロイ方法には Kubernetes、Docker、Binary の 3 通りから選べますが、今回は Kubernetes で PDC Agent を動かします。

Kubernetes の場合はトークンを含む接続情報を Secret リソースと、PDC Agent 用の Deployment をデプロイします。

表示された手順通りに Secret リソースを作成するだけでもいいですが、自宅ラボでは Vault Secrets Operator を使って Vault でのシークレット管理を導入しているので、PDC Agent 用のシークレットも Vault に登録します。
Vault には Kubernetse 用に KV v2 シークレットエンジンを secret
にマウントしているので、そこに grafana-cloud
というシークレットを作成します。
vault kv put secret/grafana-cloud token=<TOKEN> hosted-grafana-id=<ID> cluster=prod-us-central-0
Vault へのシークレット登録が完了したら Vault Secrets Operator 用の VaultStaticSecret リソースを用意して、Secret リソースが動的に作成されるようにします。 Vault への接続情報を含む VaultConnection や認証方法を定義した VaultAuth リソースは省略しています。
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: vaultstaticsecret
spec:
vaultAuthRef: vaultauth
mount: secret
path: grafana-cloud
type: kv-v2
refreshAfter: 5s
rolloutRestartTargets:
- kind: Deployment
name: grafana-pdc-agent
destination:
name: grafana-pdc-agent
create: true
この VaultStaticSecret リソースは次のような定義をしています。
- シークレットエンジンのパスは
secret
- シークレットのパスは
grafana-cloud
- シークレット更新時に Pod を再起動するのは PDC Agent 用の Deployment リソース
grafana-pdc-agent
- 同期先として Secret リソース
grafana-pdc-agent
を作成する
Vault Secrets Operator によって Secret リソースが作成されたのを確認したら、PDC Agent をデプロイします。
kubectl apply -f https://raw.githubusercontent.com/grafana/pdc-agent/main/production/kubernetes/pdc-agent-deployment.yaml
PDC Agent が正常動作したら、Grafana 上から [Test agent connection] を実行して疎通確認します。 確認できたらデータソースを登録していきます。
データソースの登録
PDC Agent を使って Prometheus を参照できるようになったので、データソースとして登録していきます。
通常のように Prometheus をデータソースとして選択し、[Prometheus server URL] を入力します。
このときの URL は PDC Agent が参照できる URL になるので、例えば http://prometheus-k8s.monitoring.svc:9090
のようになります。

通常とは違う設定として、[Private data source connect] で先ほど作成した PDC Agent の接続情報を選択します。 これによって PDC Agent でデータソースを登録するようになります。

[Save & test] でテストが成功したらデータソースとして Prometheus を利用する準備は完了です。
ダッシュボードの作成
データソースを準備できたらあとはダッシュボードを作成するだけ。 お試しに Windows Exporter で取得したメトリクスを表示する Windows Exporter Dashboard を表示してみると、自宅ラボ内の Windows のメトリクスが確認できました。 一部のメトリクスはうまく表示できてませんが……、これは別途調査していきます。

ということで、Grafana Cloud を始めることに成功しました。