Как включить Ruby Language Runtime Metrics для контейнерных приложений (стек: контейнер) в Heroku - PullRequest
0 голосов
/ 16 апреля 2020

Мы используем Heroku для размещения некоторых наших приложений, и нам хотелось бы иметь метрики языковой среды выполнения, которые они предоставляют в своей панели метрик для каждого приложения.

Я сделал все в соответствии с языком Ruby Метрика " Getting Started ", но метрики не отображаются.

Мои приложения находятся в stack: container вместо heroku-18 или heroku-16 стеков.

Они говорят:

Этот процесс не работает с контейнером на основе -приложения, потому что они не используют buildpacks. В настоящее время контейнерные приложения не поддерживаются в этой бета-версии.

Есть ли способ заставить его работать?

1 Ответ

1 голос
/ 16 апреля 2020

После разговора с поддержкой Heroku мы нашли способ заставить его работать. Мы используем изображение Alpine docker:

  1. Мы добавили bash и curl в наш Dockerfile (apk add bash curl)
  2. Мы скопировали heroku-metrics-daemon.sh до /etc/profile.d/ для запуска в качестве скрипта profile.d при загрузке Heroku dyno.
  3. Нам нужно было отредактировать файл .sh:
    1. Мы удалили --warning=no-unknown-keyword флаг из команды tar. По-видимому, это не совместимо с Alpine tar, только GNU tar. Вы также можете добавить GNU tar к своему изображению.
    2. У нас были проблемы с синтаксическим анализом / синтаксисом массива в сценарии, даже с установленным bash и #!/bin/bash, поэтому мы удалили опцию использования AGENTMON_DEBUG из сценария.

Окончательный сценарий:

#!/bin/bash

# From: https://github.com/heroku/heroku-buildpack-metrics/blob/master/.profile.d/heroku-metrics-daemon.sh
setup_metrics() {
    # don't do anything if we don't have a metrics url.
    if [[ -z "$HEROKU_METRICS_URL" ]] || [[ "${DYNO}" = run\.* ]]; then
        return 0
    fi

    STARTTIME=$(date +%s)
    BUILD_DIR=/tmp

    DOWNLOAD_URL=$(curl --retry 3 -s https://agentmon-releases.s3.amazonaws.com/latest)
    if [ -z "${DOWNLOAD_URL}" ]; then
        echo "!!!!! Failed to find latest agentmon. Please report this as a bug. Metrics collection will be disabled this run."
        return 1
    fi

    BASENAME=$(basename "${DOWNLOAD_URL}")

    curl -L --retry 3 -s -o "${BUILD_DIR}/${BASENAME}" "${DOWNLOAD_URL}"

    # Ensure the bin folder exists, if not already.
    mkdir -p "${BUILD_DIR}/bin"

    # Extract agentmon release
    # tar --warning=no-unknown-keyword -C "${BUILD_DIR}/bin" -zxf "${BUILD_DIR}/${BASENAME}"
    tar -C "${BUILD_DIR}/bin" -zxf "${BUILD_DIR}/${BASENAME}"
    chmod +x "${BUILD_DIR}/bin/agentmon"

    ELAPSEDTIME=$(($(date +%s) - STARTTIME))
    echo "agentmon setup took ${ELAPSEDTIME} seconds"

    # AGENTMON_FLAGS=("-statsd-addr=:${PORT}")
    AGENTMON_FLAG="-statsd-addr=:${PORT}"


    # if [[ "${AGENTMON_DEBUG}" = "true" ]]; then
    #     AGENTMON_FLAGS+=("-debug")
    # fi

    if [[ -x "${BUILD_DIR}/bin/agentmon" ]]; then
        (while true; do
            # ${BUILD_DIR}/bin/agentmon "${AGENTMON_FLAGS[@]}" "${HEROKU_METRICS_URL}"
            ${BUILD_DIR}/bin/agentmon "${AGENTMON_FLAG}" "${HEROKU_METRICS_URL}"
            echo "agentmon completed with status=${?}. Restarting"
            sleep 1
        done) &
    else
        echo "No agentmon executable found. Not starting."
    fi
}
setup_metrics
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...