Установка агента на Linux

Обновлено 20.10.2026
Установка, настройка, обновление и удаление агента ProtoOBP на Linux, в том числе на системах без systemd.

На этой странице:

Установка

Агент работает на всех основных DEB/RPM дистрибутивах ОС Linux. Подробнее

  1. Скачайте и установите пакет с агентом для вашей ОС

    Выберите версию агента. Актуальная версия — 7.80.2.

    DEB-based (Ubuntu, Debian, Astra Linux и т.д.):

    curl --header "PRIVATE-TOKEN:<your_token>"  "https://git.proto.group/api/v4/projects/100/packages/generic/protoobp-agent/7.80.2/protoobp-agent_7.80.2-1_amd64.deb" --output protoobp-agent_7.80.2-1_amd64.deb
    apt install ./protoobp-agent_7.80.2-1_amd64.deb
    

    RPM-based (CentOS, Alt Linux, Rosa Linux, РЕД ОС и т.д.):

    curl --header "PRIVATE-TOKEN:<your_token>"  "https://git.proto.group/api/v4/projects/100/packages/generic/protoobp-agent/7.80.2/protoobp-agent-7.80.2-1.x86_64.rpm" --output protoobp-agent-7.80.2-1.x86_64.rpm
    rpm -ivh protoobp-agent-7.80.2-1.x86_64.rpm
    

    Значение <your_token> берётся из лицензионного сертификата, полученного ранее от вендора, из раздела «Учетные данные → Пароль».

    В случае появления ошибки на Альт или Роса Линукс:

    ошибка: Неудовлетворенные зависимости: glibc-common нужен для protoobp-agent-1:7.80.2-1.x86_64

    установку агента необходимо выполнить следующей командой:

    rpm -ivh --nodeps protoobp-agent-7.80.2-1.x86_64.rpm
    

    DEB-based (Ubuntu, Debian, Astra Linux и т.д.):

    curl --header "PRIVATE-TOKEN:<your_token>"  "https://git.proto.group/api/v4/projects/125/packages/generic/protoobp-agent/7.40.2/protoobp-agent_7.40.2_amd64.deb" --output protoobp-agent_7.40.2_amd64.deb
    apt install ./protoobp-agent_7.40.2_amd64.deb
    

    RPM-based (CentOS, Alt Linux, Rosa Linux, РЕД ОС и т.д.):

    curl --header "PRIVATE-TOKEN:<your_token>"  "https://git.proto.group/api/v4/projects/125/packages/generic/protoobp-agent/7.40.2/protoobp-agent_7.40.2_amd64.rpm" --output protoobp-agent_7.40.2_amd64.rpm
    rpm -ivh protoobp-agent_7.40.2_amd64.rpm
    

    Значение <your_token> берётся из лицензионного сертификата, полученного ранее от вендора, из раздела «Учетные данные → Пароль».

    В случае появления ошибки на Альт или Роса Линукс:

    ошибка: Неудовлетворенные зависимости: glibc-common нужен для protoobp-agent-1:7.40.2-1.x86_64

    установку агента необходимо выполнить следующей командой:

    rpm -ivh --nodeps protoobp-agent_7.40.2_amd64.rpm
    
  2. Убедитесь что агент корректно установлен, выполнив:

    protoobp-agent version
    

    Результат выполнения команды (значение Commit приведено для примера и зависит от сборки):

    Agent 7.80.2 - Commit: 39e8d835 - Serialization version: v5.0.196 - Go version: go1.25.12
    

