diff --git a/deployment/docker/vmanomaly/vmanomaly-integration/compose.yml b/deployment/docker/vmanomaly/vmanomaly-integration/compose.yml index fb73c915f2..7d9a0aae22 100644 --- a/deployment/docker/vmanomaly/vmanomaly-integration/compose.yml +++ b/deployment/docker/vmanomaly/vmanomaly-integration/compose.yml @@ -59,7 +59,7 @@ services: - '--external.alert.source=explore?orgId=1&left=["now-1h","now","VictoriaMetrics",{"expr": },{"mode":"Metrics"},{"ui":[true,true,true,"none"]}]' restart: always vmanomaly: - image: victoriametrics/vmanomaly:v1.28.1 + image: victoriametrics/vmanomaly:v1.28.2 depends_on: - "victoriametrics" ports: diff --git a/docs/anomaly-detection/CHANGELOG.md b/docs/anomaly-detection/CHANGELOG.md index a814908be3..291aadfd96 100644 --- a/docs/anomaly-detection/CHANGELOG.md +++ b/docs/anomaly-detection/CHANGELOG.md @@ -14,6 +14,12 @@ aliases: --- Please find the changelog for VictoriaMetrics Anomaly Detection below. +## v1.28.2 +Released: 2025-12-11 + +- UI: Updated [vmanomaly UI](https://docs.victoriametrics.com/anomaly-detection/ui/) from [v1.3.0](https://docs.victoriametrics.com/anomaly-detection/ui/#v130) to [v1.4.0](https://docs.victoriametrics.com/anomaly-detection/ui/#v140), see respective [release notes](https://docs.victoriametrics.com/anomaly-detection/ui/#v140) for details. +- SECURITY: Updated base images and 3rd party dependencies to eliminate recently discovered medium+ CVEs ([CVE-2025-66471](https://nvd.nist.gov/vuln/detail/CVE-2025-66471), [CVE-2025-66418](https://nvd.nist.gov/vuln/detail/CVE-2025-66418)). + ## v1.28.1 Released: 2025-12-01 diff --git a/docs/anomaly-detection/FAQ.md b/docs/anomaly-detection/FAQ.md index 0361a1c27a..ef9ed09afd 100644 --- a/docs/anomaly-detection/FAQ.md +++ b/docs/anomaly-detection/FAQ.md @@ -404,7 +404,7 @@ services: # ... vmanomaly: container_name: vmanomaly - image: victoriametrics/vmanomaly:v1.28.1 + image: victoriametrics/vmanomaly:v1.28.2 # ... restart: always volumes: @@ -619,7 +619,7 @@ options: Here’s an example of using the config splitter to divide configurations based on the `extra_filters` argument from the reader section: ```sh -docker pull victoriametrics/vmanomaly:v1.28.1 && docker image tag victoriametrics/vmanomaly:v1.28.1 vmanomaly +docker pull victoriametrics/vmanomaly:v1.28.2 && docker image tag victoriametrics/vmanomaly:v1.28.2 vmanomaly ``` ```sh diff --git a/docs/anomaly-detection/Migration.md b/docs/anomaly-detection/Migration.md index bb190e0289..10d4fd8530 100644 --- a/docs/anomaly-detection/Migration.md +++ b/docs/anomaly-detection/Migration.md @@ -45,8 +45,8 @@ There are 2 types of compatibilitity to consider when migrating in stateful mode | Group start | Group end | Compatibility | Notes | |---------|--------- |------------|-------| -| [v1.28.1](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1281) | Latest* | Fully Compatible | Just a placeholder for new releases | -| [v1.26.0](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1262) | [v1.28.1](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1281) | Fully Compatible | [v1.28.0](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1280) introduced [rolling](https://docs.victoriametrics.com/anomaly-detection/components/models/#rolling-models) model class drop in favor of [online](https://docs.victoriametrics.com/anomaly-detection/components/models/#online-models) models (`rolling_quantile` and `std` models), however, it does not impact compatibility, as artifacts were not produced by default for rolling models. | +| [v1.28.2](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1282) | Latest* | Fully Compatible | Just a placeholder for new releases | +| [v1.26.0](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1262) | [v1.28.2](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1282) | Fully Compatible | [v1.28.0](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1280) introduced [rolling](https://docs.victoriametrics.com/anomaly-detection/components/models/#rolling-models) model class drop in favor of [online](https://docs.victoriametrics.com/anomaly-detection/components/models/#online-models) models (`rolling_quantile` and `std` models), however, it does not impact compatibility, as artifacts were not produced by default for rolling models. | | [v1.25.3](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1253) | [v1.26.0](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1270) | Partially Compatible* | [v1.25.3](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1253) introduced `forecast_at` argument for base [univariate](https://docs.victoriametrics.com/anomaly-detection/components/models/#univariate-models) and `Prophet` [models](https://docs.victoriametrics.com/anomaly-detection/components/models/#prophet), however, itself remains backward-reversible from newer states like [v1.26.2](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1262), [v1.27.0](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1270). (All models except `isolation_forest_multivariate` class will be dropped) | | [v1.25.1](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1251) | [v1.25.2](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1252) | Fully Compatible | In [v1.25.1](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1251) there was a change to `vmanomaly.db` metadata database format, so migrating from v1.24.0-v1.25.0 requires deletion of a state, see note above the table | | [v1.24.1](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1241) | [v1.25.0](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1250) | Partially Compatible* | In [v1.25.0](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1250) there were changes to **data dump layout** and to `online_quantile` and `isolation_forest_multivariate` [model](https://docs.victoriametrics.com/anomaly-detection/components/models/) states, so to migrate from v1.24.0-v1.24.1 it is recommended to drop the state | diff --git a/docs/anomaly-detection/QuickStart.md b/docs/anomaly-detection/QuickStart.md index 0cfb81d402..a7c140508a 100644 --- a/docs/anomaly-detection/QuickStart.md +++ b/docs/anomaly-detection/QuickStart.md @@ -121,7 +121,7 @@ Below are the steps to get `vmanomaly` up and running inside a Docker container: 1. Pull Docker image: ```sh -docker pull victoriametrics/vmanomaly:v1.28.1 +docker pull victoriametrics/vmanomaly:v1.28.2 ``` 2. Create the license file with your license key. @@ -141,7 +141,7 @@ docker run -it \ -v ./license:/license \ -v ./config.yaml:/config.yaml \ -p 8490:8490 \ - victoriametrics/vmanomaly:v1.28.1 \ + victoriametrics/vmanomaly:v1.28.2 \ /config.yaml \ --licenseFile=/license \ --loggerLevel=INFO \ @@ -158,7 +158,7 @@ docker run -it \ -e VMANOMALY_DATA_DUMPS_DIR=/tmp/vmanomaly/data \ -e VMANOMALY_MODEL_DUMPS_DIR=/tmp/vmanomaly/models \ -p 8490:8490 \ - victoriametrics/vmanomaly:v1.28.1 \ + victoriametrics/vmanomaly:v1.28.2 \ /config.yaml \ --licenseFile=/license \ --loggerLevel=INFO \ @@ -171,7 +171,7 @@ services: # ... vmanomaly: container_name: vmanomaly - image: victoriametrics/vmanomaly:v1.28.1 + image: victoriametrics/vmanomaly:v1.28.2 # ... restart: always volumes: diff --git a/docs/anomaly-detection/UI.md b/docs/anomaly-detection/UI.md index 374e90ef80..d97f92d29f 100644 --- a/docs/anomaly-detection/UI.md +++ b/docs/anomaly-detection/UI.md @@ -68,6 +68,24 @@ Then, on [settings panel](#settings-panel) of the UI, set the URLs accordingly, ![vmanomaly-ui-sections-settings](vmanomaly-ui-sections-settings.webp) +### Pre-configured Datasource + +{{% available_from "v1.28.2" anomaly %}} It is possible to disable the datasource selectors from UI (e.g. at purpose to serve internal teams) by using pre-configured one with respective environment variables at `vmanomaly` startup: + +- `VMANOMALY_UI_DATASOURCE_URL` - to set static datasource URL +- `VMANOMALY_UI_DATASOURCE_TYPE` - to set datasource type, supported options are `vm` for VictoriaMetrics, `vmlogs` for both VictoriaLogs and VictoriaTraces. + +Example usage: +```shell +export VMANOMALY_UI_DATASOURCE_URL=https://play.victoriametrics.com/select/0:0/prometheus +export VMANOMALY_UI_DATASOURCE_TYPE=vm +``` + +After that, start `vmanomaly` instance as usual, and the datasource selectors will be hidden from UI, while the pre-configured datasource will be used for all queries: +![vmanomaly-ui-preconfigured-datasource-1](vmanomaly-ui-preconfigured-datasource-1.webp) + +![vmanomaly-ui-preconfigured-datasource-2](vmanomaly-ui-preconfigured-datasource-2.webp) + ## Preset Vmanomaly can be deployed in efficient "UI mode" [preset](https://docs.victoriametrics.com/anomaly-detection/presets/#ui), with as simple configuration as: @@ -310,25 +328,27 @@ Choose an appropriate anomaly detection model from the Model Panel based on the Set the "Fit Every" and "Fit Window" parameters to control how often and over what time window the model is retrained on new data to imitate production behavior - e.g. fit every 7 days on a rolling window of last 14 days. +{{% available_from "v1.28.0" anomaly %}} Set the "Infer Every" and toggle "Exact" mode parameters for [online models](https://docs.victoriametrics.com/anomaly-detection/components/models/#online-models) to imitate production inference behavior - e.g. infer every = 1h with step = 1m will result in exact mode for hourly micro-batches of up to 60 1m datapoints. + Tune the model hyperparameters and apply domain knowledge settings using the form-based menu in the Model Panel. See (i) tooltips for parameter descriptions and [model documentation](https://docs.victoriametrics.com/anomaly-detection/components/models/) link for recommended values and guidelines. ![vmanomaly-ui-model-config-wizard](vmanomaly-ui-model-config-wizard.webp) -For example, for a `rolling quantile` [model](https://docs.victoriametrics.com/anomaly-detection/components/models/#rolling-quantile), that should be run on a query, returning per-mode CPU utilization (as fractions of 1, data range `[0, 1]`), where you are interested in capturing **spikes of at least 5% deviations** from expected behavior: +For example, for a **MAD online** [model](https://docs.victoriametrics.com/anomaly-detection/components/models/#online-mad), that should be run on a query, returning per-mode CPU utilization (as fractions of 1, data range `[0, 1]`), where you are interested in capturing **spikes of at least 6% deviations** from expected behavior: Set the **model-agnostic** parameters to encode the domain knowledge: - [detection direction](https://docs.victoriametrics.com/anomaly-detection/components/models/#detection-direction) to `above expected` for capturing high anomalies (spikes) - data range to `[0, 1]` for CPU utilization fractions and proper prediction clipping -- [minimum deviation from expected](https://docs.victoriametrics.com/anomaly-detection/components/models/#minimal-deviation-from-expected) to `[0, 0.05]` for capturing spikes of at least 5% deviations in magnitude -- [anomaly score outside data range](https://docs.victoriametrics.com/anomaly-detection/components/models/#score-outside-data-range) to `5.0` for automatically marking values outside data range as anomalies (e.g. to catch improper query returning CPU > 100% or < 0%) +- [minimum deviation from expected](https://docs.victoriametrics.com/anomaly-detection/components/models/#minimal-deviation-from-expected) to `[0, 0.06]` for capturing spikes of at least 6% deviations in magnitude +- (optionally) [anomaly score outside data range](https://docs.victoriametrics.com/anomaly-detection/components/models/#score-outside-data-range) to `5.0` for automatically marking values outside data range as anomalies (e.g. to catch improper query returning CPU > 100% or < 0%) - [clip predictions](https://docs.victoriametrics.com/anomaly-detection/components/models/#clip-predictions) to `true` for avoiding nonsensical predictions outside data range - [scale](https://docs.victoriametrics.com/anomaly-detection/components/models/#scale) to `[1, 1]` unless you will see improper width of confidence intervals from the experiments (e.g. too wide/narrow) given the model-specific hyperparameters and false positives/negatives observed in the results. Set the **model-specific** hyperparameters: -- quantile to `0.9` for detecting high anomalies -- window steps to `48` for capturing 1 day of active history with 30m step data (24/0.5 = 48) +- `threshold` to `3` for capturing significant deviations +- `decay` to `0.995` for adapting to changing data patterns reasonably fast. -Check the parameters for validity and consistency by hitting the "Validate" button, which will also provide warnings if some parameters seem inconsistent (e.g. quantile is set outside of `[0, 1]` range or window steps is set to a negative value), then hit "Save" to apply the changes. +Check the parameters for validity and consistency by hitting the "Validate" button, which will also provide warnings if some parameters are inconsistent (e.g. decay is set outside of `[0, 1]` range or `threshold` is set to a negative value), then hit "Save" to apply the changes. ### Detect Anomalies @@ -338,10 +358,12 @@ Hit the "Detect Anomalies" button to run anomaly detection on the queried data w ![vmanomaly-ui-sections-plot-area-detect-mode](vmanomaly-ui-sections-plot-area-detect-mode.webp) -Iterate over the legend to view **individual output series** (e.g. actual values, expected values, confidence intervals, anomalies, etc.) for different series returned by the query. +Iterate over the legend to view **individual vmanomaly output** (e.g. actual values, expected values, confidence intervals, anomalies, etc.) for different series returned by the query. Iterate over **returned timeseries by query** to see how the model performed on different series, and whether the detected anomalies make sense in the context of the data and the use case (their % of total points, magnitude, duration, etc.). +> {{% available_from "v1.28.2" anomaly %}} Starting from [v1.4.0](#v140) The timeseries are now sortable in the legend by clicking on the respective column headers (both label- and statistics-based columns are supported, e.g., sort by series name, anomaly count). Press "Table View" toggle to use this feature. + Until satisfied with the results, finetune the model hyperparameters and domain knowledge settings in the Model Panel (or change the model type), and rerun anomaly detection on the queried data. Once satisfied with the results, do the following. @@ -366,6 +388,14 @@ If the **results** look good and the **model configuration should be deployed in ## Changelog +### v1.4.0 +Released: 2025-12-11 +vmanomaly version: [v1.28.2](https://docs.victoriametrics.com/anomaly-detection/changelog/#v1282) + +- FEATURE: Added an option to show **consecutive anomalies** (if N points in a row exceed anomaly threshold T) in the Visualization Panel, to reduce visual clutter when many anomalies are detected in a row. The option is available as "Streaks" button in the [Model Panel](#model-panel). Respective "streaks: N" stats appears in legend for each series. Example alerting rule's `for` parameter is adjusted accordingly if streaks are used. +- FEATURE: Timeseries are now sortable in the legend of the [Visualization Panel](#visualization-panel) by clicking on the respective column headers (both label- and statistics-based columns are supported, e.g., sort by series name, anomaly count). +- IMPROVEMENT: It's now possible to pre-configure datasource, so the UI users cannot re-configure datasource from UI or change its type. Suitable for internal team-serving deployments. Please refer to [pre-configured datasource](#pre-configured-datasource) section for details. + ### v1.3.0 Released: 2025-12-01 diff --git a/docs/anomaly-detection/components/models.md b/docs/anomaly-detection/components/models.md index fd5bb0fb24..5c1b67d91a 100644 --- a/docs/anomaly-detection/components/models.md +++ b/docs/anomaly-detection/components/models.md @@ -1331,7 +1331,7 @@ monitoring: Let's pull the docker image for `vmanomaly`: ```sh -docker pull victoriametrics/vmanomaly:v1.28.1 +docker pull victoriametrics/vmanomaly:v1.28.2 ``` Now we can run the docker container putting as volumes both config and model file: @@ -1345,7 +1345,7 @@ docker run -it \ -v $(PWD)/license:/license \ -v $(PWD)/custom_model.py:/vmanomaly/model/custom.py \ -v $(PWD)/custom.yaml:/config.yaml \ -victoriametrics/vmanomaly:v1.28.1 /config.yaml \ +victoriametrics/vmanomaly:v1.28.2 /config.yaml \ --licenseFile=/license --watch ``` diff --git a/docs/anomaly-detection/guides/guide-vmanomaly-vmalert/README.md b/docs/anomaly-detection/guides/guide-vmanomaly-vmalert/README.md index 2374c258af..0c77b5c0da 100644 --- a/docs/anomaly-detection/guides/guide-vmanomaly-vmalert/README.md +++ b/docs/anomaly-detection/guides/guide-vmanomaly-vmalert/README.md @@ -395,7 +395,7 @@ services: restart: always vmanomaly: container_name: vmanomaly - image: victoriametrics/vmanomaly:v1.28.1 + image: victoriametrics/vmanomaly:v1.28.2 depends_on: - "victoriametrics" ports: diff --git a/docs/anomaly-detection/vmanomaly-ui-example-alert-menu.webp b/docs/anomaly-detection/vmanomaly-ui-example-alert-menu.webp index cf3f21d8b5..4edffc5cd2 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-example-alert-menu.webp and b/docs/anomaly-detection/vmanomaly-ui-example-alert-menu.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-model-config-menu-yaml-tab.webp b/docs/anomaly-detection/vmanomaly-ui-model-config-menu-yaml-tab.webp index 174e583520..bb6c17116d 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-model-config-menu-yaml-tab.webp and b/docs/anomaly-detection/vmanomaly-ui-model-config-menu-yaml-tab.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-model-config-menu.webp b/docs/anomaly-detection/vmanomaly-ui-model-config-menu.webp index 6b51cb88f3..c9062f721d 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-model-config-menu.webp and b/docs/anomaly-detection/vmanomaly-ui-model-config-menu.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-model-config-wizard.webp b/docs/anomaly-detection/vmanomaly-ui-model-config-wizard.webp index 2c33907604..cfa4f04c4f 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-model-config-wizard.webp and b/docs/anomaly-detection/vmanomaly-ui-model-config-wizard.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-open-config-menu.webp b/docs/anomaly-detection/vmanomaly-ui-open-config-menu.webp index 48687a5c3c..299f3c8055 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-open-config-menu.webp and b/docs/anomaly-detection/vmanomaly-ui-open-config-menu.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-overview.webp b/docs/anomaly-detection/vmanomaly-ui-overview.webp index ed6352c6e3..ff59e1bc7d 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-overview.webp and b/docs/anomaly-detection/vmanomaly-ui-overview.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-preconfigured-datasource-1.webp b/docs/anomaly-detection/vmanomaly-ui-preconfigured-datasource-1.webp new file mode 100644 index 0000000000..7ff409a302 Binary files /dev/null and b/docs/anomaly-detection/vmanomaly-ui-preconfigured-datasource-1.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-preconfigured-datasource-2.webp b/docs/anomaly-detection/vmanomaly-ui-preconfigured-datasource-2.webp new file mode 100644 index 0000000000..1c0bc5afcb Binary files /dev/null and b/docs/anomaly-detection/vmanomaly-ui-preconfigured-datasource-2.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-sections-explore.webp b/docs/anomaly-detection/vmanomaly-ui-sections-explore.webp index 7651a907aa..51cdde3551 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-sections-explore.webp and b/docs/anomaly-detection/vmanomaly-ui-sections-explore.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-sections-model.webp b/docs/anomaly-detection/vmanomaly-ui-sections-model.webp index de326e3cc1..c8f6f1afd6 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-sections-model.webp and b/docs/anomaly-detection/vmanomaly-ui-sections-model.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-sections-plot-area-detect-mode.webp b/docs/anomaly-detection/vmanomaly-ui-sections-plot-area-detect-mode.webp index 8da5933884..ef22f5ce6e 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-sections-plot-area-detect-mode.webp and b/docs/anomaly-detection/vmanomaly-ui-sections-plot-area-detect-mode.webp differ diff --git a/docs/anomaly-detection/vmanomaly-ui-sections-plot-area-query-mode.webp b/docs/anomaly-detection/vmanomaly-ui-sections-plot-area-query-mode.webp index 38e80c4d60..e030cc65c5 100644 Binary files a/docs/anomaly-detection/vmanomaly-ui-sections-plot-area-query-mode.webp and b/docs/anomaly-detection/vmanomaly-ui-sections-plot-area-query-mode.webp differ