#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck disable=SC1091 . "${SCRIPT_DIR}/../lib/common.sh" common::ensure_bash "$@" ROOT="$(common::repo_root)" usage() { cat <<'USAGE' Usage: scripts/setup/setup-observability.sh compose up|down|logs|env scripts/setup/setup-observability.sh k8s install|uninstall|env Compose: - Runs Prometheus and Grafana via docker compose. - Prints LOGOS_BLOCKCHAIN_METRICS_* / LOGOS_BLOCKCHAIN_GRAFANA_URL exports to wire into runs. Kubernetes: - Installs prometheus-community/kube-prometheus-stack into namespace "logos-observability". - Prints port-forward commands + LOGOS_BLOCKCHAIN_METRICS_* / LOGOS_BLOCKCHAIN_GRAFANA_URL exports. USAGE } require_cmd() { command -v "$1" >/dev/null 2>&1 || common::die "Missing required command: $1" } compose_file() { echo "${ROOT}/scripts/observability/compose/docker-compose.yml" } compose_run() { local file file="$(compose_file)" common::require_file "${file}" docker compose -f "${file}" "$@" } compose_env() { cat <<'EOF' export LOGOS_BLOCKCHAIN_METRICS_QUERY_URL=http://localhost:9090 export LOGOS_BLOCKCHAIN_METRICS_OTLP_INGEST_URL=http://host.docker.internal:9090/api/v1/otlp/v1/metrics export LOGOS_BLOCKCHAIN_GRAFANA_URL=http://localhost:3000 EOF } k8s_namespace() { echo "${LOGOS_OBSERVABILITY_NAMESPACE:-${LOGOS_BLOCKCHAIN_OBSERVABILITY_NAMESPACE:-logos-observability}}"; } k8s_release() { echo "${LOGOS_OBSERVABILITY_RELEASE:-${LOGOS_BLOCKCHAIN_OBSERVABILITY_RELEASE:-logos-observability}}"; } k8s_values() { echo "${ROOT}/scripts/observability/k8s/kube-prometheus-stack.values.yaml"; } k8s_install() { require_cmd kubectl require_cmd helm local ns release values ns="$(k8s_namespace)" release="$(k8s_release)" values="$(k8s_values)" common::require_file "${values}" kubectl get ns "${ns}" >/dev/null 2>&1 || kubectl create ns "${ns}" if ! helm repo list | grep -q '^prometheus-community[[:space:]]'; then helm repo add prometheus-community https://prometheus-community.github.io/helm-charts fi helm repo update prometheus-community helm upgrade --install "${release}" prometheus-community/kube-prometheus-stack \ -n "${ns}" \ -f "${values}" kubectl -n "${ns}" wait --for=condition=Available deploy -l "release=${release}" --timeout=10m || true kubectl -n "${ns}" wait --for=condition=Ready pod -l "release=${release}" --timeout=10m || true } k8s_uninstall() { require_cmd kubectl require_cmd helm local ns release ns="$(k8s_namespace)" release="$(k8s_release)" helm uninstall "${release}" -n "${ns}" 2>/dev/null || true kubectl delete ns "${ns}" --ignore-not-found } k8s_env() { local ns release ns="$(k8s_namespace)" release="$(k8s_release)" cat <