🦔

K8ssandraについているPrometheusを使用せず、Grafanaでダッシュボードを表示する

2022/07/24に公開

はじめに

Apache CassandraをKubernetesに最適化した、K8ssandraをデプロイする機会がありました。
K8ssandraにはApache Cassandraの他に、バックアップのためのMedusa、自立修復のためのReaper、そしてメトリクス収集のためのPrometheusがデフォルトでインストールされます。(Helm経由)
今回デプロイした環境では、PrometheusGrafanaがインストールされており、そちらを使いまわしたいため、Helmチャートの値を一部変更してK8ssandraに付属のPrometheusなどを使用しないようにデプロイしてみました。

環境

  • WSL2: Ubuntu 20
  • Docker: 4.10.1
  • kind: kind v0.11.1 go1.16.4 linux/amd64

Kubernetesの用意

kind create cluster
上記コマンドで、Kindクラスターを用意します。

K8ssandraのインストール

Helmチャートレポジトリの追加

helm repo add k8ssandra https://helm.k8ssandra.io/stable
helm repo update

Namespaceの追加

kubectl create namespace database

Output:

namespace/database created

K8ssandraのインストール

事前に設定をOverrideするための、yamlファイルを作成しておきます

---
stargate:
  enabled: false

ここで、CassandraのREST APIやGraphQLのAPIを提供するStargateは今回使用しないので、無効化しておきます。

helm upgrade k8ssandra k8ssandra/k8ssandra --install -n database -f values.yaml

output:(kubectl get pods -n database)

NAME                                                 READY   STATUS    RESTARTS   AGE
k8ssandra-cass-operator-6768bfc4f5-s7tgd             1/1     Running   0          14m
k8ssandra-dc1-default-sts-0                          2/2     Running   0          14m
k8ssandra-dc1-stargate-75b547df5f-bq4bg              1/1     Running   2          14m
k8ssandra-grafana-5d56cd88d4-2lr9v                   2/2     Running   0          14m
k8ssandra-kube-prometheus-operator-f9b7fddd7-vkbrg   1/1     Running   0          14m
k8ssandra-reaper-f68946d94-bbv8b                     1/1     Running   0          7m58s
k8ssandra-reaper-operator-5cd57fb5fd-sl2k8           1/1     Running   0          14m
prometheus-k8ssandra-kube-prometheus-prometheus-0    2/2     Running   0          13m

Grafanaのダッシュボードを見る

もし、Kubernetesの管理ツールである、Lensを使用していれば、Grafanaのダッシュボードを確認するのは簡単です。

k8ssandra-grafanaとプレフィックスがついているPodをクリックして、Port3000番をLocalhostに開放するだけで、アクセスできます。

上記はダッシュボードの一例です。

PrometheusとGrafanaを無効化する

先ほど作成した、values.yamlに追記します。

https://github.com/shohta-tera/k8ssandra-with-external-prometheus-and-grafana/blob/e2804c62237cb2b8b3ff5809d7f4eeec52ee16f2/k8ssandra/values.yaml

再度、以下のコマンドを実行することで、リソースからPrometheusとGrafanaを無効化できました。

helm upgrade k8ssandra k8ssandra/k8ssandra --install -n database -f values.yaml

K8ssandra管理外のPrometheusとGrafanaをインストールする

本来であれば、事前にあるスタックを流用するのですが、今回はクラスターから構築しているのでPrometheusとGrafanaをインストールしていきます。
もし、すでにあるのであれば読み飛ばしてください。

Prometheus

kubectl create namespace monitoring
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm upgrade prometheus prometheus-community/prometheus --install -n monitoring

Grafana

こちらもGrafana用に設定をOverrideするためのyamlファイルを作成します。

https://github.com/shohta-tera/k8ssandra-with-external-prometheus-and-grafana/blob/e2804c62237cb2b8b3ff5809d7f4eeec52ee16f2/grafana/values.yaml

上記を記述することで、GrafanaはデフォルトでPrometheusのデータを見に行きます。

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade grafana grafana/grafana --install -n monitoring -f grafana-values.yaml

K8ssandraのメトリクスデータを取得してPrometheusに格納する

Prometheusの設定を変更して、K8ssandraのメトリクスを取得するようにします。
K8ssandraには、メトリクス用のポートとエンドポイントがあり、そこから取得することができます。

  • Port: 9103
  • path: /metrics
    ポートフォワードを利用して上記のエンドポイントにアクセスしてみます。

