github.com/MetalBlockchain/metalgo@v1.11.9/scripts/run_promtail.sh (about) 1 #!/usr/bin/env bash 2 3 set -euo pipefail 4 5 # Starts a promtail instance to collect logs from temporary networks 6 # running locally and in CI. 7 # 8 # The promtail instance will remain running in the background and will forward 9 # logs to the central instance for all tmpnet networks. 10 # 11 # To stop it: 12 # 13 # $ kill -9 `cat ~/.tmpnet/promtail/run.pid` && rm ~/.tmpnet/promtail/run.pid 14 # 15 16 # e.g., 17 # LOKI_ID=<id> LOKI_PASSWORD=<password> ./scripts/run_promtail.sh 18 if ! [[ "$0" =~ scripts/run_promtail.sh ]]; then 19 echo "must be run from repository root" 20 exit 255 21 fi 22 23 PROMTAIL_WORKING_DIR="${HOME}/.tmpnet/promtail" 24 PIDFILE="${PROMTAIL_WORKING_DIR}"/run.pid 25 26 # First check if promtail is already running. A single instance can 27 # collect logs from all local temporary networks. 28 if pgrep --pidfile="${PIDFILE}" &> /dev/null; then 29 echo "promtail is already running" 30 exit 0 31 fi 32 33 LOKI_URL="${LOKI_URL:-https://loki-experimental.avax-dev.network}" 34 if [[ -z "${LOKI_URL}" ]]; then 35 echo "Please provide a value for LOKI_URL" 36 exit 1 37 fi 38 39 LOKI_ID="${LOKI_ID:-}" 40 if [[ -z "${LOKI_ID}" ]]; then 41 echo "Please provide a value for LOKI_ID" 42 exit 1 43 fi 44 45 LOKI_PASSWORD="${LOKI_PASSWORD:-}" 46 if [[ -z "${LOKI_PASSWORD}" ]]; then 47 echo "Plase provide a value for LOKI_PASSWORD" 48 exit 1 49 fi 50 51 # Version as of this writing 52 VERSION="v2.9.5" 53 54 # Ensure the promtail command is locally available 55 CMD=promtail 56 if ! command -v "${CMD}" &> /dev/null; then 57 # Try to use a local version 58 CMD="${PWD}/bin/promtail" 59 if ! command -v "${CMD}" &> /dev/null; then 60 echo "promtail not found, attempting to install..." 61 # Determine the arch 62 if which sw_vers &> /dev/null; then 63 DIST="darwin-$(uname -m)" 64 else 65 ARCH="$(uname -i)" 66 if [[ "${ARCH}" == "aarch64" ]]; then 67 ARCH="arm64" 68 elif [[ "${ARCH}" == "x86_64" ]]; then 69 ARCH="amd64" 70 fi 71 DIST="linux-${ARCH}" 72 fi 73 74 # Install the specified release 75 PROMTAIL_FILE="promtail-${DIST}" 76 ZIP_PATH="/tmp/${PROMTAIL_FILE}.zip" 77 BIN_DIR="$(dirname "${CMD}")" 78 URL="https://github.com/grafana/loki/releases/download/${VERSION}/promtail-${DIST}.zip" 79 curl -L -o "${ZIP_PATH}" "${URL}" 80 unzip "${ZIP_PATH}" -d "${BIN_DIR}" 81 mv "${BIN_DIR}/${PROMTAIL_FILE}" "${CMD}" 82 fi 83 fi 84 85 # Configure promtail 86 FILE_SD_PATH="${PROMTAIL_WORKING_DIR}/file_sd_configs" 87 mkdir -p "${FILE_SD_PATH}" 88 89 echo "writing configuration..." 90 cat >"${PROMTAIL_WORKING_DIR}"/promtail.yaml <<EOL 91 server: 92 http_listen_port: 0 93 grpc_listen_port: 0 94 95 positions: 96 filename: "${PROMTAIL_WORKING_DIR}/positions.yaml" 97 98 client: 99 url: "${LOKI_URL}/api/prom/push" 100 basic_auth: 101 username: "${LOKI_ID}" 102 password: "${LOKI_PASSWORD}" 103 104 scrape_configs: 105 - job_name: "avalanchego" 106 file_sd_configs: 107 - files: 108 - '${FILE_SD_PATH}/*.json' 109 EOL 110 111 echo "starting promtail..." 112 cd "${PROMTAIL_WORKING_DIR}" 113 nohup "${CMD}" -config.file=promtail.yaml > promtail.log 2>&1 & 114 echo $! > "${PIDFILE}" 115 echo "running with pid $(cat "${PIDFILE}")"