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

2022.12.25
2024.03.24
監視
HelmHelmfilePrometheusPromxy

はじめに

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

Promxyとは

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

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

GitHub - jacksontj/promxy: An aggregating proxy to enable HA prometheus

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使ってみる

【Helm】helmfile使ってみる

:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。

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

1.
2├── promxy/ # Promxyのリポジトリのクローン
3├── helmfile.yaml
4├── prometheus-alpha.yaml
5├── prometheus-beta.yaml
6└── promxy.yaml

リポジトリのクローン

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

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

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

helmfile.yamlの作成

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

1releases:
2  - name: promxy
3    namespace: prometheus
4    chart: ./promxy/deploy/k8s/helm-charts/promxy # クローンしてきたリポジトリからチャートを指定
5    values:
6      - ./promxy.yaml
7  - name: prometheus-alpha # 1つ目のPrometheus
8    namespace: prometheus
9    chart: prometheus-community/prometheus
10    values:
11      - ./prometheus-alpha.yaml
12  - name: prometheus-beta # 2つ目のPrometheus
13    namespace: prometheus
14    chart: prometheus-community/prometheus
15    values:
16      - ./prometheus-beta.yaml

Prometheusのvalues.yaml

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

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

1server:
2  service:
3    servicePort: 1111
4alertmanager:
5  enabled: false
6kube-state-metrics:
7  enabled: true
8prometheus-node-exporter:
9  enabled: false
10prometheus-pushgateway:
11  enabled: false

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

1server:
2  service:
3    servicePort: 2222
4alertmanager:
5  enabled: false
6kube-state-metrics:
7  enabled: true
8prometheus-node-exporter:
9  enabled: false
10prometheus-pushgateway:
11  enabled: false

Promxyのvalues.yaml

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

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

1config:
2  promxy:
3    server_groups:
4    - static_configs:
5        - targets:
6          - prometheus-alpha-server:1111
7      labels:
8        server_group: alpha # どちらのPrometheusから取得したメトリクスかわかるようにラベルを付与
9    - static_configs:
10        - targets:
11          - prometheus-beta-server:2222
12      labels:
13        server_group: beta # どちらのPrometheusから取得したメトリクスかわかるようにラベルを付与

helmfileでデプロイ

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

1helmfile apply

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

1❯ kubectl get -n prometheus deploy,svc
2NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
3deployment.apps/prometheus-alpha-kube-state-metrics   1/1     1            1           42s
4deployment.apps/prometheus-alpha-server               1/1     1            1           42s
5deployment.apps/prometheus-beta-kube-state-metrics    1/1     1            1           41s
6deployment.apps/prometheus-beta-server                1/1     1            1           41s
7deployment.apps/promxy                                1/1     1            1           43s
8
9NAME                                          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
10service/prometheus-alpha-kube-state-metrics   ClusterIP   10.99.2.179      <none>        8080/TCP   42s
11service/prometheus-alpha-server               ClusterIP   10.105.248.62    <none>        1111/TCP   42s
12service/prometheus-beta-kube-state-metrics    ClusterIP   10.111.201.254   <none>        8080/TCP   41s
13service/prometheus-beta-server                ClusterIP   10.108.129.25    <none>        2222/TCP   41s
14service/promxy                                ClusterIP   10.108.95.40     <none>        8082/TCP   44s

Promxyで動作確認

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

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

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

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

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

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

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee