VictoriaMetricsをGitOpsでデプロイしてPrometheusのメトリック送信先にする! – Part1

SRE

この記事について

VictoriaMetricsをGitOpsでデプロイし、Prometheusのメトリック送信先として構成してみる。

前提条件

dev環境のため今回は構成を簡略化してある。

  • サービス間通信はhttp
  • シングルノード(冗長化は考慮しない)

VictoriaMetrics(VM)の基礎知識

  • スケールアウト型アーキテクチャ(ボトルネック排除)
  • Prometheusをメトリックの取得専用にできる
    • GrafanaからのサーチクエリをPrometheusからVictoriaMetricsにオフロードできる(VMはスケールできるからPrometheusがボトルネックになりにくい)

VMのおもなサービス

deployment 説明
vmselect GrafanaのようなPromQLクライアントからのクエリを受け、vmstorageからデータをfetchしクライアントに渡す
vminsert Prometheusからデータを受けとりハッシュ化されメタデータに基づき対応するvmstorageにデータを書き込む。
vmstorage データを蓄積する。リクエストされた期間のデータを返す。

デプロイ

Makefile

gitリポジトリにVictoriaMetricsのチャートを追加するだけの内容。

vm:
    helm pull vm/victoria-metrics-cluster
    tar -xzvf victoria-metrics-cluster-*.tgz
    mv ./victoria-metrics-cluster/* .
    rm -rf ./victoria-metrics-cluster/
    rm victoria-metrics-cluster-*.tgz
    git add .
    git commit -m "add VictoriaMetrics chart"
    git push origin feature/addvm:feature/addvm

名前解決の方針

PrometheusからVictoriaMetricsにメトリックを書き込むにはPrometheusからVictoriaMetrics名前空間上のvminsertサービスに到達できる必要がある。

K8sにおけるPodデフォルトのDNSサーチリストは以下のとおり。

ネームスペース デフォルトのDNSサーチリスト 説明
Pod自身のネームスペース(prometheus) 含む
default 含む
その他ネームスペース - [service].[ns].svc.cluster.localでアクセスできる

今回の環境ではPrometheusとVictoriaMetricsのK8s名前空間が異なる。

名前空間 アプリケーション
Prometheus monitoring
VictoriaMetrics vm

Prometheusからvminserサービスに通信するにはPrometheus側でVMのホスト名をFQDNで以下のように指定すれば良い。

victoriametrics-victoria-metrics-cluster-vminsert.vm.svc.cluster.local

Argo CDへのVMアプリケーション追加

今回はArgo CDのWeb UIから追加した。
file

VMのvalues.yaml

vmselectのingressを有効化。

vmselect:
...
  ingress:
    enabled: true
    annotations: {}
      # kubernetes.io/ingress.class: nginx
      # kubernetes.io/tls-acme: "true"
    labels: {}
    pathType: Prefix
    hosts: 
      - name: vmselect.minikube.local
        path: /select
    extraPaths: []
    tls: []

デプロイされたサービス

 % kubectl get service -n vm
NAME                                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
victoriametrics-victoria-metrics-cluster-vminsert    ClusterIP   10.105.80.165   <none>        8480/TCP                     5m49s
victoriametrics-victoria-metrics-cluster-vmselect    ClusterIP   10.98.114.167   <none>        8481/TCP                     5m49s
victoriametrics-victoria-metrics-cluster-vmstorage   ClusterIP   None            <none>        8482/TCP,8401/TCP,8400/TCP   5m49s

Prometheusのvalues.yaml

remoteWrite先としてVictoriaMetricsのvminsertを指定。

server:
...
remoteWrite:
 - url: http://victoriametrics-victoria-metrics-cluster-vminsert.vm.svc.cluster.local:8480/insert/0/prometheus
...

vmui

vmseletでは簡単なクエリの確認やトラブルシューティングに使えるWeb UIが提供されている。
file

VictoriaMetricsに送信されたデータの確認

なにかしらのデータがPrometheusから送られてきている模様。
file

あとがき

次回は任意のアプリケーションのメトリックをVictoriaMetricsに格納しPromQLに慣れ親しんでみるとともにVictoriaMetricsの冗長構成や拡張性について検討してみたい。

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