この記事について
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から追加した。
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が提供されている。
VictoriaMetricsに送信されたデータの確認
なにかしらのデータがPrometheusから送られてきている模様。
あとがき
次回は任意のアプリケーションのメトリックをVictoriaMetricsに格納しPromQLに慣れ親しんでみるとともにVictoriaMetricsの冗長構成や拡張性について検討してみたい。