10. vmagent. Установка бинарника в systemd

1. Добавление бинарника в систему

  1. Временно отключите bash history и задайте логин/пароль для доступа к внутреннему репозиторию, если требуется:

    set +o history
    USER_PASS='nx-reader:xxxxxxxxxxxxxxxxxxxx'
    set -o history
  2. Скачайте файлы выбранной версии:

    URI='https://nexus.example.org/repository/raw/monitoring/victoriametrics'
    PLATFORM='linux-amd64'
    VER='v1.111.0'
    
    TMPDIR=$(mktemp -d) && cd $TMPDIR
    curl -LOu ${USER_PASS} ${URI}/vmutils-${PLATFORM}-${VER}.tar.gz
    curl -LOu ${USER_PASS} ${URI}/vmutils-${PLATFORM}-${VER}_checksums.txt
  3. Распакуйте архив во временную директорию и проверьте корректность файлов:

    tar xvf vmutils-linux-amd64-v1.111.0.tar.gz
    sha256sum -c vmutils-${PLATFORM}-${VER}_checksums.txt

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

    vmutils-linux-amd64-v1.111.0.tar.gz: OK
    vmagent-prod: OK
    vmalert-prod: OK
    vmalert-tool-prod: OK
    vmauth-prod: OK
    vmbackup-prod: OK
    vmrestore-prod: OK
    vmctl-prod: OK
  4. Установите выбранные приложения в /usr/local/bin, где, согласно FHS, следует размещать вручную добавляемые бинарники:

    install vmagent /usr/local/bin
  5. Почистите за собой, удалив временную директорию:

    rm -rf "${TMPDIR}"

