LoginSignup
0
0

More than 1 year has passed since last update.

Solr Operator on GKE + Google Cloud Managed Service for Prometheus

Last updated at Posted at 2023-05-24

GKEでSolr Operatorを使用してSolrCloudを構築した際にSolr Prometheus Exporterによるメトリクスを可視化する際に自前のPrometheus+grafanaではなく、GCPのマネージドサービスであるGoole Cloud Managed Service for Prometheus(以下、GMP)を使用してCloud Monitoring上で可視化してみましたのでその手順を記載します。

Solr Operatorについて

Kubernetes上でSolrCloudを簡単に構築出来るコントールプレーンマネージャーです。
Solr Prometheus ExporterやSolr Backupなどにも対応しています。

従来の手順でSolrCloudを構築してサービス運用する場合は、構築や運用コストの高さに悩まされているところも多いのではないでしょうか。
Solr Operatorを利用すればSolrCloudを従来より簡単に構築することが可能です。

SolrOperatorに関する日本語情報は非常に少ないですが、GoogleのShimojo様が書かれた記事が非常に分かりやすく参考になります。
Solr Operator を利用して SolrCloud クラスタを GKE Autopilot に構築する (前編)
Solr Operator を利用して SolrCloud クラスタを GKE Autopilot に構築する (後編)

2023年5月時点ではv0.7がリリースされており、v0.8ではスケール周りの機能追加が予定されているようです。

Google Cloud Managed Service for Prometheus

GCPで提供されているPrometheusのマネージドサービスです。
これを利用することでGKEなどで動いているアプリケーションなどのメトリクスを収集し、Cloud Monitoringで可視化することが出来ます。

SolrOperatorの公式ドキュメントでは自前でGKEクラスタ上にPrometheus+Grafanaのpodを稼働することでSolr Prometheus Exporterのメトリクスを可視化する方法を紹介しています。
もちろんこの方法でも問題ありませんが、GCPでサービス運用している場合は監視などにCloud Monitoringを利用することも多いと思います。それであればSolrのメトリクスのみ単独で管理するのではなく、寄せて一元管理してしまう方法も選択肢の一つになります。

構築手順

Solrのクラスタ構築手順は割愛します。
GKE Autopilot上でSolrCloudのpodが稼働している状態を前提とします。
ただし、前提条件としてGKEで以下のように「Managed Service for Prometheus」が「有効」になっている必要があります。
gke-console.png
GKEバージョン1.25以降のAutopilotクラスタであればデフォルトで「有効」になっています。
有効になっていない場合はマネージド コレクションを有効にする: GKEを確認して設定変更を試してみてください。

構築後のpodの状態は以下となります。

$ kubectl -n solr get pods
NAME                                                READY   STATUS    RESTARTS   AGE
example-solrcloud-0                                 1/1     Running   0          23h
example-solrcloud-1                                 1/1     Running   0          23h
example-solrcloud-2                                 1/1     Running   0          23h
example-solrcloud-zookeeper-0                       1/1     Running   0          23h
example-solrcloud-zookeeper-1                       1/1     Running   0          23h
example-solrcloud-zookeeper-2                       1/1     Running   0          23h
solr-operator-dd5bdfbcc-pcchx                       1/1     Running   0          23h
solr-operator-zookeeper-operator-685cc96dff-cfpk4   1/1     Running   0          23h

Solr Prometheus Exporterの設定

Deploy Prometheus Exporter for Solr Metricsを参考に以下のyamlを用意します。

apiVersion: solr.apache.org/v1beta1
kind: SolrPrometheusExporter
metadata:
  name: dev-prom-exporter
spec:
  customKubeOptions:
    podOptions:
      resources:
        requests:
          cpu: 300m
          memory: 900Mi
  solrReference:
    cloud:
      name: "example"
  numThreads: 6

nameに設定する値はSolr Operatorで構築した際の名前になりますが、以下で確認出来ます。

