This chapter describes different components, that correspond to respective sections of a config to launch VictoriaMetrics Anomaly Detection (or simply vmanomaly service:
Note: Once the service starts, automated config validation is performed
Available from v1.7.2. Please see container logs for errors that need to be fixed to create fully valid config, visiting sections above for examples and documentation.
Note: Components’ class
Available from v1.13.0can be referenced by a short alias instead of a full class path - i.e. model.zscore.ZscoreModel becomes zscore, reader.vm.VmReader becomes vm, scheduler.periodic.PeriodicScheduler becomes periodic, etc. Please see according sections for the details.
Note:preset modes are available
Available from v1.13.0for vmanomaly. Please find the guide here.
Below, you will find an example illustrating how the components of vmanomaly interact with each other and with a single-node VictoriaMetrics setup.
Note: Reader and Writer also support multitenancy, so you can read/write from/to different locations - see tenant_id param description.
Here’s a minimalistic full config example, demonstrating many-to-many configuration (actual for latest version):
# how and when to run the models is defined by schedulers# https://docs.victoriametrics.com/anomaly-detection/components/scheduler/schedulers:periodic_1d:# aliasclass:'periodic'# scheduler classinfer_every:"30s"fit_every:"10m"fit_window:"24h"periodic_1w:class:'periodic'infer_every:"15m"fit_every:"1h"fit_window:"7d"# what model types and with what hyperparams to run on your data# https://docs.victoriametrics.com/anomaly-detection/components/models/models:zscore:# we can set up alias for modelclass:'zscore'# model classz_threshold:3.5provide_series:['anomaly_score']# what series to producequeries:['host_network_receive_errors']# what queries to run particular model onschedulers:['periodic_1d']# will be attached to 1-day schedule, fit every 10m and infer every 30smin_dev_from_expected:0.0# turned off. if |y - yhat| < min_dev_from_expected, anomaly score will be 0detection_direction:'above_expected'# detect anomalies only when y > yhat, "peaks"prophet:# we can set up alias for modelclass:'prophet'provide_series:['anomaly_score','yhat','yhat_lower','yhat_upper']queries:['cpu_seconds_total']schedulers:['periodic_1w']# will be attached to 1-week schedule, fit every 1h and infer every 15mmin_dev_from_expected:0.01# if |y - yhat| < 0.01, anomaly score will be 0detection_direction:'above_expected'args:# model-specific argumentsinterval_width:0.98# where to read data from# https://docs.victoriametrics.com/anomaly-detection/components/reader/#vm-readerreader:datasource_url:"https://play.victoriametrics.com/"tenant_id:"0:0"class:'vm'sampling_period:"30s"# what data resolution to fetch from VictoriaMetrics' /query_range endpointlatency_offset:'1ms'query_from_last_seen_timestamp:Falsequeries:# aliases to MetricsQL expressionscpu_seconds_total:expr:'avg(rate(node_cpu_seconds_total[5m])) by (mode)'# step: '30s' # if not set, will be equal to sampling_perioddata_range:[0,'inf']# expected value range, anomaly_score > 1 if y (real value) is outsidehost_network_receive_errors:expr:'rate(node_network_receive_errs_total[3m]) / rate(node_network_receive_packets_total[3m])'step:'15m'# here we override per-query `sampling_period` to request way less data from VM TSDBdata_range:[0,'inf']# where to write data to# https://docs.victoriametrics.com/anomaly-detection/components/writer/writer:datasource_url:"http://victoriametrics:8428/"# enable self-monitoring in pull and/or push mode# https://docs.victoriametrics.com/anomaly-detection/components/monitoring/monitoring:pull:# Enable /metrics endpoint.addr:"0.0.0.0"port:8490