2. Подготовка системы

  1. Добавьте в систему аккаунт vmagent с группой victoriametrics и создайте каталог под конфигурационные файлы:

    VMAGENT_CONF_DIR='/etc/victoriametrics'
    
    groupadd --system victoriametrics
    useradd --system --no-create-home --shell /sbin/nologin \
    --home-dir ${VMAGENT_CONF_DIR} --gid victoriametrics vmagent
    
    mkdir -p ${VMAGENT_CONF_DIR}
    chown root:victoriametrics ${VMAGENT_CONF_DIR}
    chmod 2750 ${VMAGENT_CONF_DIR}
    setfacl -d -m u::rwX,g::r-X,o::--- ${VMAGENT_CONF_DIR}
    setfacl -m u::rwX,g::r-X,o::--- ${VMAGENT_CONF_DIR}
    Этот каталог предназначен для размещения файлов конфигурации vmagent. Режим 2750 позволяет наследовать права «группы» для создаваемых объектов внутри этого каталога, а правила ACL обеспечивают сохранность данных, запрещая доступ для остальных пользователей (other). Вы можете проверить наследование прав, создав внутри каталога новый файл или каталог.
  2. Используйте отдельный диск для кеша vmagent, чтобы буферизовать собранные метрики в случае временной недоступности VictoriaMetrics-кластера. Если отдельный диск недоступен, необходимо добавить в /etc/sysconfig/vmagent для каждого remoteWrite.url опцию remoteWrite.maxDiskUsagePerURL, чтобы ограничить используемое пространство для кеша.

  3. Добавьте в переменную путь к каталогу для кеша и создайте каталог:

    VMAGENT_CACHE_DIR='/srv/vmagent'
    
    mkdir -p ${VMAGENT_CACHE_DIR}
    chown vmagent:victoriametrics ${VMAGENT_CACHE_DIR}
    chmod 750 ${VMAGENT_CACHE_DIR}

    Режим 750 для каталога и опция UMask=027 в systemd-юните обеспечивают безопасность записываемых данных, запрещая доступ для остальных пользователей (other).

    Использование ACL здесь излишне: во-первых, в нём нет необходимости, а во-вторых, оно создаёт дополнительную нагрузку при интенсивных операциях ввода-вывода.

  4. Добавьте systemd-юнит в /etc/systemd/system, где по правилам SYSTEMD должны находиться созданные вручную systemd-юниты:

    • Скрипт

    • Результативный systemd-юнит

    set -u; cat << EOF > /etc/systemd/system/vmagent.service
    [Unit]
    Description=vmagent is a tiny but mighty agent which helps you collect metrics from various sources and store them in VictoriaMetrics or any other Prometheus-compatible storage systems that support the remote_write protocol.
    # https://docs.victoriametrics.com/vmagent.html
    After=network.target
    
    [Service]
    Type=simple
    User=vmagent
    Group=victoriametrics
    UMask=027
    StartLimitBurst=5
    StartLimitInterval=0
    Restart=on-failure
    RestartSec=1
    EnvironmentFile=/etc/sysconfig/vmagent
    Environment="SYSTEMD_HOSTNAME=%H"
    ExecStart=/usr/local/bin/vmagent-prod -envflag.enable
    ExecStop=/bin/kill -s SIGTERM \$MAINPID
    ExecReload=/bin/kill -HUP \$MAINPID
    # See docs https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#tuning
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    WorkingDirectory=${VMAGENT_CONF_DIR}
    ReadWritePaths=${VMAGENT_CACHE_DIR}
    PrivateTmp=yes
    ProtectHome=yes
    NoNewPrivileges=yes
    ProtectSystem=strict
    ProtectControlGroups=true
    ProtectKernelModules=true
    ProtectKernelTunables=yes
    
    [Install]
    WantedBy=multi-user.target
    EOF
    set +u
    
    systemctl daemon-reload
    [Unit]
    Description=vmagent is a tiny but mighty agent which helps you collect metrics from various sources and store them in VictoriaMetrics or any other Prometheus-compatible storage systems that support the remote_write protocol.
    # https://docs.victoriametrics.com/vmagent.html
    After=network.target
    
    [Service]
    Type=simple
    User=vmagent
    Group=victoriametrics
    UMask=027
    StartLimitBurst=5
    StartLimitInterval=0
    Restart=on-failure
    RestartSec=1
    EnvironmentFile=/etc/sysconfig/vmagent
    Environment="SYSTEMD_HOSTNAME=%H"
    ExecStart=/usr/local/bin/vmagent-prod -envflag.enable
    ExecStop=/bin/kill -s SIGTERM $MAINPID
    ExecReload=/bin/kill -HUP $MAINPID
    # See docs https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#tuning
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    WorkingDirectory=/etc/victoriametrics
    ReadWritePaths=/srv/vmagent
    PrivateTmp=yes
    ProtectHome=yes
    NoNewPrivileges=yes
    ProtectSystem=strict
    ProtectControlGroups=true
    ProtectKernelModules=true
    ProtectKernelTunables=yes
    
    [Install]
    WantedBy=multi-user.target

3. Environment-файл для systemd-юнита

Для чего используется этот environment-файл?

Этот файл содержит опции командной строки, используемые при запуске vmagent-prod -envflag.enable. Например, переменная promscrape_config=vmagent.yml преобразуется в опцию promscrape.config=vmagent.yml, при этом символ _ в имени переменной заменяется на символ точки.

Опция WorkingDirectory в systemd-юните, которая определяет «рабочий каталог» для запускаемого процесса, даёт возможность использовать относительные пути к конфигурационным файлам.

  1. Добавьте в каталог для environment-файлов /etc/sysconfig файл с окружением для запуска vmagent.

    set -u; cat << EOF > /etc/sysconfig/vmagent
    httpListenAddr=127.0.0.1:8429
    promscrape_config=vmagent.yml
    
    ## Silently skip unsupported fields
    #promscrape_config_strictParse=false
    
    ## To see all the valid urls
    #remoteWrite_showURL
    
    ## Directory for temporary storage of collected data
    remoteWrite_tmpDataPath=${VMAGENT_CACHE_DIR}
    
    loggerLevel=INFO
    promscrape_suppressDuplicateScrapeTargetErrors=true
    
    EOF
    set +u

4. Создание основного config-файла для vmagent

  1. Создайте «основной» конфиг-файл, где укажите минимально необходимые опции:

    cat << EOF > /etc/victoriametrics/vmagent.yml
    scrape_config_files:
    - targets/*.yml
    
    global:
      scrape_interval: 15s
    EOF
Что дальше

Теперь можно приступить к настройке сбора метрик и их отправки в VictoriaMetrics.