$ kubectl -n solr get solrcloud
NAME      VERSION   TARGETVERSION   DESIREDNODES   NODES   READYNODES   UPTODATENODES   AGE
example   9.1                       3              3       3            3               23h

yamlを適用します。

$ kubectl -n solr apply -f SolrPrometheusExporter.yaml
solrprometheusexporter.solr.apache.org/dev-prom-exporter created

以下のようにpod,svcなどが構築されます。

$ kubectl -n solr get all -l solr-prometheus-exporter=dev-prom-exporter
NAME                                                  READY   STATUS    RESTARTS   AGE
pod/dev-prom-exporter-solr-metrics-5ffcbc54b8-px2k5   1/1     Running   0          2m45s

NAME                                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/dev-prom-exporter-solr-metrics   ClusterIP   10.8.128.212   <none>        80/TCP    2m45s

NAME                                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/dev-prom-exporter-solr-metrics   1/1     1            1           2m46s

NAME                                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/dev-prom-exporter-solr-metrics-5ffcbc54b8   1         1         1       2m46s

ログの確認

$ kubectl -n solr logs -l solr-prometheus-exporter=dev-prom-exporter
INFO  - 2023-05-22 15:01:40.323; org.apache.solr.prometheus.exporter.SolrExporter; Solr Prometheus Exporter is running. Collecting metrics for cluster d3b1c6d0a3: Solr Cloud ZK: example-solrcloud-zookeeper-0.example-solrcloud-zookeeper-headless.solr.svc.cluster.local:2181,example-solrcloud-zookeeper-1.example-solrcloud-zookeeper-headless.solr.svc.cluster.local:2181,example-solrcloud-zookeeper-2.example-solrcloud-zookeeper-headless.solr.svc.cluster.local:2181/
INFO  - 2023-05-22 15:01:41.764; org.apache.solr.prometheus.collector.SchedulerMetricsCollector; Completed metrics collection
INFO  - 2023-05-22 15:02:41.806; org.apache.solr.prometheus.collector.SchedulerMetricsCollector; Beginning metrics collection
INFO  - 2023-05-22 15:02:41.923; org.apache.solr.prometheus.collector.SchedulerMetricsCollector; Completed metrics collection

ローカル環境からkubectl port-fowardコマンドを使用することで実際にメトリクスの結果を確認することが出来ます。

$ kubectl -n solr port-forward $(kubectl get pod -l solr-prometheus-exporter=dev-prom-exporter --no-headers -o custom-columns=":metadata.name") 8080

$ curl http://localhost:8080/metrics

PodMonitoringの設定

PodMonitoring リソースを構成するを参考に以下のyamlを用意します。

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: prom-example
spec:
  selector:
    matchLabels:
      solr-prometheus-exporter: dev-prom-exporter
  endpoints:
  - port: solr-metrics
    interval: 30s

portに設定する名称ですが、以下のコマンドで確認出来ます。

kubectl -n solr get svc dev-prom-exporter-solr-metrics --output jsonpath="{@.spec.ports}"
[{"appProtocol":"http","name":"solr-metrics","port":80,"protocol":"TCP","targetPort":8080}]

適用します。

kubectl -n solr apply -f PodMonitoring.yaml
podmonitoring.monitoring.googleapis.com/prom-example created

GKE側の設定はこれで完了です。

Cloud Monitoring

Metrics Explorerで指標に「solr」を入力してPrometheus Target->Solrが出てくればOKです。
SolrCloudにコレクションを作成していない状態だと有効な指標は5つほどしか表示されませんが
コレクションを作成すれば更に有効な指標は増えます。

Monitoring.png

solr_collections_live_nodes/gaugeを選択してみるとグラフが表示されます。
SolrOperatorで作成したPod数と同じ値になっています。
Monitoring2.png

Solrに関連するメトリクスを専用のダッシュボードを作成してまとめる、アラートを作成するなどをしていけば良いかと思います。

参考

Solr Operator Documentation
Prometheus 向けのマネージド サービス

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0