Конфигурация

  1. По умолчанию файл конфигурации агента расположен в каталоге /etc/protoobp-agent/

  2. Создайте файл protoobp.yaml:

    vim /etc/protoobp-agent/protoobp.yaml
    

    и укажите в нем следующее:

    api_key: my_api_key
    pobp_url: http://protoobp-backend        # используйте httpS только если на сервере ProtoOBP Backend подключен доверенный сертификат
    apm_config:
      apm_non_local_traffic: true
      apm_pobp_url: http://protoobp-backend  # используйте httpS только если на сервере ProtoOBP Backend подключен доверенный сертификат
      telemetry:
        enabled: false
    agent_telemetry:
      enabled: false       
    process_config:
      enabled: false
      process_collection:
        enabled: false
      container_collection:
        enabled: false
      process_discovery:
        enabled: false
    

    Где,

    • api_key - ваш токен из лицензионного сертификата
    • pobp_url - адрес ProtoOBP Backend сервера
    • apm_pobp_url - адрес ProtoOBP Backend сервера

    Полный пример конфигурации, можно посмотреть в файле protoobp.yaml.example

  3. Если на хосте запускаются Docker контейнеры, то необходимо добавить пользователя pobp-agent в группу Docker, чтобы агент мог собирать метрики по работе контейнеров, в дополнение к метрикам самого хоста:

    usermod -a -G docker pobp-agent
    
  4. Если на хосте запускаются Docker контейнеры с приложениями, в которые будут добавлены трейсеры:

    1. При конфигурации трейсера для Docker контейнера с приложением, отсылающим трейсы в Агента, установленного на хосте (не в контейнере):
      POBP_AGENT_HOST=host.docker.internal
      
    2. При запуске контейнера с приложением добавьте опцию extra_hosts в ваш docker-compose.yaml файл:
      extra_hosts:                            
        - "host.docker.internal:host-gateway"
      
      host-gateway – это специальная строка-шаблон, появившаяся в Docker 20.10.0+, ее значение при использовании в extra_hosts будет соответствовать IP адресу машины. Таким образом, по имени host.docker.internal будет доступен IP адрес машины.
  5. Запустите агента, выполнив:

    systemctl start protoobp-agent
    

    При успешной настройке агента вы сможете увидеть новый хост в разделе Инфраструктура > Хосты в течение одной-двух минут.

Обновление

Обновление выполняется установкой пакета новой версии поверх старой — удалять предыдущую версию не нужно. Файл /etc/protoobp-agent/protoobp.yaml и содержимое conf.d/ при обновлении сохраняются, служба перезапускается автоматически.

Пример обновления с 7.40.2 на 7.80.2:

DEB-based (Ubuntu, Debian, Astra Linux и т.д.):

curl --header "PRIVATE-TOKEN:<your_token>"  "https://git.proto.group/api/v4/projects/100/packages/generic/protoobp-agent/7.80.2/protoobp-agent_7.80.2-1_amd64.deb" --output protoobp-agent_7.80.2-1_amd64.deb
apt install ./protoobp-agent_7.80.2-1_amd64.deb

RPM-based (CentOS, Alt Linux, Rosa Linux, РЕД ОС и т.д.):

curl --header "PRIVATE-TOKEN:<your_token>"  "https://git.proto.group/api/v4/projects/100/packages/generic/protoobp-agent/7.80.2/protoobp-agent-7.80.2-1.x86_64.rpm" --output protoobp-agent-7.80.2-1.x86_64.rpm
rpm -Uvh protoobp-agent-7.80.2-1.x86_64.rpm

Для RPM используется именно rpm -Uvh (upgrade), а не rpm -ivh (install): -ivh на уже установленном агенте завершится ошибкой «package is already installed». Если на Альт или Роса Линукс возникает ошибка о неудовлетворённых зависимостях glibc-common, добавьте --nodeps: rpm -Uvh --nodeps protoobp-agent-7.80.2-1.x86_64.rpm.

Проверьте результат обновления:

protoobp-agent version
systemctl status protoobp-agent
sudo protoobp-agent status

Удаление

Возможны два сценария: удаление агента с сохранением конфигурации (например, перед переустановкой) и полное удаление вместе с настройками и логами.

DEB-based (Ubuntu, Debian, Astra Linux и т.д.):

