The Prometheus team has released version 2.26.0 of the open-source monitoring and alerting tool. One of the major changes in this release is that the new version is built with Go 1.16, which solves the problem of memory allocation in the previous version.
With v2.26.0 being built with Go 1.16, users should be able to see more accurate figures for the actual amount of memory Prometheus uses, thanks to the common resident set size (RSS) usage metrics. The reason for this change is because Go 1.16 reverts on a memory release pattern which was first introduced in Go 1.12 and caused apps built using Go, to use more memory on Linux.
The Go problem
The issue is explained here. It was caused by the Go runtime changing the way it used the madvise system call in Go 1.12, to inform the Linux kernel whether memory pages are necessary or not.
The intention behind this was to bring more efficiency to memory handling. However, it would sometimes lead to a higher reported RSS, that could be mistaken for a memory leak.
Another change in the new release is that it now uses the Alertmanager v2 API by default. It handles alerts sent by client apps like the Prometheus server, directing them to their correct destinations like OpsGenie, PagerDuty, or email.
There is now support for AWS Signature Version 4 authentication method for remote-write. It is the Grafana Cloud Agent code for the AMP (Amazon Managed Service for Prometheus,) which was added upstream to Prometheus.
The Prometheus Query language (PromQL) now had auto-completion, linting for errors, and syntax highlighting.
Other minor improvements are present. For instance, hitting Enter will now trigger a new query in the user interface and handle long rule and names on the /rules and /target pages better.