Coffee journaling on ATProto (alpha) alpha.arabica.social
coffee
17
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: nix flake run target for observability stack

authored by

Patrick Dewey and committed by tangled.org 3d6ef573 448517c2

+141 -3
+1 -1
default.nix nix/default.nix
··· 3 3 buildGoModule { 4 4 pname = "arabica"; 5 5 version = "0.1.0"; 6 - src = ./.; 6 + src = ../.; 7 7 vendorHash = "sha256-eNImqD4Zof/KjKT8Htd392WzJi0lJUeliIAXlrDeWKc="; 8 8 9 9 nativeBuildInputs = [ templ tailwindcss ];
+3 -2
flake.nix
··· 13 13 }); 14 14 15 15 packages = forAllSystems (pkgs: system: rec { 16 - arabica = pkgs.callPackage ./default.nix { }; 16 + arabica = pkgs.callPackage ./nix/default.nix { }; 17 17 default = arabica; 18 18 }); 19 19 ··· 29 29 ${pkgs.tailwindcss}/bin/tailwindcss -i static/css/app.css -o static/css/output.css --minify 30 30 ''); 31 31 }; 32 + monitoring = import ./nix/monitoring.nix { inherit pkgs; }; 32 33 }); 33 34 34 - nixosModules.default = import ./module.nix; 35 + nixosModules.default = import ./nix/module.nix; 35 36 }; 36 37 }
module.nix nix/module.nix
+137
nix/monitoring.nix
··· 1 + { pkgs }: 2 + { 3 + type = "app"; 4 + program = toString (pkgs.writeShellScript "monitoring-stack" '' 5 + set -euo pipefail 6 + 7 + TMPDIR=$(mktemp -d) 8 + trap 'echo "Shutting down monitoring stack..."; kill $(jobs -p) 2>/dev/null; rm -rf "$TMPDIR"' EXIT INT TERM 9 + 10 + mkdir -p "$TMPDIR"/{grafana/{data,plugins,logs},prometheus,loki,tempo} 11 + 12 + # Prometheus config 13 + cat > "$TMPDIR/prometheus/prometheus.yml" <<'EOF' 14 + global: 15 + scrape_interval: 15s 16 + 17 + scrape_configs: 18 + - job_name: arabica 19 + static_configs: 20 + - targets: ['localhost:9101'] 21 + EOF 22 + 23 + # Loki config 24 + cat > "$TMPDIR/loki/loki.yaml" <<'EOF' 25 + auth_enabled: false 26 + server: 27 + http_listen_port: 3100 28 + common: 29 + ring: 30 + instance_addr: 127.0.0.1 31 + kvstore: 32 + store: inmemory 33 + replication_factor: 1 34 + path_prefix: /tmp/loki 35 + schema_config: 36 + configs: 37 + - from: 2020-10-24 38 + store: tsdb 39 + object_store: filesystem 40 + schema: v13 41 + index: 42 + prefix: index_ 43 + period: 24h 44 + storage_config: 45 + filesystem: 46 + directory: /tmp/loki/chunks 47 + EOF 48 + 49 + # Tempo config 50 + cat > "$TMPDIR/tempo/tempo.yaml" <<'EOF' 51 + server: 52 + http_listen_port: 3200 53 + distributor: 54 + receivers: 55 + otlp: 56 + protocols: 57 + http: 58 + endpoint: 0.0.0.0:4318 59 + grpc: 60 + endpoint: 0.0.0.0:4317 61 + storage: 62 + trace: 63 + backend: local 64 + local: 65 + path: /tmp/tempo/traces 66 + wal: 67 + path: /tmp/tempo/wal 68 + EOF 69 + 70 + # Grafana datasources 71 + mkdir -p "$TMPDIR/grafana/provisioning/datasources" 72 + cat > "$TMPDIR/grafana/provisioning/datasources/datasources.yaml" <<'EOF' 73 + apiVersion: 1 74 + datasources: 75 + - name: Prometheus 76 + type: prometheus 77 + uid: prometheus 78 + url: http://localhost:9090 79 + isDefault: true 80 + - name: Loki 81 + type: loki 82 + uid: loki 83 + url: http://localhost:3100 84 + - name: Tempo 85 + type: tempo 86 + uid: tempo 87 + url: http://localhost:3200 88 + jsonData: 89 + tracesToLogsV2: 90 + datasourceUid: loki 91 + serviceMap: 92 + datasourceUid: prometheus 93 + EOF 94 + 95 + echo "Starting Prometheus on :9090..." 96 + ${pkgs.prometheus}/bin/prometheus \ 97 + --config.file="$TMPDIR/prometheus/prometheus.yml" \ 98 + --storage.tsdb.path="$TMPDIR/prometheus/data" \ 99 + --web.listen-address=":9090" \ 100 + > "$TMPDIR/prometheus.log" 2>&1 & 101 + 102 + echo "Starting Loki on :3100..." 103 + ${pkgs.grafana-loki}/bin/loki \ 104 + -config.file="$TMPDIR/loki/loki.yaml" \ 105 + > "$TMPDIR/loki.log" 2>&1 & 106 + 107 + echo "Starting Tempo on :3200 (OTLP HTTP :4318, OTLP gRPC :4317)..." 108 + ${pkgs.tempo}/bin/tempo \ 109 + -config.file="$TMPDIR/tempo/tempo.yaml" \ 110 + > "$TMPDIR/tempo.log" 2>&1 & 111 + 112 + echo "Starting Grafana on :3000 (admin/admin)..." 113 + GF_PATHS_DATA="$TMPDIR/grafana/data" \ 114 + GF_PATHS_PLUGINS="$TMPDIR/grafana/plugins" \ 115 + GF_PATHS_LOGS="$TMPDIR/grafana/logs" \ 116 + GF_PATHS_PROVISIONING="$TMPDIR/grafana/provisioning" \ 117 + GF_SERVER_HTTP_PORT=3000 \ 118 + GF_AUTH_ANONYMOUS_ENABLED=true \ 119 + GF_AUTH_ANONYMOUS_ORG_ROLE=Admin \ 120 + ${pkgs.grafana}/bin/grafana server \ 121 + --homepath=${pkgs.grafana}/share/grafana \ 122 + > "$TMPDIR/grafana.log" 2>&1 & 123 + 124 + echo "" 125 + echo "Monitoring stack running:" 126 + echo " Grafana: http://localhost:3000" 127 + echo " Prometheus: http://localhost:9090" 128 + echo " Loki: http://localhost:3100" 129 + echo " Tempo: http://localhost:3200" 130 + echo "" 131 + echo "Arabica should send traces to OTEL_EXPORTER_OTLP_ENDPOINT=localhost:4318" 132 + echo "Arabica metrics are scraped from :9101/metrics" 133 + echo "" 134 + echo "Press Ctrl+C to stop." 135 + wait 136 + ''); 137 + }