# удалить агента, сохранив /etc/protoobp-agent (конфигурацию и conf.d)
sudo apt remove protoobp-agent

# полное удаление: пакет, конфигурация, логи, служебный пользователь pobp-agent
sudo apt purge protoobp-agent

RPM-based (CentOS, Alt Linux, Rosa Linux, РЕД ОС и т.д.):

sudo rpm -e protoobp-agent

Что удаляется в каждом случае:

Объектapt remove / rpm -eapt purge
Пакет и файлы в /opt/protoobp-agentудаляютсяудаляются
systemd-юниты protoobp-agent*.serviceудаляютсяудаляются
Конфигурация /etc/protoobp-agent/сохраняетсяудаляется
Логи /var/log/protoobp/сохраняютсяудаляются
Служебный пользователь pobp-agentсохраняетсяудаляется

Если после rpm -e или apt remove требуется полностью очистить систему, удалите оставшиеся каталоги и учётную запись вручную:

sudo rm -rf /etc/protoobp-agent /opt/protoobp-agent /var/log/protoobp
sudo userdel pobp-agent

Управление

ProtoOBP Agent запускается как systemd служба - protoobp-agent.

ДействиеКоманда
Запуск агентаsystemctl start protoobp-agent
Остановка агентаsystemctl stop protoobp-agent
Перезапуск службыsystemctl restart protoobp-agent

Ручная настройка systemd-юнитов

Переопределение параметров юнита (drop-in)

Drop-in-файлы лежат в /etc/systemd/system/, установщиком агента не затрагиваются и переживают обновление. Пример — изменить политику перезапуска основного агента:

mkdir -p /etc/systemd/system/protoobp-agent.service.d
cat > /etc/systemd/system/protoobp-agent.service.d/override.conf <<'EOF'
[Service]
Restart=always
RestartSec=10
EOF
systemctl daemon-reload
systemctl restart protoobp-agent

Посмотреть итоговый юнит со всеми применёнными drop-in:

systemctl cat protoobp-agent

Переменные окружения агента

Юниты подключают файл переменных окружения:

EnvironmentFile=-/etc/protoobp-agent/environment

По умолчанию файла нет — при необходимости создайте его. Пример:

cat > /etc/protoobp-agent/environment <<'EOF'
POBP_LOG_LEVEL=debug
EOF
systemctl restart protoobp-agent

Так задаются любые параметры конфигурации в виде переменных POBP_* — альтернатива правке protoobp.yaml. Выполнять daemon-reload не требуется: файл читается при старте службы.

Состав юнитов

ЮнитНазначение
protoobp-agentосновной агент (запускает остальные)
protoobp-agent-tracetrace-агент (APM)
protoobp-agent-processсбор процессов и контейнеров
protoobp-agent-sysprobesystem-probe (сетевые и eBPF-метрики)
protoobp-agent-securitysecurity-агент
protoobp-agent-data-planeagent-data-plane
protoobp-agent-actionprivate action runner
protoobp-agent-ddotOpenTelemetry-коллектор
protoobp-agent-installerслужебный юнит установщика
protoobp-agent-procmgrdменеджер процессов агента

Отдельно запускать дочерние юниты не требуется: основной protoobp-agent объявляет их в Wants= и поднимает вместе с собой.

Управление на системах без systemd

На дистрибутивах без systemd (RHEL 6.x, CentOS 6, старые линейки Alt Linux, Rosa Linux, РЕД ОС и др.) команды systemctl недоступны. Способ управления агентом зависит от типа пакета — DEB и RPM разворачивают разные наборы скриптов запуска.

DEB-пакет (Ubuntu, Debian, Astra Linux и т.д.)

DEB-пакет штатно устанавливает и SysV init-скрипты в /etc/init.d/, и задания upstart в /etc/init/ — писать их вручную не нужно. Какой набор будет задействован, определяет система инициализации дистрибутива.

