Prometheusでfederationを実現するまで(Prometheus federation設定編)


まえがき

https://qiita.com/sinnsa233048/items/e6bcfa97660e38007a93
の続き

Prometheus構築/設定

  1. kube-prometheusのマニュフェストをk8sクラスタにデプロイ
  2. prometheus1サーバでのprometheusコンテナ作成
  3. prometheus1サーバでのgrafanaコンテナ作成

使用した環境

前回からprometheusノードが追加されています。

  • 使用OS: CentOS7.8
  • masterノード
    • ノード名: master1
    • ipアドレス: 192.168.10.11
  • wokerノード
    • ノード名: woker1
    • ipアドレス: 192.168.10.21
  • prometheusノード
    • ノード名: prometheus1
    • ipアドレス: 192.168.10.31

kube-prometheusのマニュフェストをk8sクラスタにデプロイ

https://github.com/coreos/kube-prometheus.git
のリポジトリのデプロイメントを使用します。

gitよりクローン

# yum -y install git
# git clone https://github.com/coreos/kube-prometheus.git

# cd kube-prometheus

マニュフェストをデプロイ

alartmanagerは今回用いないので別のディレクトリ等をを作成しておきます。

# mkdir manifests-not-deploy
# mv manifests/alertmanager*  manifests-not-deploy/

alartmanager以外のマニュフェストをデプロイ

# kubectl create -f manifests/setup
# kubectl create -f manifests

マニュフェストを修正

今回はprometheusのポートをNodePortで公開し、外部からアクセスを行います。
(grafanaについても今回は公開します。)

  • manifests/prometheus-service.yaml

type:NodePort
nodePort: 30090
を追加します。

apiVersion: v1
kind: Service
metadata:
  labels:
    prometheus: k8s
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 30090
  selector:
    app: prometheus
    prometheus: k8s
  sessionAffinity: ClientIP
  • manifests/grafana-service.yaml

こちらも同様に
type:NodePort
nodePort: 30090
を追加します。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: grafana
  name: grafana
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 30080
  selector:
    app: grafana

prometheus1サーバでのprometheusコンテナ作成

dockerインストール

(k8sクラスタ構築編でも使用した)docker公式のインストールスクリプトを使用します。

$ curl https://get.docker.com | sh

# systemctl enable docker
# systemctl start docker

prometheus設定ファイル作成

k8sクラスタ内に構築したprometheusの情報をすべて取得します。

cat <<EOF > /tmp/prometheus.yml
scrape_configs:
  - job_name: 'federate'
    scrape_interval: 15s

    honor_labels: true
    metrics_path: '/federate'

    params:
      'match[]':
        - '{job=".+"}'
        - '{__name__=~".+"}'

    static_configs:
      - targets:
        - '192.168.10.11:30090'
EOF

prometheusコンテナ起動

# docker run -d -p 9090:9090 -v/tmp/prometheus.yml:/etc/prometheus/prometheus.yml 
 prom/prometheus

prometheus1サーバでのgrafanaコンテナ作成

コンテナ起動

docker run -d --name=grafana -p 3000:3000 grafana/grafana

datasource設定

prometheusを選択しURLにhttp://localhost:9090を指定

dashbord設定

k8sクラスタ内に構築したgrafanaにkubernetes-mixinのタグがつけられたdashbordを
エクスポートし、prometheus1サーバでのgrafanaにインポートして使用。

最後に

2回に渡ってPrometheusでfederationを実現するやり方を紹介させていただきました。
疑問点/ご指摘等は遠慮なくいただければと思います。