【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使ってみる
:::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から取得したメトリクスが確認できます。