SysV init-скрипты:

СкриптКомпонент
/etc/init.d/protoobp-agentосновной агент
/etc/init.d/protoobp-agent-tracetrace-агент (APM)
/etc/init.d/protoobp-agent-processprocess-агент
/etc/init.d/protoobp-agent-securitysecurity-агент
/etc/init.d/protoobp-agent-data-planeagent-data-plane
/etc/init.d/protoobp-agent-actionprivate action runner

Управление:

ДействиеКоманда
Запуск агентаservice protoobp-agent start
Остановка агентаservice protoobp-agent stop
Перезапуск агентаservice protoobp-agent restart
Статус агентаservice protoobp-agent status

Скрипт основного агента при старте и остановке сам подтягивает остальные компоненты (trace, process, security и др.), поэтому запускать их по отдельности не требуется. Отключить конкретный компонент можно через /etc/default/<имя_скрипта>.

SysV-скрипты рассчитаны на Debian-совместимое окружение: используют start-stop-daemon и /lib/lsb/init-functions. На RPM-дистрибутивах они неработоспособны.

Если в системе используется upstart, применяются задания из /etc/init/, а управление выполняется через initctl — так же, как описано ниже для RPM.

RPM-пакет (CentOS, Alt Linux, Rosa Linux, РЕД ОС и т.д.)

RPM-пакет SysV init-скрипты не устанавливает — только задания upstart в /etc/init/ (protoobp-agent.conf, protoobp-agent-trace.conf, protoobp-agent-process.conf, protoobp-agent-security.conf, protoobp-agent-sysprobe.conf, protoobp-agent-data-plane.conf, protoobp-agent-action.conf) — они рассчитаны на старую версию upstart (0.6.5) из RHEL 6.

Если в системе используется upstart (RHEL 6.x, CentOS 6), управление выполняется штатно:

ДействиеКоманда
Запуск агентаinitctl start protoobp-agent
Остановка агентаinitctl stop protoobp-agent
Статус агентаinitctl status protoobp-agent

Команды service protoobp-agent start|stop|status на таких системах также работают — они транслируются в initctl.

Если же в дистрибутиве нет ни systemd, ни upstart (классический SysV-init), штатных скриптов запуска в пакете нет — используйте init-скрипты, приведённые ниже.

Собственные init-скрипты для «чистого» SysV

Скрипты ниже нужны только там, где нет ни systemd, ни upstart, ни штатных init-скриптов из DEB-пакета. Они разработаны под основной агент (protoobp-agent) и trace-агент APM (protoobp-agent-trace) и проверены на версии 7.80.2.

Скрипты покрывают только эти два компонента. Остальные компоненты 7.80.2 (process, security, system-probe, data-plane, private action runner, DDOT) на «чистом» SysV остаются неуправляемыми — при необходимости заведите для них скрипты по аналогии, взяв команду запуска из соответствующего файла /etc/init/protoobp-agent-*.conf.

init-скрипт основного агента

Сохраните в /etc/init.d/protoobp-agent:

#!/bin/bash
#
# protoobp-agent  ProtoOBP monitoring agent (main)
#
# chkconfig: 2345 99 01
# description: ProtoOBP monitoring agent (main)
# pidfile: /opt/protoobp-agent/run/agent.pid

### BEGIN INIT INFO
# Provides:          protoobp-agent
# Required-Start:    $local_fs $network $remote_fs $syslog
# Required-Stop:     $local_fs $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: ProtoOBP monitoring agent (main)
### END INIT INFO

. /etc/rc.d/init.d/functions

NAME="protoobp-agent"
USER="pobp-agent"
DAEMON="/opt/protoobp-agent/bin/agent/agent"
DAEMON_ARGS="run -p /opt/protoobp-agent/run/agent.pid"
PIDFILE="/opt/protoobp-agent/run/agent.pid"

