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

Grafana Meetup Japan #1 (2024/04/24 19:00〜)

## Grafana Meetup Japanへようこそ! このイベントは、オープンソースの監視・可視化ツールであるGrafanaについて、互いに学び、発信し、交流することを目的としています。 Grafanaは、ITインフラやアプリケーションの監視から、IoTデバイス、ビジネス指標、工場、物流、自然災害、宇宙に至るまで、あらゆる分野でのデータ可視化と監視を支援するツールです。 日本でも広く利用されつつありますが、Grafanaの最新情報や導入事例、プラクティスを学んだり発信したりする場は多くありませんでした。そこで、Grafana Labsと共にGrafana Meetup Jap...


我が家の Grafana は Kubernetes クラスタで稼働済みですが、自宅外では見れないような状況です。 そこで、Grafana 熱が冷めないうちに Grafana Cloud を使って外部からも自宅ラボの状況を確認できるようにします。

今回は Grafana Cloud を登録、自宅内の Kubernetes クラスタにある Prometheus をデータソースとしてダッシュボードに表示するところまでやっていきます。

Grafana Cloud の登録

まずは Grafana Cloud の登録から。

Grafana Cloud | Observability platform overview


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

Grafana stack

14日間は無料ですべての機能を使えるトライアル期間のようですが、トライアル終了後も費用を掛けずに使いたいので Grafana だけ設定していきます。

Grafana にログインできるようになったら、とりあえずの登録は完了です。

プライベートネットワーク内の Prometheus を参照

自宅内のプライベートネットワークにある Prometheus は外部公開していないため、Grafana Cloud から Prometheus をデータソースとして登録することはできません。 そこで、Private data source connect (PDC) という機能を使っプライベートネットワーク内の Prometheus をデータソースとして参照できるようにします。


Private data source connect は PDC Agent というエージェントをプライベートネットワーク内で動かすことで Grafana Cloud とデータソースの間を仲介してくれます。

引用: Private data source connect (PDC) concepts 引用: Private data source connect (PDC) concepts

PDC Agent は Grafana の [Connections -> Private data source connect] からデプロイ方法やトークンの情報を確認できます。 デプロイ方法には Kubernetes、Docker、Binary の 3 通りから選べますが、今回は Kubernetes で PDC Agent を動かします。

PDC Agent 1

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

PDC Agent 2

表示された手順通りに 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 のようになります。

Data source connection URL

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

Data source connection test

[Save & test] でテストが成功したらデータソースとして Prometheus を利用する準備は完了です。

ダッシュボードの作成

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

Windows Exporter Dashboard

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