mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 09:20:47 +00:00
03f7bade7f
## Description: Update deployment: 1. automatically create and configure CF tunnels and point it to subdomain.domain 2. Send loki logs to remote endpoint 3. create metric-exporter.sh to push prom metrics to remote endpoint 4. update and refactor deployment & env variables ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced - [x] I understand that submitting code with bugs that could have been caught through manual testing blocks releases and new features for all contributors ## Please put your Discord username so you can be contacted if a bug or regression is found: <DISCORD USERNAME> --------- Co-authored-by: Evan Pellegrini <evan@Evans-Air.attlocal.net> Co-authored-by: evan <openfrontio@gmail.com>
103 lines
3.0 KiB
Bash
Executable File
103 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Metric Collector for Prometheus Pushgateway
|
|
# This script collects metrics from Node Exporter and application sources
|
|
# and pushes them to a Prometheus Pushgateway with custom labels.
|
|
|
|
# Configuration
|
|
NODE_EXPORTER_URL="http://localhost:9100/metrics"
|
|
APP_METRICS_URL="http://localhost:9090/metrics"
|
|
PUSHGATEWAY_BASE_URL="https://mon.openfront.io/pushgateway/metrics"
|
|
AUTH=$MON_USERNAME:$MON_PASSWORD
|
|
INTERVAL=15 # seconds
|
|
|
|
# Function to fetch metrics from Node Exporter
|
|
fetch_node_exporter_metrics() {
|
|
curl -s --connect-timeout 5 --max-time 10 "$NODE_EXPORTER_URL" ||
|
|
echo "# Error fetching Node Exporter metrics"
|
|
}
|
|
|
|
# Function to fetch metrics from your application
|
|
fetch_app_metrics() {
|
|
curl -s --connect-timeout 5 --max-time 10 "$APP_METRICS_URL" ||
|
|
echo "# Error fetching application metrics"
|
|
}
|
|
|
|
# Function to push metrics to Pushgateway
|
|
push_metrics() {
|
|
local metrics=$1
|
|
local job_name=$2
|
|
|
|
echo "Pushing $job_name metrics to Pushgateway..."
|
|
|
|
# Create a temporary file for the metrics
|
|
TEMP_FILE=$(mktemp)
|
|
echo "$metrics" > "$TEMP_FILE"
|
|
|
|
# Push to Pushgateway with instance label
|
|
curl -s -u "$AUTH" --data-binary @"$TEMP_FILE" \
|
|
"$PUSHGATEWAY_BASE_URL/job/$job_name/instance/$HOST"
|
|
|
|
# Check if push was successful
|
|
if [ $? -eq 0 ]; then
|
|
echo "$job_name metrics pushed successfully"
|
|
else
|
|
echo "Error pushing $job_name metrics"
|
|
fi
|
|
|
|
# Remove temporary file
|
|
rm "$TEMP_FILE"
|
|
}
|
|
|
|
# Function to add labels to metrics
|
|
add_labels() {
|
|
local metrics=$1
|
|
|
|
# First, handle metrics with existing labels
|
|
metrics=$(echo "$metrics" | sed -E 's/(\{[^}]*)\}/\1,env="'$ENV'",host="'$HOST'",subdomain="'$SUBDOMAIN'"}/g')
|
|
|
|
# Then, handle metrics with no existing labels
|
|
metrics=$(echo "$metrics" | sed -E 's/^([a-zA-Z0-9_:]+)[ \t]+([0-9.e+-]+)$/\1{env="'$ENV'",host="'$HOST'",subdomain="'$SUBDOMAIN'"} \2/g')
|
|
|
|
echo "$metrics"
|
|
}
|
|
|
|
# Main function to collect and push metrics
|
|
collect_and_push_metrics() {
|
|
echo "Starting metrics collection cycle at $(date)"
|
|
|
|
# Get metrics from both sources
|
|
NODE_METRICS=$(fetch_node_exporter_metrics)
|
|
APP_METRICS=$(fetch_app_metrics)
|
|
|
|
# Clean up metrics (remove headers etc.)
|
|
NODE_METRICS=$(echo "$NODE_METRICS" | grep -v "^Fetching")
|
|
APP_METRICS=$(echo "$APP_METRICS" | grep -v "^Fetching")
|
|
|
|
# Add labels to metrics
|
|
NODE_METRICS=$(add_labels "$NODE_METRICS")
|
|
APP_METRICS=$(add_labels "$APP_METRICS")
|
|
|
|
# Push to Pushgateway separately
|
|
push_metrics "$NODE_METRICS" "node_exporter"
|
|
push_metrics "$APP_METRICS" "app_metrics"
|
|
|
|
echo "Metrics collection cycle completed at $(date)"
|
|
}
|
|
|
|
# Main execution
|
|
echo "===== Starting metrics collector ====="
|
|
echo "Environment: $ENV, HOST: $HOST, Subdomain: $SUBDOMAIN"
|
|
echo "Collecting and pushing metrics every $INTERVAL seconds"
|
|
echo "Node Exporter URL: $NODE_EXPORTER_URL"
|
|
echo "App Metrics URL: $APP_METRICS_URL"
|
|
echo "Pushgateway URL: $PUSHGATEWAY_BASE_URL"
|
|
|
|
# Wait for app to be ready.
|
|
sleep 30
|
|
|
|
# Then set up interval loop
|
|
while true; do
|
|
sleep $INTERVAL
|
|
collect_and_push_metrics
|
|
done |