add metrics
This commit is contained in:
parent
79c5c57629
commit
1612f5e511
6 changed files with 227 additions and 60 deletions
29
flake.nix
29
flake.nix
|
|
@ -51,13 +51,42 @@
|
||||||
owner = "root";
|
owner = "root";
|
||||||
group = "root";
|
group = "root";
|
||||||
};
|
};
|
||||||
|
matrix_registration_shared_secret = {
|
||||||
|
file = ./secrets/matrix_registration_shared_secret.age;
|
||||||
|
mode = "440";
|
||||||
|
owner = "matrix-synapse";
|
||||||
|
group = "matrix-synapse";
|
||||||
|
};
|
||||||
|
matrix_signing_key = {
|
||||||
|
file = ./secrets/matrix_signing_key.age;
|
||||||
|
mode = "440";
|
||||||
|
owner = "matrix-synapse";
|
||||||
|
group = "matrix-synapse";
|
||||||
|
};
|
||||||
|
grafana_secret_key = {
|
||||||
|
file = ./secrets/grafana_secret_key.age;
|
||||||
|
mode = "440";
|
||||||
|
owner = "grafana";
|
||||||
|
group = "grafana";
|
||||||
|
};
|
||||||
|
grafana_admin_password = {
|
||||||
|
file = ./secrets/grafana_admin_password.age;
|
||||||
|
mode = "440";
|
||||||
|
owner = "grafana";
|
||||||
|
group = "grafana";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
|
|
||||||
./services/nginx.nix
|
./services/nginx.nix
|
||||||
./services/postgres.nix
|
./services/postgres.nix
|
||||||
|
|
||||||
./services/synapse.nix
|
./services/synapse.nix
|
||||||
./services/draupnir.nix
|
./services/draupnir.nix
|
||||||
|
|
||||||
|
./services/prometheus.nix
|
||||||
|
./services/grafana.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
56
services/grafana.nix
Normal file
56
services/grafana.nix
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services = {
|
||||||
|
grafana = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
server.http_addr = "::1";
|
||||||
|
database = {
|
||||||
|
type = "postgres";
|
||||||
|
name = "grafana";
|
||||||
|
user = "grafana";
|
||||||
|
host = "/run/postgresql";
|
||||||
|
};
|
||||||
|
security = {
|
||||||
|
secret_key = "$__file{${config.age.secrets.grafana_secret_key.path}}";
|
||||||
|
admin_user = "xengi";
|
||||||
|
admin_password = "$__file{${config.age.secrets.grafana_admin_password.path}}";
|
||||||
|
admin_email = "grafana@xengi.de";
|
||||||
|
};
|
||||||
|
analytics = {
|
||||||
|
reporting_enabled = false;
|
||||||
|
feedback_links_enabled = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
provision = {
|
||||||
|
enable = true;
|
||||||
|
datasources.settings.datasources = [
|
||||||
|
{
|
||||||
|
name = "Prometheus";
|
||||||
|
type = "prometheus";
|
||||||
|
url = "http://${config.services.prometheus.listenAddress}:${toString config.services.prometheus.port}";
|
||||||
|
jsonData = {
|
||||||
|
httpMethod = "GET";
|
||||||
|
prometheusType = "Prometheus";
|
||||||
|
cacheLevel = "High";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
postgresql = {
|
||||||
|
ensureUsers = [
|
||||||
|
{
|
||||||
|
name = config.services.grafana.settings.database.user;
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
ensureDatabases = [
|
||||||
|
config.services.grafana.settings.database.name
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -20,9 +20,9 @@ in
|
||||||
kTLS = true;
|
kTLS = true;
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
useACMEHost = fqdn;
|
useACMEHost = fqdn;
|
||||||
#enableACME = true;
|
|
||||||
locations = {
|
locations = {
|
||||||
"/.well-known/matrix/client" = {
|
"/".return = "418 \"I'm a Teapot!\"";
|
||||||
|
"= /.well-known/matrix/client" = {
|
||||||
return = "200 '{\"m.homeserver\": {\"base_url\": \"https://matrix.berlin.ccc.de\"}}'";
|
return = "200 '{\"m.homeserver\": {\"base_url\": \"https://matrix.berlin.ccc.de\"}}'";
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
default_type application/json;
|
default_type application/json;
|
||||||
|
|
@ -31,25 +31,16 @@ in
|
||||||
};
|
};
|
||||||
"~ ^(/_matrix|/_synapse/client)" {
|
"~ ^(/_matrix|/_synapse/client)" {
|
||||||
recommendedProxySettings = true;
|
recommendedProxySettings = true;
|
||||||
proxyPass = "unix:/run/matrix-synapse.sock";
|
proxyPass = "http://[::1]:8008";
|
||||||
extraConfig = ''
|
|
||||||
proxy_set_header X-Request-ID $request_id;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
"/" = {
|
|
||||||
return = "418 \"I'm a Teapot!\"";
|
|
||||||
};
|
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
client_max_body_size 64M;
|
client_max_body_size 64M;
|
||||||
'';
|
proxy_set_header X-Request-ID $request_id;
|
||||||
};
|
|
||||||
extraConfig = ''
|
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
security.acme.certs."${fqdn}" = {
|
|
||||||
reloadServices = ["nginx"];
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
security.acme.certs."${fqdn}".reloadServices = ["nginx"];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,8 @@
|
||||||
{ config, ... }:
|
{ ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
services.postgresql = {
|
services.postgresql = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableJIT = true;
|
enableJIT = true;
|
||||||
ensureUsers = [
|
|
||||||
{
|
|
||||||
name = config.services.matrix-synapse.settings.database.args.user;
|
|
||||||
ensureDBOwnership = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
ensureDatabases = [ config.services.matrix-synapse.settings.database.args.database ];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
66
services/prometheus.nix
Normal file
66
services/prometheus.nix
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.prometheus = {
|
||||||
|
enable = true;
|
||||||
|
retentionTime = "14d";
|
||||||
|
listenAddress = "[::1]";
|
||||||
|
exporters = {
|
||||||
|
#node = {};
|
||||||
|
#nginx = {};
|
||||||
|
#postgres = {};
|
||||||
|
};
|
||||||
|
scrapeConfigs = [
|
||||||
|
{
|
||||||
|
job_name = "synapse";
|
||||||
|
scrape_interval = "15s";
|
||||||
|
static_configs = [
|
||||||
|
{
|
||||||
|
targets = ["[::1]:9009"];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
ruleFiles = [
|
||||||
|
# https://github.com/element-hq/synapse/tree/master/contrib/prometheus
|
||||||
|
(pkgs.writeText "prom-synapse-rules.yaml" ''
|
||||||
|
groups:
|
||||||
|
- name: synapse
|
||||||
|
rules:
|
||||||
|
- record: 'synapse_federation_client_sent'
|
||||||
|
labels:
|
||||||
|
type: "EDU"
|
||||||
|
expr: 'synapse_federation_client_sent_edus_total + 0'
|
||||||
|
- record: 'synapse_federation_client_sent'
|
||||||
|
labels:
|
||||||
|
type: "PDU"
|
||||||
|
expr: 'synapse_federation_client_sent_pdu_destinations_count_total + 0'
|
||||||
|
- record: 'synapse_federation_client_sent'
|
||||||
|
labels:
|
||||||
|
type: "Query"
|
||||||
|
expr: 'sum(synapse_federation_client_sent_queries) by (job)'
|
||||||
|
- record: 'synapse_federation_server_received'
|
||||||
|
labels:
|
||||||
|
type: "EDU"
|
||||||
|
expr: 'synapse_federation_server_received_edus_total + 0'
|
||||||
|
- record: 'synapse_federation_server_received'
|
||||||
|
labels:
|
||||||
|
type: "PDU"
|
||||||
|
expr: 'synapse_federation_server_received_pdus_total + 0'
|
||||||
|
- record: 'synapse_federation_server_received'
|
||||||
|
labels:
|
||||||
|
type: "Query"
|
||||||
|
expr: 'sum(synapse_federation_server_received_queries) by (job)'
|
||||||
|
- record: 'synapse_federation_transaction_queue_pending'
|
||||||
|
labels:
|
||||||
|
type: "EDU"
|
||||||
|
expr: 'synapse_federation_transaction_queue_pending_edus + 0'
|
||||||
|
- record: 'synapse_federation_transaction_queue_pending'
|
||||||
|
labels:
|
||||||
|
type: "PDU"
|
||||||
|
expr: 'synapse_federation_transaction_queue_pending_pdus + 0'
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -4,18 +4,27 @@ let
|
||||||
domain = "berlin.ccc.de";
|
domain = "berlin.ccc.de";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
services.matrix-synapse = {
|
services = {
|
||||||
enable = false;
|
matrix-synapse = {
|
||||||
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
server_name = domain;
|
server_name = domain;
|
||||||
public_baseurl = "https://matrix.${domain}:443/";
|
public_baseurl = "https://matrix.${domain}:443/";
|
||||||
#signing_key_path = config.age.secrets.signing_key.path; # "/var/lib/matrix-synapse/homeserver.signing.key"
|
#signing_key_path = config.age.secrets.signing_key.path; # "/var/lib/matrix-synapse/homeserver.signing.key"
|
||||||
database.name = "psycopg2";
|
database = {
|
||||||
|
name = "psycopg2";
|
||||||
|
args = {
|
||||||
|
user = "matrix-synapse";
|
||||||
|
database = "matrix-synapse";
|
||||||
|
};
|
||||||
|
};
|
||||||
listeners = [
|
listeners = [
|
||||||
{
|
{
|
||||||
path = "/run/matrix-synapse.sock";
|
type = "http";
|
||||||
x_forwarded = true;
|
x_forwarded = true;
|
||||||
request_id_header = "X-Request-ID";
|
tls = false;
|
||||||
|
port = 8008;
|
||||||
|
bind_addresses = [ "::1" ];
|
||||||
resources = [
|
resources = [
|
||||||
{
|
{
|
||||||
compress = false;
|
compress = false;
|
||||||
|
|
@ -26,7 +35,17 @@ in
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
type = "metrics";
|
||||||
|
port = 9009;
|
||||||
|
bind_addresses = [ "::1" ];
|
||||||
|
resources = [{
|
||||||
|
compress = false;
|
||||||
|
names = [ "metrics" ];
|
||||||
|
}];
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
enable_metrics = true;
|
||||||
dynamic_thumbnails = true;
|
dynamic_thumbnails = true;
|
||||||
max_upload_size = "128M";
|
max_upload_size = "128M";
|
||||||
max_image_pixels = "64M";
|
max_image_pixels = "64M";
|
||||||
|
|
@ -46,4 +65,17 @@ in
|
||||||
];
|
];
|
||||||
enableRegistrationScript = true;
|
enableRegistrationScript = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
postgresql = {
|
||||||
|
ensureUsers = [
|
||||||
|
{
|
||||||
|
name = config.services.matrix-synapse.settings.database.args.user;
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
ensureDatabases = [
|
||||||
|
config.services.matrix-synapse.settings.database.args.database
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue