K8ssandraについているPrometheusを使用せず、Grafanaでダッシュボードを表示する
はじめに
Apache CassandraをKubernetesに最適化した、K8ssandraをデプロイする機会がありました。
K8ssandraにはApache Cassandraの他に、バックアップのためのMedusa
、自立修復のためのReaper
、そしてメトリクス収集のためのPrometheus
がデフォルトでインストールされます。(Helm経由)
今回デプロイした環境では、Prometheus
やGrafana
がインストールされており、そちらを使いまわしたいため、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に追記します。
再度、以下のコマンドを実行することで、リソースから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ファイルを作成します。
上記を記述することで、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の設定をしていきます。
再度、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を別途立てるのではなく、既存のスタックを使いまわしたいなどのケースはあるのではないかと思っています。
参考リンク
- k8ssandra: https://k8ssandra.io/
Discussion