VictoriaMetrics Operator — оператор для Kubernetes, для автоматизации развертывания и управления компонентами мониторинга на базе VictoriaMetrics. Он позволяет создавать и настраивать отдельные сервисы для сбора, хранения и визуализации метрик.
Оператор использует CRD для управления инфраструктурой мониторинга. Основные используемые компоненты:
Полная документация по VictoriaMetrics Operator доступна на официальном сайте дополнения.
Для установки VictoriaMetrics Operator перейдите в раздел «Дополнения» в панели управления кластером. Найдите «VictoriaMetrics Operator» в списке и нажмите на него.
В открывшемся окне можно при необходимости изменить параметры установки — например, задать собственный неймспейс, изменить версии компонентов или отключить ненужные CRD. После настройки нажмите кнопку «Установить».
После установки в кластере появится неймспейс victoria-metrics-operator
и все необходимые CRD, включая VMSingle
, VMAgent
, VMPodScrape
и другие. Увидеть их вы можете, выполнив:
kubectl get crd | grep 'vm'
В примере мы:
nginx-prometheus-exporter
, чтобы передавать метрикиПомимо дополнения VictoriaMetrics Operator, для примера потребуется установленное дополнение Nginx Ingress.
Создадим компонент VMSingle, который будет принимать и хранить метрики. В примере мы зададим минимальный набор ресурсов и храним данные только в памяти в течение 1 дня. Создайте файл vmsingle.yaml
со следующим содержимым:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: vm-single
namespace: victoria-metrics-operator
spec:
retentionPeriod: "1"
resources:
requests:
cpu: 100m
memory: 256Mi
Если вы хотите хранить метрики дольше, стоит рассмотреть использование сетевых дисков.
Теперь создадим компонент VMAgent, который будет собирать метрики и передавать их в VMSingle. Создайте файл vmagent.yaml
:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMAgent
metadata:
name: vmagent
namespace: victoria-metrics-operator
spec:
remoteWrite:
- url: http://vmsingle-vm-single.victoria-metrics-operator:8428/api/v1/write
scrapeInterval: 30s
selectAllByDefault: true
port: "8429"
Развернем под с Nginx и экспортером метрик. В качестве источника метрик используется nginx-prometheus-exporter
, который будет читать данные с эндпоинта /stub_status
. Создайте файл nginx.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: victoria-metrics-operator
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
name: http
volumeMounts:
- name: nginx-conf
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
- name: exporter
image: nginx/nginx-prometheus-exporter:1.1.0
args:
- "-nginx.scrape-uri=http://localhost/stub_status"
ports:
- containerPort: 9113
name: metrics
volumes:
- name: nginx-conf
configMap:
name: nginx-conf
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-conf
namespace: victoria-metrics-operator
data:
default.conf: |
server {
listen 80;
location / {
return 200 'OK';
}
location /stub_status {
stub_status;
allow 127.0.0.1;
deny all;
}
}
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: victoria-metrics-operator
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: http
- name: metrics
port: 9113
targetPort: metrics
Чтобы указать VMAgent, с каких подов собирать метрики, создадим объект VMPodScrape. Он выберет все поды с меткой app: nginx
и будет опрашивать порт metrics
по пути /metrics
. Создайте файл vmpodscrape.yaml
:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMPodScrape
metadata:
name: nginx-scrape
namespace: victoria-metrics-operator
spec:
selector:
matchLabels:
app: nginx
podMetricsEndpoints:
- port: metrics
path: /metrics
interval: 30s
Прежде чем создавать Ingress, убедитесь, что в кластере есть сервис с типом LoadBalancer, он необходим для доступа к UI извне. Посмотреть текущие балансировщики можно командой:
kubectl get svc -n ingress-nginx
Если балансировщик отсутствует, создайте его:
apiVersion: v1
kind: Service
metadata:
name: nginx-loadbalancer
namespace: ingress-nginx
spec:
selector:
app.kubernetes.io/name: ingress-nginx
ports:
- port: 80
targetPort: 80
appProtocol: k8s.timeweb.cloud/proto-http
type: LoadBalancer
После создания получите внешний адрес сервиса:
kubectl get svc -n ingress-nginx nginx-loadbalancer
Укажите его как A-запись для домена, по которому будет доступен UI VictoriaMetrics.
Наконец, создадим Ingress, чтобы получить доступ к веб-интерфейсу VictoriaMetrics. Укажите в хосте нужное вам доменное имя. Создайте файл vm-ui-ingress.yaml
:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: vm-ui
namespace: victoria-metrics-operator
spec:
ingressClassName: nginx
rules:
- host: vm.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: vmsingle-vm-single
port:
number: 8428
Примените все манифесты, созданные ранее:
kubectl apply -f vmsingle.yaml
kubectl apply -f vmagent.yaml
kubectl apply -f nginx.yaml
kubectl apply -f vmpodscrape.yaml
kubectl apply -f vm-ui-ingress.yaml
После этого перейдите по адресу, указанному в манифесте vm-ui-ingress.yaml
. В нашем примере это http://vm.example.com
. В интерфейсе выберите пункт «vmui», чтобы открыть веб-интерфейс VictoriaMetrics.
В поле «query» введите имя метрики, например up
, и нажмите «Execute Query». Если все настроено правильно, вы увидите значение метрик, которые собираются с пода Nginx.