[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ansible-taler-exchange] branch master updated: work on alloy/loki confi
From: |
gnunet |
Subject: |
[ansible-taler-exchange] branch master updated: work on alloy/loki configuration |
Date: |
Tue, 21 Jan 2025 16:06:24 +0100 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository ansible-taler-exchange.
The following commit(s) were added to refs/heads/master by this push:
new d40f54f work on alloy/loki configuration
d40f54f is described below
commit d40f54f7cfe7eee2e72b2f16ea53677e8aef9d87
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Tue Jan 21 16:06:20 2025 +0100
work on alloy/loki configuration
---
.../nginx/sites-available/auditor-nginx.conf.j2 | 1 +
.../sites-available/email-challenger-nginx.conf.j2 | 2 +
.../postal-challenger-nginx.conf.j2 | 2 +
.../sites-available/sms-challenger-nginx.conf.j2 | 2 +
.../nginx/sites-available/exchange-nginx.conf.j2 | 2 +
roles/monitoring/files/etc/default/alloy | 2 +-
roles/monitoring/templates/etc/alloy/config.alloy | 86 ++++++++++++++++++++++
.../files/etc/nginx/conf.d/log-format-apm.conf | 18 +++++
8 files changed, 114 insertions(+), 1 deletion(-)
diff --git
a/roles/auditor/templates/etc/nginx/sites-available/auditor-nginx.conf.j2
b/roles/auditor/templates/etc/nginx/sites-available/auditor-nginx.conf.j2
index ebd2056..e687d70 100644
--- a/roles/auditor/templates/etc/nginx/sites-available/auditor-nginx.conf.j2
+++ b/roles/auditor/templates/etc/nginx/sites-available/auditor-nginx.conf.j2
@@ -29,6 +29,7 @@ server {
error_log /var/log/nginx/auditor.{{ DOMAIN_NAME }}.err;
access_log /var/log/nginx/auditor.{{ DOMAIN_NAME }}.log apm;
+ access_log /var/log/nginx/auditor.{{ DOMAIN_NAME }}.tal taler if=$log_perf;
location / {
# Most of the API we will put behind simple access control for now.
if ($http_authorization != "Bearer {{ AUDITOR_ACCESS_TOKEN }}") {
diff --git
a/roles/challenger/templates/etc/nginx/sites-available/email-challenger-nginx.conf.j2
b/roles/challenger/templates/etc/nginx/sites-available/email-challenger-nginx.conf.j2
index 9b8d444..76e5239 100644
---
a/roles/challenger/templates/etc/nginx/sites-available/email-challenger-nginx.conf.j2
+++
b/roles/challenger/templates/etc/nginx/sites-available/email-challenger-nginx.conf.j2
@@ -28,6 +28,8 @@ server {
error_log /var/log/nginx/email.challenger.{{ DOMAIN_NAME }}.err;
access_log /var/log/nginx/email.challenger.{{ DOMAIN_NAME }}.log apm;
+ access_log /var/log/nginx/email.challenger.{{ DOMAIN_NAME }}.tal taler
if=$log_perf;
+
location / {
proxy_pass http://unix:/var/run/challenger-email/challenger-http.sock;
}
diff --git
a/roles/challenger/templates/etc/nginx/sites-available/postal-challenger-nginx.conf.j2
b/roles/challenger/templates/etc/nginx/sites-available/postal-challenger-nginx.conf.j2
index 6a032e3..f44b8b0 100644
---
a/roles/challenger/templates/etc/nginx/sites-available/postal-challenger-nginx.conf.j2
+++
b/roles/challenger/templates/etc/nginx/sites-available/postal-challenger-nginx.conf.j2
@@ -26,6 +26,8 @@ server {
error_log /var/log/nginx/postal.challenger.{{ DOMAIN_NAME }}.err;
access_log /var/log/nginx/postal.challenger.{{ DOMAIN_NAME }}.log apm;
+ access_log /var/log/nginx/postal.challenger.{{ DOMAIN_NAME }}.tal taler
if=$log_perf;
+
location / {
proxy_pass http://unix:/var/run/challenger-postal/challenger-http.sock;
}
diff --git
a/roles/challenger/templates/etc/nginx/sites-available/sms-challenger-nginx.conf.j2
b/roles/challenger/templates/etc/nginx/sites-available/sms-challenger-nginx.conf.j2
index 00f0488..d287666 100644
---
a/roles/challenger/templates/etc/nginx/sites-available/sms-challenger-nginx.conf.j2
+++
b/roles/challenger/templates/etc/nginx/sites-available/sms-challenger-nginx.conf.j2
@@ -26,6 +26,8 @@ server {
error_log /var/log/nginx/sms.challenger.{{ DOMAIN_NAME }}.err;
access_log /var/log/nginx/sms.challenger.{{ DOMAIN_NAME }}.log apm;
+ access_log /var/log/nginx/sms.challenger.{{ DOMAIN_NAME }}.tal taler
if=$log_perf;
+
location / {
proxy_pass http://unix:/var/run/challenger-sms/challenger-http.sock;
}
diff --git
a/roles/exchange/templates/etc/nginx/sites-available/exchange-nginx.conf.j2
b/roles/exchange/templates/etc/nginx/sites-available/exchange-nginx.conf.j2
index 95d6665..2dd9c31 100644
--- a/roles/exchange/templates/etc/nginx/sites-available/exchange-nginx.conf.j2
+++ b/roles/exchange/templates/etc/nginx/sites-available/exchange-nginx.conf.j2
@@ -28,6 +28,8 @@ server {
error_log /var/log/nginx/exchange.{{ DOMAIN_NAME }}.err;
access_log /var/log/nginx/exchange.{{ DOMAIN_NAME }}.log apm;
+ access_log /var/log/nginx/exchange.{{ DOMAIN_NAME }}.tal taler if=$log_perf;
+
location / {
proxy_pass http://unix:/var/run/taler-exchange/httpd/exchange-http.sock;
}
diff --git a/roles/monitoring/files/etc/default/alloy
b/roles/monitoring/files/etc/default/alloy
index 399f7b9..48ad5c4 100644
--- a/roles/monitoring/files/etc/default/alloy
+++ b/roles/monitoring/files/etc/default/alloy
@@ -3,7 +3,7 @@
CONFIG_FILE="/etc/alloy/config.alloy"
# User-defined arguments to pass to the run command.
-CUSTOM_ARGS="--server.http.listen-addr=127.0.0.1:12345"
+CUSTOM_ARGS="--server.http.listen-addr=127.0.0.1:12345 --disable-reporting"
# Restart on system upgrade. Defaults to true.
RESTART_ON_UPGRADE=true
diff --git a/roles/monitoring/templates/etc/alloy/config.alloy
b/roles/monitoring/templates/etc/alloy/config.alloy
index e36f562..ff18bf2 100644
--- a/roles/monitoring/templates/etc/alloy/config.alloy
+++ b/roles/monitoring/templates/etc/alloy/config.alloy
@@ -83,3 +83,89 @@ prometheus.scrape "default" {
// prometheus.relabel).
]
}
+
+
+loki.source.file "nginx_taler_performance_logs" {
+ targets = [{
+ __path__ = "/var/log/nginx/*.tal",
+ job = "nginx/performance",
+ }]
+ forward_to = [loki.process.perf_logs.receiver]
+}
+
+
+# https://grafana.com/docs/alloy/latest/reference/components/loki/loki.process/
+loki.process "perf_logs" {
+
+#
https://grafana.com/docs/alloy/latest/reference/components/loki/loki.process/#stageregex-block
+ stage.regex {
+ expression = "uri=/(?P<ep>[a-zA-Z]+)(?:/\w+)?(?:/(?P<act>[a-zA-Z-]+))?
s=(?P<status>\d{3}).*urt=(?P<urt>\d+\.\d+|-) rt=(?P<response_time>\d+\.\d+)
rl=(?P<request_length>\d+) bs=(?P<bytes_sent>\d+)"
+ }
+
+#
https://grafana.com/docs/alloy/latest/reference/components/loki/loki.process/#stagetemplate-block
+ stage.template {
+ source = "endpoint"
+ template = '{{ printf "%s-%s" .ep .act | trimSuffix "-" }}'
+ }
+
+ stage.template {
+ source = upstream_response_time
+ template = '{{ .urt | replace "-" "0" }}'
+ }
+
+ stage.metrics {
+#
https://grafana.com/docs/alloy/latest/reference/components/loki/loki.process/#metriccounter-block
+ metric.counter {
+ name = 'total_requests'
+ prefix = 'taler_requests_'
+ description = "Total Requests"
+ match_all = true
+ action = inc
+ }
+ metric.gauge {
+ name = 'response_time'
+ prefix = 'taler_requests_'
+ description = "Time taken for Nginx to respond"
+ source = 'response_time'
+ max_idle_duration = "24h"
+ action = set
+ }
+#
https://grafana.com/docs/alloy/latest/reference/components/loki/loki.process/#metrichistogram-block
+# https://www.robustperception.io/how-does-a-prometheus-histogram-work
+ metric.histogram {
+ name = "request_length_hist"
+ prefix = 'taler_requests_'
+ description = "Request Length reported from Nginx"
+ source = 'request_length'
+ max_idle_duration = "24h"
+ buckets = [1,10,50,100,200,500,1000,2000,5000]
+ }
+
+ metric.histogram {
+ name = "bytes_sent_hist"
+ prefix = 'taler_requests_'
+ description = "Number of bytes sent, reported from Nginx"
+ source = 'bytes_sent'
+ max_idle_duration = "24h"
+ buckets = [1,10,50,100,200,500,1000,2000,5000]
+ }
+ metric.histogram {
+ name = "response_time_hist"
+ prefix = 'taler_requests_'
+ description = "Time taken for Nginx to respond"
+ source = 'response_time'
+ max_idle_duration = "24h"
+ buckets = [0.001,0.0025,0.005,0.010,0.025,0.050,0.1,0.25,0.5,1,2,5]
+ }
+ metric.histogram {
+ name = "upstream_response_time_hist"
+ prefix = 'taler_requests_'
+ description = "Time taken for the Exchange to respond to Nginx"
+ source = 'upstream_response_time'
+ max_idle_duration = "24h"
+ buckets = [0.001,0.0025,0.005,0.010,0.025,0.050,0.1,0.25,0.5,1,2,5]
+ }
+
+ forward_to = [loki.write.grafana_loki.receiver]
+
+}
\ No newline at end of file
diff --git a/roles/webserver/files/etc/nginx/conf.d/log-format-apm.conf
b/roles/webserver/files/etc/nginx/conf.d/log-format-apm.conf
index 180720c..75e5dcd 100644
--- a/roles/webserver/files/etc/nginx/conf.d/log-format-apm.conf
+++ b/roles/webserver/files/etc/nginx/conf.d/log-format-apm.conf
@@ -7,3 +7,21 @@ log_format apm '”$time_local” client=$remote_addr '
'upstream_addr=$upstream_addr '
'upstream_status=$upstream_status '
'request_time=$request_time';
+
+# This format is expected by alloy (see monitoring role)
+log_format taler 'm=$request_method uri=$uri s=$status '
+ 'uct=$upstream_connect_time '
+ 'urt=$upstream_response_time '
+ 'rt=$request_time '
+ 'rl=$request_length '
+ 'bs=$bytes_sent';
+
+# Determines which HTTP methods we log performance data for.
+# Specifically, we exclude HEAD (don't care) and GET (often long-polling)
+# and anything non-canonical for GNU Taler (like OPTIONS).
+map $request_method $log_perf {
+ default 0;
+ POST 1;
+ PATCH 1;
+ DELETE 1;
+}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [ansible-taler-exchange] branch master updated: work on alloy/loki configuration,
gnunet <=