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}")"