【Prometheus】ローカルでPromxyを動かしながら理解する

スポンサーリンク

はじめに

Promxyについてどんなものなのか、ローカルで試しながら理解していきたいと思います。

Promxyとは

Promxyとは、複数のPrometheusを1つのエンドポイントに集約できるPrometheus用のProxyです。

つまり、複数のPrometheusでそれぞれ取得しているメトリクスを1つのエンドポイントでまとめて見れるようにしてくれるものになります。

GitHub - jacksontj/promxy: An aggregating proxy to enable HA prometheus
An aggregating proxy to enable HA prometheus. Contribute to jacksontj/promxy development by creating an account on GitHub.

PromxyはPromtheusをベースにしているので、WebUIなどはPrometheusと変わらないようになっています。

必要なファイル

実際にローカルで試していきます。今回はローカルKubernetes環境にHelmとhelmfileを使ってデプロイします。

helmfileについては下記を参照してください。

【Helm】helmfile使ってみる
はじめにHelmfileについてざっくり解説し、シンプルな例で実際に使ってみたいと思います。Helmについては下記で解説しています。HelmfileとはHelmfileとは、Helmチャートを宣言的にデプロイするツールです。He...

用意するファイルは以下の通りです。

.
├── promxy/ # Promxyのリポジトリのクローン
├── helmfile.yaml
├── prometheus-alpha.yaml
├── prometheus-beta.yaml
└── promxy.yaml

リポジトリのクローン

まずは、Promxyのリポジトリをクローンします。

git clone [email protected]:jacksontj/promxy.git

こちらはHelmのチャートを使うためにクローンします。

helmfile.yamlの作成

helmfile.yamlは下記の通りです。2つのPrometheusを1つのPromxyが集約する構成になっています。

releases:
  - name: promxy
    namespace: prometheus
    chart: ./promxy/deploy/k8s/helm-charts/promxy # クローンしてきたリポジトリからチャートを指定
    values:
      - ./promxy.yaml
  - name: prometheus-alpha # 1つ目のPrometheus
    namespace: prometheus
    chart: prometheus-community/prometheus
    values:
      - ./prometheus-alpha.yaml
  - name: prometheus-beta # 2つ目のPrometheus
    namespace: prometheus
    chart: prometheus-community/prometheus
    values:
      - ./prometheus-beta.yaml

Prometheusのvalues.yaml

2つのPrometheusのvalues.yamlを作成します。

1つ目のPrometheus(prometheus-alpha)のvalues.yaml(prometheus-alpha.yaml)は下記の通りです。

server:
  service:
    servicePort: 1111
alertmanager:
  enabled: false
kube-state-metrics:
  enabled: true
prometheus-node-exporter:
  enabled: false
prometheus-pushgateway:
  enabled: false

2つ目のPrometheus(prometheus-beta)のvalues.yaml(prometheus-beta.yaml)は下記の通りです。

server:
  service:
    servicePort: 2222
alertmanager:
  enabled: false
kube-state-metrics:
  enabled: true
prometheus-node-exporter:
  enabled: false
prometheus-pushgateway:
  enabled: false

Promxyのvalues.yaml

Promxyのvalues.yamlを作成します。

values.yaml(promxy.yaml)は下記の通りです。2つのPrometheusを指定しています。また、どちらのPrometheusが取得したメトリクスかわかるようにラベルを付与しています。

config:
  promxy:
    server_groups:
    - static_configs:
        - targets:
          - prometheus-alpha-server:1111
      labels:
        server_group: alpha # どちらのPrometheusから取得したメトリクスかわかるようにラベルを付与
    - static_configs:
        - targets:
          - prometheus-beta-server:2222
      labels:
        server_group: beta # どちらのPrometheusから取得したメトリクスかわかるようにラベルを付与

helmfileでデプロイ

helmfileを使ってデプロイします。

helmfile apply

2つのPrometheusと1つのPromxyがデプロイされているのが確認できます。

❯ kubectl get -n prometheus deploy,svc
NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/prometheus-alpha-kube-state-metrics   1/1     1            1           42s
deployment.apps/prometheus-alpha-server               1/1     1            1           42s
deployment.apps/prometheus-beta-kube-state-metrics    1/1     1            1           41s
deployment.apps/prometheus-beta-server                1/1     1            1           41s
deployment.apps/promxy                                1/1     1            1           43s

NAME                                          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/prometheus-alpha-kube-state-metrics   ClusterIP   10.99.2.179      <none>        8080/TCP   42s
service/prometheus-alpha-server               ClusterIP   10.105.248.62    <none>        1111/TCP   42s
service/prometheus-beta-kube-state-metrics    ClusterIP   10.111.201.254   <none>        8080/TCP   41s
service/prometheus-beta-server                ClusterIP   10.108.129.25    <none>        2222/TCP   41s
service/promxy                                ClusterIP   10.108.95.40     <none>        8082/TCP   44s

Promxyで動作確認

Promxyから2つのPrometheusが取得しているメトリクスを確認してみます。

まずは、PromxyのServiceをポートフォワードします。

kubectl port-forward -n prometheus service/promxy 8082:8082

localhost:8082にアクセスして、下記のPromQLから結果を確認します。

sum(kube_pod_info{namespace="prometheus"}) by (pod, server_group)

結果を確認すると、server_groupのラベルがalpha(prometheus-alpha)とbeta(prometheus-beta)となっている2つのPrometheusから取得したメトリクスが確認できます。

参考

タイトルとURLをコピーしました