Skip to content

Linux (edge)

Edge-агент (ongrid-edge) запускается на каждом хосте, который вы хотите, чтобы Ongrid наблюдал. На Linux он устанавливается как systemd-сервис через единую curl-pipe команду. Агент — это единый статический Go-бинарь плюс четыре plugin-бинаря (promtail, node_exporter, process-exporter, otelcol-contrib).

Архитектуры

GOOSGOARCHСтатус
linuxamd64first-class
linuxarm64first-class

Installer читает uname -m и выбирает соответствующий бинарь, скачиваемый из static-пути /edge/ manager'а:

text
x86_64 / amd64  → amd64
aarch64 / arm64 → arm64
anything else   → error: "unsupported arch"

Поддерживаемые дистрибутивы

Мы тестируем против того же набора, что и сервер. На практике всё, что имеет systemd 245+ (чтобы StateDirectory= работал) и glibc 2.31+, запускает агент нормально.

ДистрибутивТестируется на
Ubuntu20.04 LTS, 22.04 LTS, 24.04 LTS
Debian11 (bullseye), 12 (bookworm)
RHEL8, 9
Rocky Linux8, 9
AlmaLinux8, 9
Amazon Linux2023

Если ваш дистрибутив всё ещё использует sysvinit, OpenRC или runit, см. раздел «non-systemd» ниже.

Что installer кладёт

curl -k -sSL https://<manager>/install.sh | sudo bash -s -- --access-key=... --secret-key=... --server-edge-addr=<host>:40012 --server-http-addr=<host>:443 укладывает следующее на диск:

ПутьНазначение
/usr/local/bin/ongrid-edgeбинарь агента
/usr/local/lib/ongrid-edge/promtaillogs-плагин
/usr/local/lib/ongrid-edge/otelcol-contribtraces-плагин
/usr/local/lib/ongrid-edge/node_exporterhost-metrics плагин
/usr/local/lib/ongrid-edge/process_exporterproc-metrics плагин
/usr/local/lib/ongrid-edge/apply-pending-upgrade.shADR-024 staged-bundle swap-hook
/etc/ongrid-edge/ongrid-edge.envaccess/secret key, cloud addr (mode 640, root:ongrid-edge)
/etc/systemd/system/ongrid-edge.servicesystemd-юнит
/var/lib/ongrid-edge/StateDirectory: pending-upgrade staging, dedupe state
/var/log/ongrid-edge/локальная log-директория (mode 750, owned by ongrid-edge)

Системный пользователь ongrid-edge создаётся (без shell, без home) и добавляется в две группы: adm (чтобы promtail мог читать /var/log/*, у которых mode 640 root:adm) и systemd-journal (чтобы мог читать journal).

Systemd-юнит

Дословно из deploy/install/edge/install.sh:

ini
[Unit]
Description=ongrid edge agent
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
EnvironmentFile=/etc/ongrid-edge/ongrid-edge.env
ExecStartPre=-+/usr/local/lib/ongrid-edge/apply-pending-upgrade.sh
ExecStart=/usr/local/bin/ongrid-edge
Restart=always
RestartSec=5
User=ongrid-edge
Group=ongrid-edge
AmbientCapabilities=CAP_NET_ADMIN
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
StateDirectory=ongrid-edge
StateDirectoryMode=0755
ReadWritePaths=/var/log/ongrid-edge
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Хайлайты, которые стоит знать:

  • ProtectSystem=strict делает /usr, /boot и /etc read-only. Агент никогда не пишет вне StateDirectory= (/var/lib/ongrid-edge) или ReadWritePaths= (/var/log/ongrid-edge).
  • AmbientCapabilities=CAP_NET_ADMIN — это то, что позволяет нескольким edge-скиллам делать read-only network introspection (ss -ntlp-style probes через nft list ruleset, conntrack reads). Сам агент никогда не открывает raw sockets.
  • ExecStartPre=-+ (- игнорирует failure, + запускает как root) подключает ADR-024 staged-bundle swap. Если pending апгрейд был stage'нут на предыдущей загрузке, этот hook его применяет, потом выходит 0 в любом случае.
  • StandardOutput=journal — контракт с promtail — собственные логи агента journald-readable, не на stdout-of-pid-1, и journal-source promtail их подхватывает.

Источник логов: journald, не syslog

Promtail сконфигурирован скрейпить journald (/run/log/journal для non-persistent, /var/log/journal для persistent). Он не tail'ит /var/log/syslog или /var/log/messages. Если ваш дистрибутив отгружает rsyslog, и вы отключили persistent journal, включите его:

sh
mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal
systemctl restart systemd-journald

Без persistent journal logs-плагин всё ещё работает, но его история ограничена RAM (runtime journal на /run/log/journal).

Non-systemd Linux (sysvinit / OpenRC / runit)

Curl-pipe installer hard-fails на отсутствующий systemctl. Вы всё ещё можете запустить агента — положите бинарь в /usr/local/bin/ongrid-edge, напишите свой init-script, который экспортирует три обязательных env (ONGRID_EDGE_CLOUD_ADDR, ONGRID_EDGE_ACCESS_KEY, ONGRID_EDGE_SECRET_KEY) и exec'ит бинарь, и вы готовы. Вы теряете:

  • Auto-restart при падении (замените тем, что предлагает ваш init-система).
  • Hook apply-pending-upgrade.sh, так что remote whole-bundle апгрейды (ADR-024) молча no-op'ят.
  • Plugin-бинари (installer тоже их fetch'ит, см. выше).

Эти четыре plugin-бинаря также достижимы на https://<manager>/edge/<name>-linux-<arch>; скачайте их вручную в директорию по вашему выбору и направьте ONGRID_EDGE_PLUGIN_BIN_DIR на неё.

Capabilities, которые агенту НЕ нужны

  • Ему не нужен root в рантайме (он работает как пользователь ongrid-edge).
  • Ему не нужен CAP_SYS_ADMIN, CAP_NET_RAW или CAP_SYS_PTRACE. Если скилл просит что-либо из этого, cmdpolicy-гейт отказывает.
  • Ему не нужен Docker. Plugin runtime — простой supervisor subprocess'ов, не контейнеры.

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

ПортBindЗачем
9101localhostсобственные /metrics и /healthz агента
9102localhostnode_exporter (когда hostmetrics плагин включён)
9256localhostprocess-exporter (когда procmetrics плагин включён)

Только исходящее tunnel-соединение к порту 40012 manager'а должно проходить через ваш firewall. Никакие входящие порты не нужно открывать на edge-хосте.

Деинсталляция

sh
curl -k -sSL https://<manager>/install.sh | sudo bash -s -- --uninstall

Это останавливает сервис, удаляет бинарь, env-файл и systemd-юнит. Намеренно оставляет /var/log/ongrid-edge/ на месте — очистите вручную, если хотите, чтобы это ушло.