Установка агентов Proto Observability Platform

На странице представлена иформация по установке агента платформы наблюдаемости для автоматического сбора метрик, трейсов и логов.

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

Описание

ProtoOBP агент автоматически собирает метрики, трейсы и логи и отправляет полученные данные на ProtoOBP Backend сервер.

Сбор трейсов приложения осуществляется с помощью трейсеров, автоматически инструментируя код следующих языков программирования:

Сбор метрик осуществляется автоматически для всех поддерживамых технологий

Схема взаимодействия компонентов ProtoOBP

../images/agent-backend-communiсation.png

Поддерживаемые технологии

Linux

Linux агент – установка

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

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

    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
    

    Значение <your_token> берется из лицензионного сертификата, полученного ранее от вендора, из раздела “Учетные данные -> Пароль”

    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
    

    Результат выполнения команды:

    Agent 7.40.2 - Meta: git.8.d01c4fd - Commit: d01c4fd - Serialization version: v5.0.32 - Go version: go1.18.8
    

Linux агент – конфигурация

  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
    

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

Linux агент – управление

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

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

Linux агент – управление на системах без systemd (SysV-init)

На дистрибутивах без systemd (RHEL 6.x, CentOS 6, старые линейки Alt Linux, Rosa Linux, РЕД ОС и др.) пакет агента не разворачивает SysV‑скрипты — команды systemctl недоступны, а штатное service protoobp-agent start возвращает unrecognized service. В этом случае используйте init‑скрипты, приведённые ниже. Скрипты разработаны под основной агент (protoobp-agent) и trace‑агент APM (protoobp-agent-trace); пути и аргументы дословно соответствуют тому, что в /usr/lib/systemd/system/*.service из RPM.

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 --pid /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 и полезны при диагностике падения процесса сразу после запуска.

Windows

Windows агент – установка

  1. Скачайте .msi установщик с агентом (замените <YOUR_TOKEN> на значение вашего токена из вашего лицензионного сертификата)

    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-x64.msi" --output protoobp-agent-7.40.2-x64.msi
    
    $headers = @{
         "PRIVATE-TOKEN" = "<YOUR-TOKEN>"
    }
    try {
       Write-Host "Requesting file..."
       Invoke-WebRequest `
           -Uri "https://git.proto.group/api/v4/projects/125/packages/generic/protoobp-agent/7.40.2/protoobp-agent-7.40.2-x64.msi" `
           -Headers $headers `
           -OutFile "protoobp-agent-7.40.2-x64.msi" `
           -Verbose `
           -ErrorAction Stop
         Write-Host "Download completed."
    }
    catch {
       Write-Host "HTTP download failed: $($_.Exception.Message)"
    }
    
  2. Запустите .msi установщик в графическом режиме и следуйте указаниям мастера установки агента, разрешите административные привилегии в момент запроса.

    • Для консольной установки используйте PowerShell команду (запуск PowerShell должен быть от Администратора):
      Start-Process -Wait msiexec -ArgumentList '/qn /i protoobp-agent-7.40.2-x64.msi APIKEY="<YOUR-TOKEN>"'
      

GMSA

Использование GMSA не является обязательным. GMSA для установки и запуска агент может применяться в доменной структуре с ограничивающими доменными политиками безопасности или если при использовании стандартного способа установки агенту не хватает прав на запуск сервисов из-за ограничений безопасности.

Для использования агента с GMSA выполните следующие шаги:

  1. Создайте Security Group и добавьте в нее все компьютеры, на которых будет установлен агент с использованием GMSA:

    1. Откройте Active Directory Users and Computers (ADUC).
    2. Перейдите в нужный Organizational Unit (OU).
    3. Сделайте клик правой кнопкой мыши и выберите New > Group.
    4. Назовите группу, например, ProtoOBPAgentsGroup
    5. Установите необходимый скоуп группы, например Domain local.
    6. Установите тип группы: Security.
    7. Добавьте в эту группу все компьютеры, которые будут использовать GMSA для установки и запуска агента.
  2. Создайте GMSA c именем ProtoobpGMSA:

    1. Октройте PowerShell с привилегиями Администратора.

    2. Выполните следующую команду для создания GMSA, замените <YOUR_DOMAIN_CONTROLLER_NAME> на DNS имя вашего контроллера домена:

      New-ADServiceAccount `
       -Name ProtoobpGMSA `
       -DNSHostName <YOUR_DOMAIN_CONTROLLER_NAME> `
       -PrincipalsAllowedToRetrieveManagedPassword ProtoOBPAgentsGroup
      

      Убедитесь, что команда выполнена без ошибок.

      В случае ошибок:

      • создайте Kds ключ:
        Add-KdsRootKey -EffectiveTime ((Get-Date).AddHours(-10))
        
      • проверьте, что указанная группа существует:
        Get-ADGroup -Identity ProtoOBPAgentsGroup
        
      • выполните создание GMSA еще раз:
        New-ADServiceAccount `
         -Name ProtoobpGMSA `
         -DNSHostName <YOUR_DOMAIN_CONTROLLER_NAME> `
         -PrincipalsAllowedToRetrieveManagedPassword ProtoOBPAgentsGroup
        
  3. Подключите GMSA и убедитесь, что GMSA может быть использована на целевой машине. На целевой машине откройте PowerShell и выполните:

    Install-ADServiceAccount -Identity ProtoobpGMSA
    

    Убедитесь, что команда выполнена без ошибок.

    Проверьте, что GMSA успешно установлена:

    Test-ADServiceAccount -Identity ProtoobpGMSA
    

    Ожидаемый вывод команды: True

    Устранение неполадок подключения GMSA на целевую машину:

    • проверьте, какие группы имеют разрешение использовать GMSA:
      Get-ADServiceAccount -Identity ProtoobpGMSA -Properties PrincipalsAllowedToRetrieveManagedPassword
      
      если группа ProtoOBPAgentsGroup отсутствует в списке в разделе PrincipalsAllowedToRetrieveManagedPassword, обновите GMSA и добавьте группу ProtoOBPAgentsGroup:
      Set-ADServiceAccount -Identity ProtoobpGMSA -PrincipalsAllowedToRetrieveManagedPassword ProtoOBPAgentsGroup
      
    • проверьте, что машина является членом группы:
      Get-ADGroupMember -Identity ProtoOBPAgentsGroup
      
      убедитесь, что в выводе есть имя текущего компьютра, если его нет – добавьте компьютер в группу:
      Add-ADGroupMember -Identity ProtoOBPAgentsGroup -Members <ComputerName>
      
    • выполните обновление групповых политик, удалите Kerberos тикеты и перезагрузите компьютер:
      gpupdate /force
      klist purge
      Restart-Computer
      
  4. Установите агента с использованием GMSA:

    1. Если агент ранее был установлен стандартным методом (запуск от новой учетной записи pobpagentuser, созданной на этапе установки агента), то необходимо полностью удалить агента и его файлы, перед использованием установки с использованием GMSA.
      1. Через Control Panel удалите пакет агента (через графический интерфейс).
      2. Вручную удалите папку C:\ProgramData\Protoobp (обязательный шаг, иначе последующая установка завершится ошибкой)
    2. Запустите .msi установщик агента.
    3. Введите запрашиваемые ключ и адрес бэкенд сервера
    4. На этапе выбора учётной записи (Please enter the username) укажите созданную и установленную на этой машине GMSA в формате: <ВАШ_ДОМЕН>\ProtoobpGMSA$ – обязательно с символом $ в конце. Поле пароль обязательно оставьте пустым.
    5. Зайдите в веб-интерфейс агента, и выполните конфигурацию агента через веб-интерфейс.
    6. Откройте services.msc и убедитесь, что агент запускается от имени доменной GMSA:
      ../images/windows-agent-gmsa.png

Windows агент – конфигурация

  1. Запустите веб-консоль управления агентом ProtoOBP Agent Manager.
    ../images/windows-protoobp-agent-manager.png

  2. Откроется веб-браузер с консолью управления. В случае запроса изменения настроек безопасности – добавьте в доверенные узлы http://127.0.0.1 и about:blank.
    ../images/windows-protoobp-agent-manager-start-screen.png

  3. Перейдите в раздел Settings и в конфигурации агента укажите следующее:

    api_key: my_api_key
    pobp_url: http://<адрес_бекенд_сервера_protoobp>       # используйте httpS только если на сервере ProtoOBP Backend подключен доверенный сертификат
    apm_config:
      apm_non_local_traffic: true   
      apm_pobp_url: http://<адрес_бекенд_сервера_protoobp> # используйте httpS только если на сервере ProtoOBP Backend подключен доверенный сертификат
      enabled: true
      telemetry:
        enabled: false
    process_config:
      process_collection:
        enabled: false
    

    Параметры:

    api_keyзначение, указанное в лицензионном сертификате, полученном ранее от вендора, в разделе Учетные данные -> Пароль
    pobp_urlстрока вида http://<адрес_бекенд_сервера_protoobp>, где <адрес_бекенд_сервера_protoobp> - адрес вашего ProtoOBP Backend сервера, доступного для агента
    apm_pobp_urlстрока вида http://<адрес_бекенд_сервера_protoobp>, где <адрес_бекенд_сервера_protoobp> – адрес вашего ProtoOBP Backend сервера, доступного для агента

    Пример окна конфигурации: ../images/windows-agent-config.png

  4. Перезапустите агента, для этого консоли управления кликните на Restart Agent.

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

Windows агент – управление

  1. Запустите ProtoOBP Agent Manager:
    ../images/windows-protoobp-agent-manager.png

  2. Для перезапуска агента в левом меню выберите и нажмите на раздел Restart Agent
    ../images/windows-agent-restart-gui.png

Также после запуска ProtoOBP Agent Manager в системном трее доступна иконка с контекстным меню агента для управления агентом:

../images/windows-agent-commands-gui.png

Для команд ниже используйте только привилегированную командную строку (run as Administrator)

ДействиеКоманда
Запуск агента"C:\Program Files\Protoobp\Protoobp Agent\bin\agent.exe" start-service
Остановка агента"C:\Program Files\Protoobp\Protoobp Agent\bin\agent.exe" stopservice
Перезапуск службы"C:\Program Files\Protoobp\Protoobp Agent\bin\agent.exe" restart-service

Windows агент – типовые проблемы

Сервис не запускается

В случае, если службы Агента не запускаются с ошибкой Access is denied:

  • Убедитесь, что у служебного пользователя, от имени которого запускается агент, есть права Log on as a service. Инсталлятор добавляет это право, но в случае использования групповых доменнных политик это право может быть отозвано у служебной учетной записи. Необходимо настроить групповые политики на разрешение служебному пользователю осуществлять Log on as a service.
    • откройте Computer Configuration > Windows Settings > Security Settings > Local Policies > User Rights Assignment
    • локальный пользователь, создаваемый в процессе установки (pobpagentuser): ../images/windows-agent-log-on-as-a-service.jpg
    • в случае использования GMSA – DomainName\ProtoobpGMSA$:
      ../images/gmsa-security-log-on-as-a-service.png
  • Убедитесь, что служебный пользователь pobpagentuser является членом группы Users на сервере. В случае использования GMSA такое право должно быть у этой учетной записи.

Ошибка “Сервис помечен для удаления”

В случае запуска процедуры удаления агента, файлы агента удаляются, но службы агента остаются видимы в системе, при попытке их удаления через командую строку выводится сообщение о том, что сервис “помечен для удаления”. В этом случае потребуется перезагрузка машины, чтобы произошло полное удаление сервисов. После перезагрузки возможно заново установить пакет агента. Это особенность операционной системы Windows.

Docker

Запуск Docker агента (отдельный контейнер)

  1. Подключитесь к Docker репозиторию ProtoOBP выполнив команду:

    sudo docker login --username <USERNAME> registry.git.proto.group
    

    Ваш <USERNAME> и пароль указаны в лицензионном сертификате, полученном ранее от вендора, в разделе “Учетные данные”. Пароль вводится интерактивно.

  2. Запустите агента

        docker run -d \
        --cgroupns host \
        --pid host \
        --name protoobp-agent \
        -v /var/run/docker.sock:/var/run/docker.sock:ro \
        -v /proc/:/host/proc/:ro \
        -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
        -e POBP_API_KEY=<your_api_key> \
        -e POBP_POBP_URL=http://<адрес_бекенд_сервера_protoobp> \
        -e POBP_APM_POBP_URL=http://<адрес_бекенд_сервера_protoobp> \
        -e POBP_PROCESS_CONFIG_PROCESS_COLLECTION_ENABLED=false \
        registry.git.proto.group/protoobp/protoobp-artifacts/protoobp-agent:7.40.3
    

    Переменные окружения:

    POBP_API_KEYзначение, указанное в лицензионном сертификате, полученном ранее от вендора, в разделе Учетные данные -> Пароль
    POBP_POBP_URLстрока вида http://<адрес_бекенд_сервера_protoobp>, где <адрес_бекенд_сервера_protoobp> - адрес вашего ProtoOBP Backend сервера, доступного для агента
    POBP_APM_POBP_URLстрока вида http://<адрес_бекенд_сервера_protoobp>, где <адрес_бекенд_сервера_protoobp> – адрес вашего ProtoOBP Backend сервера, доступного для агента

Запуск Docker агента (docker compose)

  1. Подключитесь к Docker репозиторию ProtoOBP выполнив команду:

    sudo docker login --username <USERNAME> registry.git.proto.group
    

    Ваш <USERNAME> и пароль указаны в лицензионном сертификате, полученном ранее от вендора, в разделе “Учетные данные”. Пароль вводится интерактивно.

  2. Добавьте в ваш docker-compose.yaml файл следующее:

    protoobp-agent:
      container_name: protoobp-agent
      image: registry.git.proto.group/protoobp/protoobp-artifacts/protoobp-agent:7.40.3
      pid: host
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - /proc/:/host/proc/:ro
        - /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
        - /etc/os-release:/host/etc/os-release:ro
      environment:
        - POBP_API_KEY=<your_api_key>
        - POBP_POBP_URL=http://<адрес_бекенд_сервера_protoobp>     # используйте httpS только если на сервере ProtoOBP Backend подключен доверенный сертификат
        - POBP_PROCESS_CONFIG_PROCESS_COLLECTION_ENABLED=false
        - POBP_APM_POBP_URL=http://<адрес_бекенд_сервера_protoobp> # используйте httpS только если на сервере ProtoOBP Backend подключен доверенный сертификат
    

    Переменные окружения:

    POBP_API_KEYзначение, указанное в лицензионном сертификате, полученном ранее от вендора, в разделе Учетные данные -> Пароль
    POBP_POBP_URLстрока вида http://<адрес_бекенд_сервера_protoobp>, где <адрес_бекенд_сервера_protoobp> - адрес вашего ProtoOBP Backend сервера, доступного для агента
    POBP_APM_POBP_URLстрока вида http://<адрес_бекенд_сервера_protoobp>, где <адрес_бекенд_сервера_protoobp> – адрес вашего ProtoOBP Backend сервера, доступного для агента
  3. Запустите агента, выполнив:

    docker compose up -d protoobp-agent
    

Kubernetes

После установки агента в системе появятся поды агента:

  • protoobp
  • protoobp-cluster-agent

Необходимые сетевые порты для работы Kubernetes агента:

Source NameDestination NameDestination PORT/PROTODescription
поды агента (protoobp и protoobp-cluster-agent)proto backend443/tcpотправка данных (метрики, трейсы, логи) от агента на бэкенда
под агента protoobpпод агента protoobp-cluster-agent5005/tcpподключение агента к cluster-агенту
поды приложенийпод агента protoobp8125/udpотправка метрик от приложения к агенту
поды приложенийпод агента protoobp8126/tcpотправка трейсов от приложения к агенту
IP k8s control planeIP k8s ноды8000/tcpподключение webhook автоматической инструментации приложений

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

  1. Добавьте helm репозиторий ProtoOBP:

    helm repo add --username <my_login> --password <my_password> protoobp https://git.proto.group/api/v4/projects/125/packages/helm/stable
    

    Ваши логин и пароль указаны в лицензионном сертификате, полученном ранее от вендора, в разделе “Учетные данные”.

  2. Добавьте secret для скачивания Docker образов из репозитория ProtoOBP. Для этого воспользуйтесь готовым скриптом script.sh:

    # Укажите имя пользователя
    login="my_login"
    # Укажите пароль
    password="my_password"
    # Укажите адрес репозитория
    registry="registry.git.proto.group"
    # Укажите namespace в котором будет установлен агент (по умолчанию protoobp)
    namespace="protoobp"
    
    ######################
    # Скрипт
    set -o errexit
    
    echo 'Создаем Secret'
    kubectl create namespace ${namespace}
    kubectl create secret docker-registry protoobp-registry --docker-username=${login} --docker-password=${password} --docker-server=${registry} --namespace=${namespace}
    
  3. Создайте файл values.yaml с конфигурацией агента

    targetSystem: "linux"
    commonLabels: {}
    registry: registry.git.proto.group/protoobp/protoobp-artifacts # необходимо изменить в случае использования собственного Docker репозитория
    protoobp:
      apiKey: <ВАШ_API_KEY>   # указан в лицензионном сертификате 
      clusterName: <ИМЯ_КЛАСТЕРА>  # задается вручную в соответствии с текущим реальным именем кластер
      pobp_url: http://<адрес_бекенд_сервера_protoobp>      # используйте httpS только если на сервере ProtoOBP Backend подключен доверенный сертификат
      pobp_apm_url: http://<адрес_бекенд_сервера_protoobp>  # используйте httpS только если на сервере ProtoOBP Backend подключен доверенный сертификат
      logLevel: INFO
      processAgent:
        enabled: false
        processCollection: false
      kubelet:
        tlsVerify: false
    clusterAgent:
      image:
        name: cluster-agent
        tag: 7.40.3
        pullSecrets:
          - name: "protoobp-registry"
      env:  ## этот раздел и переменная ниже добавляется только в случае использования локального репозитория Docker образов для компонентов Proto Observability Platform 
        - name: POBP_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_CONTAINER_REGISTRY
          value: docker.intranet/protoobp/protoobp-artifacts ## здесь указывается адрес локального репозитория - зеркала образов        
    agents:
      image:
        name: protoobp-agent
        tag: 7.40.3
        pullSecrets:
          - name: "protoobp-registry"
    

    Параметры:

    <ВАШ_API_KEY>значение, указанное в лицензионном сертификате, полученном ранее от вендора, в разделе Учетные данные -> Пароль
    pobp_urlстрока вида http://<адрес_бекенд_сервера_protoobp>, где <адрес_бекенд_сервера_protoobp> - адрес вашего ProtoOBP Backend сервера, доступного для агента
    apm_pobp_urlстрока вида http://<адрес_бекенд_сервера_protoobp>, где <адрес_бекенд_сервера_protoobp> – адрес вашего ProtoOBP Backend сервера, доступного для агента
    <ИМЯ_КЛАСТЕРА>имя кластера, которое будет отображаться в интерфейсе Proto Observability Platform
  4. Установите helm чарт в ваш Kubernetes кластер (в примере ниже исползуется неймспейс protoobp)

    helm install protoobp -f values.yaml protoobp/protoobp --namespace protoobp
    

Использование hostPath ноды

Поды агента имеют несколько hostPath mount:

Имя MountОписание
procdirПодключается в режиме read-only. Используется системными проверками.
cgroupsПодключается в режиме read-only. Используется для сбора метаданных контейнеров.
os-release-fileПодключается в режиме read-only. Используется для определения ОС.
passwdПодключается в режиме read-only. Используется для ассоциирования процессов с пользователями.
runtimesocketdirПодключается в режиме read-only. Используется для сбора метрик контейнеров.
dsdsocketПодключается в режиме read-write. Используется для приема метрик, опционально также может быть включен порт.
apmsocketПодключается в режиме read-write. Используется для приема трейсов, опционально также может быть включен порт.

Работа в непривилегированном режиме

Для максимальной совместимости и автоматизации сбора данных агент в контейнере по умолчанию запускается от пользователя root.

Использование не root пользователя может ограничить работу некоторых интеграций, которым необходимы данные хоста (ноды).

Пользователя, под которым запускается агент в контейнере, можно изменить, указав в values.yaml ID необходимого пользователя.

protoobp:
...
  securityContext:
      runAsUser: <USER_ID> 
      # UID пользователя, под которым будет запускаться Proto OBP агент
      supplementalGroups:
        - <GROUP_ID> 
        # ID группы, которая является владельцем сокета Docker или containerd

Дополнительная конфигурация для OpenShift

Особенности настройки агентов Proto OBP с OpenShift:

  • необходимо указать создание SCC (Security Context Constraints) для агентов
  • необходимо указать путь к сокету CRI, так как OpenShift использует CRI-O в качестве рантайма контейнеров
  • необходимо добавить tolerations для запуска агентов на master и infra нодах кластера

Для этого в файле values.yaml в разделе agents добавьте:

protoobp:
  criSocketPath: /var/run/crio/crio.sock

...
agents:
  useHostNetwork: true
  podSecurity:
    securityContextConstraints:
      create: true
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/master
      operator: Exists
    - effect: NoSchedule
      key: node-role.kubernetes.io/infra
      operator: Exists
clusterAgent:
  podSecurity:
    securityContextConstraints:
      create: true
...

Изменение параметров Kubernetes агента

После внесения изменений в файл values.yaml можно применить изменения с помощью команды:

helm upgrade protoobp -f values.yaml protoobp/protoobp --namespace protoobp

Или воспользуйтесь полным удалением агента и переустановкой.

Удаление Kubernetes агента

Удалить ProtoOBP агента из Kubernetes кластера, можно выполнив (используемый в примере неймспейс – protoobp, замените при использовании нестандартного неймспейса):

helm uninstall protoobp -n protoobp

Работа агента через proxy

  1. Настройка прокси-сервера. В качестве примера может использоваться прокси-сервер Nginx и минимальная конфигурация:

    user www-data;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    load_module /usr/lib/nginx/modules/ngx_stream_module.so;
    
    events {
        worker_connections 1024;
    }
    
    stream {
    
        server {
            listen 80;
            proxy_ssl_verify off;
            proxy_ssl on;
            proxy_pass proto-backend:443;
        }
    }
    

    Где proto-backend – адрес вашего бэкенд сервера.

  2. Настройка агента для использования прокси. В используемых адресах вместо адресов бэкенда укажите адрес прокси сервера:

    api_key: your-api-key
    pobp_url: http://nginx-proxy
    skip_ssl_validation: true
    apm_config:
      apm_non_local_traffic: true   
      apm_pobp_url: http://nginx-proxy
      telemetry:
        enabled: false
    database_monitoring:
      metrics:
        pobp_url: nginx-proxy
      activity:
        pobp_url: nginx-proxy
      samples:
        pobp_url: nginx-proxy
    

    Где nginx-proxy – адрес вашего прокси сервера.

  3. Примените изменения, перезапустив агента.

Файлы конфигурации агента

Основной конфигурационный файл агента:

ПлатформаПуть и имя файла
Linux/etc/protoobp-agent/protoobp.yaml
Windows%ProgramData%\Protoobp\protoobp.yaml

Файлы конфигурации модулей для мониторинга технологий находятся в папке <путь к папке конфигурации>/conf.d/<технология>.d/..

Путь к папке конфигурации зависит от платформы:

ПлатформаПуть
Linux/etc/protoobp-agent/conf.d/
Windows%ProgramData%\Protoobp\conf.d

Например, для мониторинга MySQL на агента Linux путь к файлу конфигурации MySQL будет иметь вид:

/etc/protoobp-agent/conf.d/mysql.d/conf.yaml

Проверка работы агента

ПлатформаКоманда
Dockersudo docker exec -it protoobp-agent agent status
Kuberneteskubectl exec -it <AGENT_POD_NAME> -- agent status
Linuxsudo protoobp-agent status
WindowsДля команды ниже используйте только привилегированную командную строку (run as Administrator) "C:\Program Files\Protoobp\Protoobp Agent\bin\agent.exe" status

Логи агента

Логи работы агента располагаются в следующих локациях:

ПлатформаПуть
Linux/var/log/protoobp/
WindowsC:\ProgramData\Protoobp\logs

Логи установки агента располагаются в следующих локациях:

ПлатформаПуть и имя файла
Linux$(pwd)/protobop-agent-install.log
Windows%TEMP%\MSI*.LOG

Собираемые системные метрики по хостам

МетрикаДоступные метки/ лейблы
system_cpu_context_switcheshost
system_cpu_guesthost
system_cpu_idlehost
system_cpu_interrupthost
system_cpu_iowaithost
system_cpu_num_coreshost
system_cpu_stolenhost
system_cpu_systemhost
system_cpu_userhost
system_disk_freedevice_name, host
system_disk_in_usedevice_name, host
system_disk_read_timedevice_name, host
system_disk_read_time_pctdevice_name, host
system_disk_totaldevice_name, host
system_disk_useddevice_name, host
system_disk_write_timedevice_name, host
system_disk_write_time_pctdevice_name, host
system_fs_file_handles_allocatedhost
system_fs_file_handles_allocated_unusedhost
system_fs_file_handles_in_usehost
system_fs_file_handles_maxhost
system_fs_file_handles_usedhost
system_fs_inodes_freedevice_name, host
system_fs_inodes_in_usedevice_name, host
system_fs_inodes_totaldevice_name, host
system_fs_inodes_useddevice_name, host
system_io_avg_q_szdevice_name, host
system_io_avg_rq_szdevice_name, host
system_io_awaitdevice_name, host
system_io_block_inhost
system_io_block_outhost
system_io_r_awaitdevice_name, host
system_io_r_sdevice_name, host
system_io_rkb_sdevice_name, host
system_io_rrqm_sdevice_name, host
system_io_svctmdevice_name, host
system_io_utildevice_name, host
system_io_w_awaitdevice_name, host
system_io_w_sdevice_name, host
system_io_wkb_sdevice_name, host
system_io_wrqm_sdevice_name, host
system_load_1host
system_load_15host
system_load_5host
system_load_norm_1host
system_load_norm_15host
system_load_norm_5host
system_mem_bufferedhost
system_mem_cachedhost
system_mem_commit_limithost
system_mem_committed_ashost
system_mem_freehost
system_mem_page_tableshost
system_mem_pct_usablehost
system_mem_sharedhost
system_mem_slabhost
system_mem_slab_reclaimablehost
system_mem_totalhost
system_mem_usablehost
system_mem_usedhost
system_net_bytes_rcvdhost
system_net_bytes_senthost
system_net_conntrack_counthost
system_net_conntrack_expect_maxhost
system_net_conntrack_maxhost
system_net_conntrack_tcp_max_retranshost
system_net_conntrack_tcp_timeout_max_retranshost
system_net_iface_mtuhost, iface
system_net_iface_num_rx_queueshost, iface
system_net_iface_num_tx_queueshost, iface
system_net_iface_tx_queue_lenhost, iface
system_net_ip_forwarded_datagramshost
system_net_ip_fragmentation_createshost
system_net_ip_fragmentation_failshost
system_net_ip_fragmentation_okshost
system_net_ip_in_addr_errorshost
system_net_ip_in_csum_errorshost
system_net_ip_in_delivershost
system_net_ip_in_discardshost
system_net_ip_in_header_errorshost
system_net_ip_in_no_routeshost
system_net_ip_in_receiveshost
system_net_ip_in_truncated_pktshost
system_net_ip_in_unknown_protoshost
system_net_ip_out_discardshost
system_net_ip_out_no_routeshost
system_net_ip_out_requestshost
system_net_ip_reassembly_failshost
system_net_ip_reassembly_okshost
system_net_ip_reassembly_overlapshost
system_net_ip_reassembly_requestshost
system_net_ip_reassembly_timeoutshost
system_net_ip_reverse_path_filterhost
system_net_packets_in_counthost
system_net_packets_in_drophost
system_net_packets_in_errorhost
system_net_packets_out_counthost
system_net_packets_out_drophost
system_net_packets_out_errorhost
system_net_tcp_abort_on_timeouthost
system_net_tcp_active_openshost
system_net_tcp_attempt_failshost
system_net_tcp_backlog_dropshost
system_net_tcp_current_establishedhost
system_net_tcp_established_resetshost
system_net_tcp_failed_retransmitshost
system_net_tcp_from_zero_windowhost
system_net_tcp_in_csum_errorshost
system_net_tcp_in_errorshost
system_net_tcp_in_segshost
system_net_tcp_listen_dropshost
system_net_tcp_listen_overflowshost
system_net_tcp_out_resetshost
system_net_tcp_out_segshost
system_net_tcp_passive_openshost
system_net_tcp_paws_connection_dropshost
system_net_tcp_paws_established_dropshost
system_net_tcp_prune_calledhost
system_net_tcp_prune_ofo_calledhost
system_net_tcp_prune_rcv_dropshost
system_net_tcp_retrans_segshost
system_net_tcp_syn_cookies_failedhost
system_net_tcp_syn_cookies_recvhost
system_net_tcp_syn_cookies_senthost
system_net_tcp_syn_retranshost
system_net_tcp_to_zero_windowhost
system_net_tcp_tw_reusedhost
system_net_udp_in_csum_errorshost
system_net_udp_in_datagramshost
system_net_udp_in_errorshost
system_net_udp_no_portshost
system_net_udp_out_datagramshost
system_net_udp_rcv_buf_errorshost
system_net_udp_snd_buf_errorshost
system_swap_cachedhost
system_swap_freehost
system_swap_pct_freehost
system_swap_swap_inhost
system_swap_swap_outhost
system_swap_totalhost
system_swap_usedhost
system_uptimehost

Собираемые контейнерные метрики

МетрикаДоступные метки / лейблы
container_cpu_limitcontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_cpu_systemcontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_cpu_throttledcontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_cpu_throttled_periodscontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_cpu_usagecontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_cpu_usercontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_io_readcontainer_id, container_name, device_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_io_read_operationscontainer_id, container_name, device_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_io_writecontainer_id, container_name, device_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_io_write_operationscontainer_id, container_name, device_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_memory_cachecontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_memory_kernelcontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_memory_limitcontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_memory_oom_eventscontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_memory_rsscontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_memory_soft_limitcontainer_id, container_name, docker_image, git_commit_sha, host, image_name, image_tag, runtime, service_id_container, service_id_host, short_image
container_memory_swapcontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_memory_usagecontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_net_rcvdcontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, interface, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_net_rcvd_packetscontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, interface, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_net_sentcontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, interface, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_net_sent_packetscontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, interface, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_pid_open_filescontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_pid_thread_countcontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image
container_pid_thread_limitcontainer_id, container_name, docker_image, env, git_commit_sha, host, image_name, image_tag, runtime, service, service_id_container, service_id_host, short_image
container_uptimecontainer_id, container_name, display_container_name, docker_image, env, git_commit_sha, host, image_id, image_name, image_tag, kube_app_component, kube_app_instance, kube_app_managed_by, kube_app_name, kube_container_name, kube_daemon_set, kube_deployment, kube_namespace, kube_ownerref_kind, kube_ownerref_name, kube_priority_class, kube_qos, kube_replica_set, kube_service, kube_stateful_set, persistentvolumeclaim, pod_name, pod_phase, runtime, service, service_id_container, service_id_host, short_image