LOCKFILE="/var/lock/subsys/${NAME}"
LOGFILE="/var/log/protoobp/${NAME}-init.log"
RUNDIR="/opt/protoobp-agent/run"
LOGDIR="/var/log/protoobp"

[ -x "$DAEMON" ] || { echo "$DAEMON not found"; exit 5; }
[ -d "$RUNDIR" ] || install -d -o "$USER" -g "$USER" "$RUNDIR"
[ -d "$LOGDIR" ] || install -d -o "$USER" -g "$USER" "$LOGDIR"

is_running() {
    [ -f "$PIDFILE" ] || return 1
    local pid
    pid="$(cat "$PIDFILE" 2>/dev/null)"
    [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null
}

start() {
    echo -n "Starting $NAME: "
    if is_running; then
        echo "already running (pid $(cat "$PIDFILE"))"
        return 0
    fi
    nohup su "$USER" -s /bin/bash -c "exec $DAEMON $DAEMON_ARGS" \
        >> "$LOGFILE" 2>&1 < /dev/null &
    for _ in 1 2 3 4 5 6 7 8 9 10; do
        is_running && break
        sleep 1
    done
    if is_running; then
        touch "$LOCKFILE"
        echo "OK (pid $(cat "$PIDFILE"))"
        return 0
    fi
    echo "FAILED — см. $LOGFILE"
    return 1
}

stop() {
    echo -n "Stopping $NAME: "
    if ! is_running; then
        echo "not running"
        rm -f "$LOCKFILE" "$PIDFILE"
        return 0
    fi
    killproc -p "$PIDFILE" -d 15 "$DAEMON"
    rc=$?
    [ $rc -eq 0 ] && rm -f "$LOCKFILE"
    return $rc
}

case "$1" in
    start)   start ;;
    stop)    stop ;;
    restart) stop; sleep 2; start ;;
    status)
        if is_running; then
            echo "$NAME is running (pid $(cat "$PIDFILE"))"
            exit 0
        fi
        echo "$NAME is not running"
        exit 3
        ;;
    *) echo "Usage: $0 {start|stop|restart|status}"; exit 2 ;;
esac
exit $?

init-скрипт trace-агента (APM)

Если используется APM, дополнительно сохраните в /etc/init.d/protoobp-agent-trace:

#!/bin/bash
#
# protoobp-agent-trace  ProtoOBP APM trace agent
#
# chkconfig: 2345 98 02
# description: ProtoOBP APM trace agent
# pidfile: /opt/protoobp-agent/run/trace-agent.pid

### BEGIN INIT INFO
# Provides:          protoobp-agent-trace
# Required-Start:    $local_fs $network $remote_fs $syslog protoobp-agent
# Required-Stop:     $local_fs $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: ProtoOBP APM trace agent
### END INIT INFO

. /etc/rc.d/init.d/functions

NAME="protoobp-agent-trace"
USER="pobp-agent"
DAEMON="/opt/protoobp-agent/embedded/bin/trace-agent"
DAEMON_ARGS="--config /etc/protoobp-agent/protoobp.yaml --pidfile /opt/protoobp-agent/run/trace-agent.pid"
PIDFILE="/opt/protoobp-agent/run/trace-agent.pid"

LOCKFILE="/var/lock/subsys/${NAME}"
LOGFILE="/var/log/protoobp/${NAME}-init.log"
RUNDIR="/opt/protoobp-agent/run"
LOGDIR="/var/log/protoobp"

[ -x "$DAEMON" ] || { echo "$DAEMON not found"; exit 5; }
[ -d "$RUNDIR" ] || install -d -o "$USER" -g "$USER" "$RUNDIR"
[ -d "$LOGDIR" ] || install -d -o "$USER" -g "$USER" "$LOGDIR"

