infrapuzzle/k8s/monitoring/scripts/discover-influxdb.sh

98 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# discover-influxdb.sh — Query InfluxDB to discover measurements, fields, and tags
# Usage: ./discover-influxdb.sh [namespace]
# Requires: kubectl, curl, jq
set -euo pipefail
NAMESPACE="${1:-influxdb}"
INFLUXDB_TOKEN="enaiY9yaiWi6ahv0phoph3FaiphoGh"
INFLUXDB_ORG="influxdata"
INFLUXDB_BUCKET="default"
LOCAL_PORT="8086"
echo "=== InfluxDB Discovery ==="
echo "Namespace: $NAMESPACE"
echo ""
# Start port-forward in background
echo "→ Starting port-forward to influxdb-influxdb2..."
kubectl -n "$NAMESPACE" port-forward "svc/influxdb-influxdb2" "$LOCAL_PORT:80" &>/dev/null &
PF_PID=$!
sleep 2
# Ensure cleanup on exit
cleanup() {
kill "$PF_PID" 2>/dev/null || true
}
trap cleanup EXIT
API="http://localhost:$LOCAL_PORT/api/v2/query?org=$INFLUXDB_ORG"
AUTH="Authorization: Token $INFLUXDB_TOKEN"
CT="Content-Type: application/vnd.flux"
echo ""
echo "=== Measurements (tables) in bucket '$INFLUXDB_BUCKET' ==="
curl -s "$API" -H "$AUTH" -H "$CT" \
-d "import \"influxdata/influxdb/schema\"
schema.measurements(bucket: \"$INFLUXDB_BUCKET\")" \
| jq -r '.[] | ._value' 2>/dev/null || echo "(no results or parse error)"
echo ""
echo "=== Measurements with data in last 6 months ==="
curl -s "$API" -H "$AUTH" -H "$CT" \
-d "from(bucket: \"$INFLUXDB_BUCKET\")
|> range(start: -6mo)
|> keep(columns: [\"_measurement\"])
|> distinct()
|> sort()" \
| jq -r '.[] | ._value' 2>/dev/null || echo "(no results or parse error)"
echo ""
echo "=== For each measurement: fields, tags, and sample count ==="
# Get measurements
MEASUREMENTS=$(curl -s "$API" -H "$AUTH" -H "$CT" \
-d "import \"influxdata/influxdb/schema\"
schema.measurements(bucket: \"$INFLUXDB_BUCKET\")" \
| jq -r '.[] | ._value' 2>/dev/null)
for m in $MEASUREMENTS; do
echo ""
echo "--- Measurement: $m ---"
# Fields
echo " Fields:"
curl -s "$API" -H "$AUTH" -H "$CT" \
-d "import \"influxdata/influxdb/schema\"
schema.measurementFieldKeys(bucket: \"$INFLUXDB_BUCKET\", measurement: \"$m\")" \
| jq -r '.[] | " - \(._value)"' 2>/dev/null || echo " (none)"
# Tags
echo " Tags:"
curl -s "$API" -H "$AUTH" -H "$CT" \
-d "import \"influxdata/influxdb/schema\"
schema.measurementTagKeys(bucket: \"$INFLUXDB_BUCKET\", measurement: \"$m\")" \
| jq -r '.[] | " - \(._value)"' 2>/dev/null || echo " (none)"
# Tag values for entity_id (most common tag in HA data)
echo " entity_id values (sample):"
curl -s "$API" -H "$AUTH" -H "$CT" \
-d "import \"influxdata/influxdb/schema\"
schema.tagValues(bucket: \"$INFLUXDB_BUCKET\", tag: \"entity_id\")
|> filter(fn: (r) => r._measurement == \"$m\")
|> limit(n: 20)" \
| jq -r '.[] | " - \(._value)"' 2>/dev/null || echo " (none)"
# Sample count in last 6 months
echo " Data points (last 6 months):"
curl -s "$API" -H "$AUTH" -H "$CT" \
-d "from(bucket: \"$INFLUXDB_BUCKET\")
|> range(start: -6mo)
|> filter(fn: (r) => r._measurement == \"$m\")
|> count()" \
| jq -r '.[] | " - \(._value)"' 2>/dev/null || echo " (none)"
done
echo ""
echo "=== Discovery complete ==="