From a0ef2cb7ccecd80641945a9685c38ae6c36ceed3 Mon Sep 17 00:00:00 2001 From: Kristian Klausen <kristian@klausen.dk> Date: Sat, 24 Aug 2024 18:44:48 +0200 Subject: [PATCH] loki/nginx: Add recording rule for tracking upstream cache status[1] This enables us to calculate the cache hit ratio, which may help determine whether more caching would be beneficial. Please note that this only counts requests for which caching is enabled (e.g. {fastcgi,proxy}_cache is configured), e.g. for static served files cache_status will be "". [1] http://nginx.org/en/docs/http/ngx_http_upstream_module.html#var_upstream_cache_status --- roles/loki/files/rules.yaml | 2 ++ roles/nginx/templates/nginx.conf.j2 | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/roles/loki/files/rules.yaml b/roles/loki/files/rules.yaml index a5f0b0196..c29ea5f8d 100644 --- a/roles/loki/files/rules.yaml +++ b/roles/loki/files/rules.yaml @@ -4,3 +4,5 @@ groups: rules: - record: instance_http_version_tls_version_tls_cipher:requests:rate1m expr: 'sum by (instance, http_version, tls_version, tls_cipher) (rate({job="nginx"}[1m] | json http_version="server_protocol", tls_version="ssl_protocol", tls_cipher="ssl_cipher"))' + - record: instance_cache_status:requests:rate1m + expr: 'sum by (instance, cache_status) (rate({job="nginx"}[1m] | json cache_status="upstream_cache_status"))' diff --git a/roles/nginx/templates/nginx.conf.j2 b/roles/nginx/templates/nginx.conf.j2 index bb1344f3c..d6da832b7 100644 --- a/roles/nginx/templates/nginx.conf.j2 +++ b/roles/nginx/templates/nginx.conf.j2 @@ -28,13 +28,14 @@ http { '$remote_addr $host $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time ' - '$server_protocol $ssl_protocol $ssl_cipher'; + '$server_protocol $ssl_protocol $ssl_cipher ' + '$upstream_cache_status'; log_format reduced '$host [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $server_protocol $ssl_protocol ' - '$ssl_cipher'; + '$ssl_cipher $upstream_cache_status'; log_format json_main escape=json '{' @@ -53,6 +54,7 @@ http { '"server_protocol":"$server_protocol",' '"ssl_protocol":"$ssl_protocol",' '"ssl_cipher":"$ssl_cipher",' + '"upstream_cache_status":"$upstream_cache_status",' # This was added to keep every log line unique as Loki drops # log line with the same timestamp and log text: # https://grafana.com/docs/loki/latest/overview/#timestamp-ordering @@ -73,6 +75,7 @@ http { '"server_protocol":"$server_protocol",' '"ssl_protocol":"$ssl_protocol",' '"ssl_cipher":"$ssl_cipher",' + '"upstream_cache_status":"$upstream_cache_status",' # This was added to keep every log line unique as Loki drops # log line with the same timestamp and log text: # https://grafana.com/docs/loki/latest/overview/#timestamp-ordering -- GitLab