下記は取得可能なメトリクスの一例です。

# HELP collectd_load_longterm write_prometheus plugin: 'load' Type: 'load', Dstype: 'gauge', Dsname: 'longterm'
# TYPE collectd_load_longterm gauge
collectd_load_longterm{instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 1.17 1658160223972
# HELP collectd_load_midterm write_prometheus plugin: 'load' Type: 'load', Dstype: 'gauge', Dsname: 'midterm'
# TYPE collectd_load_midterm gauge
collectd_load_midterm{instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 0.81 1658160223972
# HELP collectd_load_shortterm write_prometheus plugin: 'load' Type: 'load', Dstype: 'gauge', Dsname: 'shortterm'
# TYPE collectd_load_shortterm gauge
collectd_load_shortterm{instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 0.48 1658160223972
# HELP collectd_mcac_counter_total write_prometheus plugin: 'mcac' Type: 'counter', Dstype: 'counter', Dsname: 'value'
# TYPE collectd_mcac_counter_total counter
collectd_mcac_counter_total{mcac="org.apache.cassandra.metrics.client_message_size.bytes_received",instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 186814 1658160208850
collectd_mcac_counter_total{mcac="org.apache.cassandra.metrics.client_message_size.bytes_sent",instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 1043279 1658160208795
collectd_mcac_counter_total{mcac="org.apache.cassandra.metrics.client_request.condition_not_met.cas_write",instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 0 1658160208672
collectd_mcac_counter_total{mcac="org.apache.cassandra.metrics.client_request.total_latency.cas_read",instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 0 1658160208957
collectd_mcac_counter_total{mcac="org.apache.cassandra.metrics.client_request.total_latency.cas_write",instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 262056 1658160208767
collectd_mcac_counter_total{mcac="org.apache.cassandra.metrics.client_request.total_latency.range_slice",instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 2088099 1658160208926
collectd_mcac_counter_total{mcac="org.apache.cassandra.metrics.client_request.total_latency.read",instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 551045 1658160208745
collectd_mcac_counter_total{mcac="org.apache.cassandra.metrics.client_request.total_latency.read.all",instance="10.244.1.13",cluster="k8ssandra",dc="dc1",rack="default"} 0 1658160208735

ここで、Cassandraのメトリクスのエクスポートには、MCAC(Metrics Collector for Apache Cassandra)が使用されています。
このメトリクスデータをこのままPrometheusに保存してもダッシュボードは描画されません。そのため、このメトリクスについてはラベルの変換が必要です。
ラベル変換については、K8ssandraのHelmチャートにありますので、そちらを参考にして、Prometheusがデータを取得して保存するScrapeの設定をしていきます。
https://github.com/shohta-tera/k8ssandra-with-external-prometheus-and-grafana/blob/e2804c62237cb2b8b3ff5809d7f4eeec52ee16f2/prometheus/values.yaml

再度、Prometheusのスタックをアップグレードします。

helm upgrade prometheus prometheus-community/prometheus --install -n monitoring -f prometheus-values.yaml

設定変更が成功していると、Prometheusのページは以下のように変化し、Prometheusが定期的にデータを収集するようになります。

Grafanaダッシュボードのインポート

K8ssandraのダッシュボードはGrafanaには登録されておらず、K8ssandraのHelmチャートのレポジトリにあります。

先のリンク先のうち、どれか一つを選択してGrafanaにインポートしてみます。

ImportをクリックするとJSONを入力する部分があるので、そちらにGithubより取得したダッシュボードのJSONを貼り付けします。

うまくいくと以下のようにCassandraのダッシュボードが正常に表示されます。

おわりに

K8ssandraのスタック外にすでに存在するPrometheusやGrafanaを使用してダッシュボードを表示してみました。
ドキュメントを見ても、K8ssandraのスタックに存在するPrometheusやGrafanaの事ばかりで、外部のを利用するものはまったくと言っていいほどなかったので、今回記事にしてみました。
K8ssandraのスタック用にPrometheusを別途立てるのではなく、既存のスタックを使いまわしたいなどのケースはあるのではないかと思っています。

参考リンク

GitHubで編集を提案

Discussion