はじめに
Promxyについてどんなものなのか、ローカルで試しながら理解していきたいと思います。
Promxyとは
Promxyとは、複数のPrometheusを1つのエンドポイントに集約できるPrometheus用のProxyです。
つまり、複数のPrometheusでそれぞれ取得しているメトリクスを1つのエンドポイントでまとめて見れるようにしてくれるものになります。
PromxyはPromtheusをベースにしているので、WebUIなどはPrometheusと変わらないようになっています。
必要なファイル
実際にローカルで試していきます。今回はローカルKubernetes環境にHelmとhelmfileを使ってデプロイします。
helmfileについては下記を参照してください。

用意するファイルは以下の通りです。
.
├── 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から取得したメトリクスが確認できます。