Установка vmauth в минимальной конфигурации и запуск через systemd


1. Установка бинарника и добавление systemd-юнита в систему

  1. Установите бинарник vmauth-prod в каталог /usr/local/sbin:

    install vmauth-prod /usr/local/sbin
  2. Добавьте в систему аккаунт для работы демона VMAuth и создайте каталог под конфигурационные файлы:

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

    В переменную SYSTEMD_HOSTNAME может попасть короткое имя машины, если юнит запустится раньше момента установки полного имени машины. То есть в метку instance может попасть не vmaut01p.example.org, а vmauth01p. Но это не проблема, если есть правила, по которым в метке instance и должно быть короткое имя машины.
    • Скрипт

    • Результативный файл

    set -u; cat << EOF > /etc/systemd/system/vmauth.service
    [Unit]
    Description=vmauth is a simple auth proxy, router and load balancer for VictoriaMetrics.
    # https://docs.victoriametrics.com/vmauth.html
    After=network.target systemd-hostnamed.service
    Requires=systemd-hostnamed.service
    
    [Service]
    Type=simple
    User=vmauth
    Group=victoriametrics
    StartLimitBurst=5
    StartLimitInterval=0
    Restart=on-failure
    RestartSec=1
    EnvironmentFile=/etc/sysconfig/vmauth
    RuntimeDirectory=%N
    RuntimeDirectoryMode=755
    ExecStartPre=/bin/sh -c "echo SYSTEMD_HOSTNAME=\$(cat /etc/hostname) > /run/%N/systemd_hostname.env"
    EnvironmentFile=-/run/%N/systemd_hostname.env
    ExecStart=/usr/local/bin/vmauth-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=${VMAUTH_CONF_DIR}
    PrivateTmp=yes
    ProtectHome=yes
    NoNewPrivileges=yes
    ProtectSystem=strict
    ProtectControlGroups=true
    ProtectKernelModules=true
    ProtectKernelTunables=yes
    AmbientCapabilities=CAP_NET_BIND_SERVICE
    
    [Install]
    WantedBy=multi-user.target
    EOF
    set +u
    
    systemctl daemon-reload
    [Unit]
    Description=vmauth is a simple auth proxy, router and load balancer for VictoriaMetrics.
    # https://docs.victoriametrics.com/vmauth.html
    After=network.target
    
    [Service]
    Type=simple
    User=vmauth
    Group=victoriametrics
    StartLimitBurst=5
    StartLimitInterval=0
    Restart=on-failure
    RestartSec=1
    EnvironmentFile=/etc/sysconfig/vmauth
    RuntimeDirectory=%N
    RuntimeDirectoryMode=755
    ExecStartPre=/bin/sh -c "echo SYSTEMD_HOSTNAME=$(cat /etc/hostname) > /run/%N/systemd_hostname.env"
    EnvironmentFile=-/run/%N/systemd_hostname.env
    ExecStart=/usr/local/bin/vmauth-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
    PrivateTmp=yes
    ProtectHome=yes
    NoNewPrivileges=yes
    ProtectSystem=strict
    ProtectControlGroups=true
    ProtectKernelModules=true
    ProtectKernelTunables=yes
    AmbientCapabilities=CAP_NET_BIND_SERVICE
    
    [Install]
    WantedBy=multi-user.target