is_running() {
    [ -f "$PIDFILE" ] || return 1
    local pid
    pid="$(cat "$PIDFILE" 2>/dev/null)"
    [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null
}

start() {
    echo -n "Starting $NAME: "
    if is_running; then
        echo "already running (pid $(cat "$PIDFILE"))"
        return 0
    fi
    nohup su "$USER" -s /bin/bash -c "exec $DAEMON $DAEMON_ARGS" \
        >> "$LOGFILE" 2>&1 < /dev/null &
    for _ in 1 2 3 4 5 6 7 8 9 10; do
        is_running && break
        sleep 1
    done
    if is_running; then
        touch "$LOCKFILE"
        echo "OK (pid $(cat "$PIDFILE"))"
        return 0
    fi
    echo "FAILED — см. $LOGFILE"
    return 1
}

stop() {
    echo -n "Stopping $NAME: "
    if ! is_running; then
        echo "not running"
        rm -f "$LOCKFILE" "$PIDFILE"
        return 0
    fi
    killproc -p "$PIDFILE" -d 15 "$DAEMON"
    rc=$?
    [ $rc -eq 0 ] && rm -f "$LOCKFILE"
    return $rc
}

case "$1" in
    start)   start ;;
    stop)    stop ;;
    restart) stop; sleep 2; start ;;
    status)
        if is_running; then
            echo "$NAME is running (pid $(cat "$PIDFILE"))"
            exit 0
        fi
        echo "$NAME is not running"
        exit 3
        ;;
    *) echo "Usage: $0 {start|stop|restart|status}"; exit 2 ;;
esac
exit $?

Регистрация скриптов и автозапуск

chmod 755 /etc/init.d/protoobp-agent /etc/init.d/protoobp-agent-trace
chkconfig --add protoobp-agent
chkconfig --add protoobp-agent-trace
chkconfig protoobp-agent on
chkconfig protoobp-agent-trace on

Проверить регистрацию:

chkconfig --list protoobp-agent
chkconfig --list protoobp-agent-trace

Команды управления собственными скриптами

ДействиеКоманда
Запуск агентаservice protoobp-agent start
Остановка агентаservice protoobp-agent stop
Перезапуск агентаservice protoobp-agent restart
Статус агентаservice protoobp-agent status
Запуск trace‑агентаservice protoobp-agent-trace start
Остановка trace‑агентаservice protoobp-agent-trace stop
Перезапуск trace‑агентаservice protoobp-agent-trace restart
Статус trace‑агентаservice protoobp-agent-trace status

Логи агента — в /var/log/protoobp/agent.log, trace-agent.log. Stdout/stderr самих init‑скриптов пишутся в /var/log/protoobp/<service>-init.log и полезны при диагностике падения процесса сразу после запуска.

Обновление со старой версии на системах без systemd

При обновлении с 7.40.2 на 7.80.2 на системе без systemd учитывайте следующее.

1. Собственные init-скрипты нужно поправить. В 7.80.2 у trace-агента переименован флаг PID-файла: --pid больше не принимается (Error: unknown flag: --pid), используется --pidfile. Если вы разворачивали скрипт по инструкции для 7.40.2, замените аргумент:

sed -i 's/--pid /--pidfile /' /etc/init.d/protoobp-agent-trace
service protoobp-agent-trace restart

Аргументы основного агента (run -p <pidfile>) и пути к бинарным файлам (/opt/protoobp-agent/bin/agent/agent, /opt/protoobp-agent/embedded/bin/trace-agent) не изменились.

2. На DEB собственные скрипты будут перезаписаны. Начиная с 7.80.2 DEB-пакет сам ставит /etc/init.d/protoobp-agent и скрипты остальных компонентов. Если вы ранее положили туда свои версии, пакет их заменит. Это штатная ситуация: после обновления пользуйтесь скриптами из пакета, собственные больше не нужны. Проверить, чей скрипт сейчас установлен:

dpkg -S /etc/init.d/protoobp-agent

После обновления перезапустите агента и убедитесь, что версия сменилась:

service protoobp-agent restart
protoobp-agent version