Prometheus 0.17.0 was recently released with 394 commits since 0.16.2, let's see what the big changes are.

PromQL

There's one notable new feature in PromQL, the without aggregation modifier. Unlike by which keeps all the listed labels, without removes the listed labels. This is useful when there are cross-job target labels you don't want to lose, and you don't want to have to have a different set of expressions for each job. Put another way, this makes it much easier to share rules.

The second change is potentially breaking, regexes are now fully anchored in PromQL. Previously a selector expression such as metric{label=~"bc|gh"} could match a label value of abc or fgh. To reduce the risk of unintentional matches like these, it'll now only match bc and gh.

Alerting

As of this release, Prometheus only works with the new Alertmanager so make sure you upgrade your Alertmanager first (the 0.1.0 Alertmanager supports both 0.17.0 and older versions of Prometheus).

The syntax for alerting has changed to be clearer and more generic, for example:

ALERT MissingNodeExporters
  IF absent(up{job="node"})
  FOR 5m         # Optional
  LABELS {       # Optional
    severity = "page"
  }
  ANNOTATIONS {  # Optional
    summary = "All node exporters are missing"
  }

Other changes

Service discovery for AirBnB's Nerve has been added.

At ingestion time label names are now validated, so if you were somehow previously transmitting invalid label names (client libraries are meant to catch this) this will cause scrapes to fail.

There's a few other changes, checkout the full release notes.