feat: expand otel export architectures and versions (#3066)
This commit is contained in:
@@ -1,16 +1,132 @@
|
||||
#!/bin/bash
|
||||
set -e # Exit on any error
|
||||
|
||||
# Create bin directory if it doesn't exist
|
||||
mkdir -p bin
|
||||
# Configuration
|
||||
OTEL_VERSION="0.96.0"
|
||||
INSTALL_DIR="bin"
|
||||
BINARY_NAME="otelcol-contrib"
|
||||
GRAFANA_URL="https://letta.grafana.net/d/dc738af7-6c30-4b42-aef2-f967d65638af/letta-dev-traces?orgId=1"
|
||||
|
||||
# Download and extract collector if not already present
|
||||
if [ ! -f "bin/otelcol-contrib" ]; then
|
||||
echo "Downloading OpenTelemetry Collector..."
|
||||
curl -L https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.96.0/otelcol-contrib_0.96.0_darwin_amd64.tar.gz -o otelcol.tar.gz
|
||||
tar xzf otelcol.tar.gz -C bin/
|
||||
rm otelcol.tar.gz
|
||||
chmod +x bin/otelcol-contrib
|
||||
# Function to detect OS and architecture
|
||||
detect_platform() {
|
||||
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
||||
ARCH=$(uname -m)
|
||||
|
||||
# Map OS names
|
||||
case "$OS" in
|
||||
darwin*)
|
||||
OS="darwin"
|
||||
;;
|
||||
linux*)
|
||||
OS="linux"
|
||||
;;
|
||||
mingw*|msys*|cygwin*)
|
||||
echo "Error: Windows is not supported by this script"
|
||||
echo "For supporting other operating systems, please open a Github pull request or issue."
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported operating system: $OS"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Map architecture names
|
||||
case "$ARCH" in
|
||||
x86_64|amd64)
|
||||
ARCH="amd64"
|
||||
;;
|
||||
aarch64|arm64)
|
||||
ARCH="arm64"
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported architecture: $ARCH"
|
||||
echo "Supported architectures: amd64 (x86_64), arm64 (aarch64)"
|
||||
echo "For supporting other architectures, please open a Github pull request or issue."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "${OS}_${ARCH}"
|
||||
}
|
||||
|
||||
# Function to get current installed version
|
||||
get_installed_version() {
|
||||
if [ -f "$INSTALL_DIR/$BINARY_NAME" ]; then
|
||||
# Try to get version from binary
|
||||
VERSION_OUTPUT=$("$INSTALL_DIR/$BINARY_NAME" --version 2>/dev/null | head -n1)
|
||||
if [[ $VERSION_OUTPUT =~ ([0-9]+\.[0-9]+\.[0-9]+) ]]; then
|
||||
echo "${BASH_REMATCH[1]}"
|
||||
else
|
||||
echo "unknown"
|
||||
fi
|
||||
else
|
||||
echo "none"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to check if update is needed
|
||||
needs_update() {
|
||||
INSTALLED_VERSION=$(get_installed_version)
|
||||
|
||||
if [ "$INSTALLED_VERSION" = "none" ]; then
|
||||
return 0 # Not installed, needs download
|
||||
elif [ "$INSTALLED_VERSION" = "unknown" ]; then
|
||||
echo "Warning: Cannot determine installed version. Reinstalling..."
|
||||
return 0 # Can't determine version, reinstall
|
||||
elif [ "$INSTALLED_VERSION" != "$OTEL_VERSION" ]; then
|
||||
echo "Update available: $INSTALLED_VERSION -> $OTEL_VERSION"
|
||||
return 0 # Different version, needs update
|
||||
else
|
||||
echo "OpenTelemetry Collector v$OTEL_VERSION is already installed and up to date."
|
||||
return 1 # Same version, no update needed
|
||||
fi
|
||||
}
|
||||
|
||||
# Main script
|
||||
echo "Checking OpenTelemetry Collector installation..."
|
||||
|
||||
# Create bin directory if it doesn't exist
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
|
||||
# Check if update is needed
|
||||
if needs_update; then
|
||||
# Detect platform
|
||||
PLATFORM=$(detect_platform)
|
||||
echo "Detected platform: $PLATFORM"
|
||||
|
||||
# Construct download URL
|
||||
DOWNLOAD_URL="https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v${OTEL_VERSION}/otelcol-contrib_${OTEL_VERSION}_${PLATFORM}.tar.gz"
|
||||
ARCHIVE_NAME="otelcol.tar.gz"
|
||||
|
||||
echo "Downloading OpenTelemetry Collector v$OTEL_VERSION..."
|
||||
echo "URL: $DOWNLOAD_URL"
|
||||
|
||||
# Download with error handling
|
||||
if ! curl -L "$DOWNLOAD_URL" -o "$ARCHIVE_NAME"; then
|
||||
echo "Error: Failed to download OpenTelemetry Collector"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract archive
|
||||
echo "Extracting..."
|
||||
tar xzf "$ARCHIVE_NAME" -C "$INSTALL_DIR/"
|
||||
|
||||
# Clean up
|
||||
rm "$ARCHIVE_NAME"
|
||||
|
||||
# Make executable
|
||||
chmod +x "$INSTALL_DIR/$BINARY_NAME"
|
||||
|
||||
echo "OpenTelemetry Collector v$OTEL_VERSION installed successfully!"
|
||||
|
||||
# Verify installation
|
||||
if [ -f "$INSTALL_DIR/$BINARY_NAME" ]; then
|
||||
echo "Binary location: $INSTALL_DIR/$BINARY_NAME"
|
||||
"$INSTALL_DIR/$BINARY_NAME" --version 2>/dev/null | head -n1 || echo "Note: Could not verify version"
|
||||
fi
|
||||
else
|
||||
echo "Skipping download - already up to date."
|
||||
fi
|
||||
|
||||
# Start OpenTelemetry Collector
|
||||
@@ -23,7 +139,7 @@ else
|
||||
fi
|
||||
|
||||
device_id=$(python3 -c 'import uuid; print(uuid.getnode())')
|
||||
echo "View traces at https://letta.grafana.net/d/dc738af7-6c30-4b42-aef2-f967d65638af/letta-dev-traces?orgId=1&var-deviceid=$device_id"
|
||||
echo "View traces at $GRAFANA_URL&var-deviceid=$device_id"
|
||||
|
||||
# Run collector
|
||||
exec ./bin/otelcol-contrib --config "$CONFIG_FILE"
|
||||
|
||||
Reference in New Issue
Block a user