From 7b31cd622303ce8ed072be9db41a5388d6542000 Mon Sep 17 00:00:00 2001 From: evan Date: Fri, 2 May 2025 12:22:19 -0700 Subject: [PATCH] add node exporter and otel collector in setup --- setup.sh | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 2 deletions(-) diff --git a/setup.sh b/setup.sh index 32aac1d30..f1165b338 100644 --- a/setup.sh +++ b/setup.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Comprehensive setup script for Hetzner server with Docker and user setup +# Comprehensive setup script for Hetzner server with Docker, user setup, Node Exporter, and OpenTelemetry # Exit on error set -e @@ -7,6 +7,13 @@ echo "=====================================================" echo "🚀 STARTING SERVER SETUP" echo "=====================================================" +# Verify required environment variables +if [ -z "$OTEL_ENDPOINT" ] || [ -z "$OTEL_USERNAME" ] || [ -z "$OTEL_PASSWORD" ]; then + echo "❌ ERROR: Required environment variables are not set!" + echo "Please set OTEL_ENDPOINT, OTEL_USERNAME, and OTEL_PASSWORD" + exit 1 +fi + echo "🔄 Updating system..." apt update && apt upgrade -y @@ -75,10 +82,110 @@ fi chown -R openfront:openfront /home/openfront echo "Set proper ownership for openfront's home directory" +# Create directory for OpenTelemetry configuration +echo "📊 Setting up Node Exporter and OpenTelemetry Collector..." +OTEL_CONFIG_DIR="/home/openfront/otel" + +if [ ! -d "$OTEL_CONFIG_DIR" ]; then + mkdir -p "$OTEL_CONFIG_DIR" + echo "Created OpenTelemetry configuration directory" +fi + +# Generate Base64 auth string +BASE64_AUTH=$(echo -n "${OTEL_USERNAME}:${OTEL_PASSWORD}" | base64) + +# Create OpenTelemetry Collector configuration +cat > "$OTEL_CONFIG_DIR/otel-collector-config.yaml" << EOF +receivers: + prometheus: + config: + scrape_configs: + - job_name: 'node' + scrape_interval: 10s + static_configs: + - targets: ['localhost:9100'] # Node Exporter endpoint + relabel_configs: + - source_labels: [__address__] + regex: '.*' + target_label: openfront.host + replacement: "\${HOSTNAME}" + +processors: + batch: + # Batch metrics before sending + timeout: 10s + send_batch_size: 1000 + +exporters: + otlphttp: + endpoint: "${OTEL_ENDPOINT}" + headers: + Authorization: "Basic ${BASE64_AUTH}" + tls: + insecure: true # Set to false in production with proper certs + +service: + pipelines: + metrics: + receivers: [prometheus] + processors: [batch] + exporters: [otlphttp] +EOF + +# Set ownership of all files +chmod 600 "$OTEL_CONFIG_DIR/otel-collector-config.yaml" +chown -R openfront:openfront "$OTEL_CONFIG_DIR" + +# Run Node Exporter +echo "🚀 Starting Node Exporter..." +docker pull prom/node-exporter:latest +docker rm -f node-exporter 2>/dev/null || true +docker run -d \ + --name=node-exporter \ + --restart=unless-stopped \ + --net="host" \ + --pid="host" \ + -v "/:/host:ro,rslave" \ + prom/node-exporter:latest \ + --path.rootfs=/host + +# Run OpenTelemetry Collector +echo "🚀 Starting OpenTelemetry Collector..." +docker pull otel/opentelemetry-collector-contrib:latest +docker rm -f otel-collector 2>/dev/null || true +# Run OpenTelemetry Collector with appropriate permissions +# Run OpenTelemetry Collector +echo "🚀 Starting OpenTelemetry Collector..." +docker pull otel/opentelemetry-collector-contrib:latest +docker rm -f otel-collector 2>/dev/null || true + +docker run -d \ + --name=otel-collector \ + --restart=unless-stopped \ + --network=host \ + --user=0 \ + -v "$OTEL_CONFIG_DIR/otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml:ro" \ + -e OTEL_ENDPOINT="${OTEL_ENDPOINT}" \ + otel/opentelemetry-collector-contrib:latest + +# Check if containers are running +if docker ps | grep -q node-exporter && docker ps | grep -q otel-collector; then + echo "✅ Node Exporter and OpenTelemetry Collector started successfully!" +else + echo "❌ Failed to start containers. Check logs with: docker logs node-exporter or docker logs otel-collector" + exit 1 +fi + echo "=====================================================" echo "🎉 SETUP COMPLETE!" echo "=====================================================" echo "The openfront user has been set up and has Docker permissions." echo "UDP buffer sizes have been configured for optimal QUIC/WebSocket performance." -echo "You can now deploy using the openfront user." +echo "Node Exporter is collecting system metrics." +echo "OpenTelemetry Collector is forwarding metrics to your endpoint." +echo "" +echo "📝 Configuration:" +echo " - Config Directory: $OTEL_CONFIG_DIR" +echo " - OpenTelemetry Endpoint: $OTEL_ENDPOINT" +echo " - Username: $OTEL_USERNAME" echo "=====================================================" \ No newline at end of file