docs/sources/release-notes/v2-3.md
The Loki team is excited to announce the release of Loki 2.3!
It's been nearly 6 months since 2.2 was released and we have made good use of that time to bring forward several significant improvements and requested features.
2.3 is also the first version of Loki released under the AGPLv3 license. You can read more about our licensing here.
Some parts of the Loki repo will remain Apache-2.0 licensed (mainly clients and some tooling), for more details read LICENSING.md.
For those of you running Loki as microservices, the following features will improve performance operations significantly for many operations.
A very common feature requested has also been included in 2.3:
Without revisiting the decisions and discussions around the somewhat controversial behavior of unhealthy ingesters, you can now decided how you would like them to be handled: manually or automatically.
Lastly several useful additions to the LogQL query language have been included:
label_format and line_format with PR 3515, for more information,see the documentation for template functions.label_format and line_format was included with 3434.first_over_time and last_over_time were added in PR 3050. These can be useful for some down sampling approaches where instead of taking an average, max, or min of samples over a range in a metrics query, you can select the first or last log line to use from that range.The path from 2.2.1 to 2.3.0 should be smooth, as always, read the Upgrade Guide for important upgrade guidance.
One change we consider noteworthy however is:
This change now rejects any query which does not contain at least one equality matcher, an example may better illustrate:
{namespace=~".*"}
This query will now be rejected, however there are several ways to modify it for it to succeed:
Add at least one equals label matcher:
{cluster="us-east-1",namespace=~".*"}
Use .+ instead of .*
{namespace=~".+"}
This difference may seem subtle but if we break it down . matches any character, * matches zero or more of the preceding character and + matches one or more of the preceding character. The .* case will match empty values where .+ will not, this is the important difference. {namespace=""} is an invalid request (unless you add another equals label matcher like the example above).
The reasoning for this change has to do with how index lookups work in Loki, if you don't have at least one equality matcher Loki has to perform a complete index table scan which is an expensive and slow operation.
List of security fixes for 2.3.x.
2.3.0 contains an important security fix:
{{< admonition type="note" >}}
Exploitation of this vulnerability requires the ability for an attacker to craft and send directly to Loki an X-Scope-OrgID header, end users should not have the ability to create and send this header directly to Loki as it controls access to tenants and is important to control setting of this header for proper tenant isolation and security. We always recommend having a proxy or gateway be responsible for setting the X-Scope-OrgID.{{< /admonition >}}
Lists of bug fixes for 2.3.x.