2. Минимальная конфигурация vmauth

  1. Добавьте в каталог /etc/sysconfig файл с окружением для vmauth.service:

    В этом файле /etc/sysconfig/vmauth хранятся опции командной строк, использующиеся при выполнении команды vmauth-prod -envflag.enable. Например, переменная auth_config=vmauth.yml преобразуется в опцию auth.config=vmauth.yml, то есть подчерк в имени переменной замещается точкой.

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

    cat << EOF > /etc/sysconfig/vmauth
    ## TCP address to listen for incoming http requests.
    httpListenAddr=:8427
    
    ## TCP address to listen for incoming internal API http requests.
    ## I.e. /metrics, /health, etc.
    httpInternalListenAddr=127.0.0.1:8426
    
    ## Minimum level of errors to log. Possible values:
    ## INFO, WARN, ERROR, FATAL, PANIC (default "INFO")
    #loggerLevel=INFO
    
    ## Log requests with invalid auth tokens.
    #logInvalidAuthTokens
    
    ## Path to auth config.
    auth_config=vmauth.yml
    
    EOF
  2. Добавьте в «рабочий» каталог vmauth /etc/victoriametrics основной файл vmauth.yml с минимальным содержимым:

    cat << 'EOF' > /etc/victoriametrics/vmauth.yml
    ## For generation a token use:
    ## 'tr -dc 'A-Za-z0-9_' < /dev/urandom | head -c $(( RANDOM % (23 - 19 + 1) + 19 )); echo'.
    ##
    ## To reread the config files, use 'docker kill -s HUP vmauth'.
    ##
    ## Format of name:
    ##   First part - Whose request? (MDM).
    ##   Second part - Type of request (select or insert or import or export).
    ##
    ## The fields 'name' will be seen in the Grafana vmauth dashboard.
    
    unauthorized_user:
      url_prefix: "http://127.0.0.1:8426/-/ready"
      #tls_insecure_skip_verify: true
    
    EOF

    Строка url_prefix: "http://127.0.0.1:8426/-/ready" позволит keepalived’у вычислять неработающие ноды.

    Раскомментировать опцию #tls_insecure_skip_verify: true потребуется после включения TLS для входящих подключений в vmauth. TLS включается одновременно и для внутренних URN, типа /metrics, /-/ready, и т.д. А так как в выдаваемых TLS-сертификатах отсутствует DNS-имя 127.0.0.1, то TLS-проверка при подключении к таким URI без опции tls_insecure_skip_verify будет провалена.


3. Первый запуск vmauth

  1. Включите и Запустите vmauth одной командой:

    systemctl enable --now vmauth
  2. Проверьте журнал:

    journalctl -u vmauth --no-pager -o cat -n
    Ожидаемый вывод
    2025-02-21T13:07:06.089Z        info    VictoriaMetrics/lib/logger/flag.go:20     -envflag.enable="true"
    2025-02-21T13:07:06.089Z        info    VictoriaMetrics/lib/logger/flag.go:20     -httpInternalListenAddr="127.0.0.1:8426"
    2025-02-21T13:07:06.089Z        info    VictoriaMetrics/lib/logger/flag.go:20     -httpListenAddr=":8427"
    2025-02-21T13:07:06.089Z        info    VictoriaMetrics/lib/logger/flag.go:20     -loggerLevel="INFO"
    2025-02-21T13:07:06.090Z        info    VictoriaMetrics/app/vmauth/main.go:95   starting vmauth at "[:8427]"...
    2025-02-21T13:07:06.090Z        info    VictoriaMetrics/app/vmauth/auth_config.go:691   loaded information about 0 users from -auth.config="vmauth.yml"
    2025-02-21T13:07:06.090Z        info    VictoriaMetrics/app/vmauth/main.go:113  started vmauth in 0.000 seconds
    2025-02-21T13:07:06.090Z        info    VictoriaMetrics/lib/httpserver/httpserver.go:169        started server at http://127.0.0.1:8426/
    2025-02-21T13:07:06.090Z        info    VictoriaMetrics/lib/httpserver/httpserver.go:171        pprof handlers are exposed at http://127.0.0.1:8426/debug/pprof/
    2025-02-21T13:07:06.090Z        info    VictoriaMetrics/lib/httpserver/httpserver.go:169        started server at http://0.0.0.0:8427/


4. Проверка

  1. Выполните проверку готовности сервиса:

    curl http://mon-vmauth01p:8427
    Ожидаемый вывод
    VictoriaMetrics is Ready.
  2. Выполните проверку возвращаемого HTTP-кода:

    curl -i http://mon-vmauth01p:8427
    Ожидаемый вывод
    HTTP/1.1 200 OK
    Content-Length: 26
    Content-Type: text/plain; charset=utf-8
    Date: Thu, 20 Feb 2025 15:18:01 GMT
    Vary: Accept-Encoding
    Vary: Accept-Encoding
    X-Server-Hostname: mon-vmauth01p.example.org
    X-Server-Hostname: mon-vmauth01p.example.org