Skip to content

Linux(edge)

edge エージェント(ongrid-edge)は Ongrid に観測させたいすべてのホスト上で動きます。Linux では単一の curl-pipe コマンドで systemd サービスとしてインストールされます。エージェントは単一の静的 Go バイナリ + 4 つのプラグインバイナリ(promtail、node_exporter、process-exporter、otelcol-contrib)です。

アーキテクチャ

GOOSGOARCHステータス
linuxamd64ファーストクラス
linuxarm64ファーストクラス

インストーラは uname -m を読み、manager の /edge/ 静的パスからダウンロードする適合バイナリを選びます:

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」セクションを参照してください。

インストーラが配置するもの

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 ステージドバンドルスワップフック
/etc/ongrid-edge/ongrid-edge.envaccess/secret key、cloud addr(mode 640、root:ongrid-edge)
/etc/systemd/system/ongrid-edge.servicesystemd unit
/var/lib/ongrid-edge/StateDirectory:保留アップグレードステージング、重複排除状態
/var/log/ongrid-edge/ローカルログディレクトリ(mode 750、ongrid-edge 所有)

システムユーザー ongrid-edge が作成され(シェルなし、ホームなし)2 つのグループに追加されます:adm(mode 640 root:adm/var/log/* を promtail が読めるように)と systemd-journal(ジャーナルを読めるように)。

systemd unit

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 を読み取り専用にします。エージェントは StateDirectory=/var/lib/ongrid-edge)または ReadWritePaths=/var/log/ongrid-edge)の外に書きません。
  • AmbientCapabilities=CAP_NET_ADMIN は、少数の edge スキルが読み取り専用ネットワーク内省(nft list ruleset 経由の ss -ntlp 系プローブ、conntrack 読み取り)を行えるためのものです。エージェント自身は生ソケットを決して開きません。
  • ExecStartPre=-+- は失敗を無視、+ は root で実行)は ADR-024 ステージドバンドルスワップを配線します。前回の起動で保留アップグレードがステージされていれば、このフックがそれを適用し、どちらにせよ 0 で抜けます。
  • StandardOutput=journal は promtail との契約です —— エージェント自身のログは pid-1 の stdout ではなく journald 読み取り可能で、promtail の journal ソースがそれを拾います。

ログソース:syslog ではなく journald

Promtail は journald(非永続なら /run/log/journal、永続なら /var/log/journal)をスクレイプする設定です。/var/log/syslog/var/log/messages を tail しません。ディストリビューションが rsyslog を出荷し永続ジャーナルを無効化しているなら、有効化してください:

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

永続ジャーナルなしでも logs プラグインは動きますが、履歴は RAM(/run/log/journal のランタイムジャーナル)で制限されます。

Non-systemd Linux(sysvinit / OpenRC / runit)

curl-pipe インストーラは systemctl が無いとハード失敗します。それでもエージェントを走らせることはできます —— バイナリを /usr/local/bin/ongrid-edge に置き、必要な 3 つの env(ONGRID_EDGE_CLOUD_ADDRONGRID_EDGE_ACCESS_KEYONGRID_EDGE_SECRET_KEY)をエクスポートしバイナリを exec する独自の init スクリプトを書けば、完了です。失うもの:

  • クラッシュ時自動再起動(init システムが提供するものに置き換える)。
  • apply-pending-upgrade.sh フック、なのでリモート全バンドルアップグレード(ADR-024)はサイレントに no-op になる。
  • プラグインバイナリ(インストーラがそれも fetch する、上記参照)。

それら 4 つのプラグインバイナリは https://<manager>/edge/<name>-linux-<arch> でも到達可能です。お好みのディレクトリに手でダウンロードし、ONGRID_EDGE_PLUGIN_BIN_DIR をそこに向けてください。

エージェントが必要としない capability

  • ランタイムで root を必要としない(ongrid-edge ユーザーで動く)。
  • CAP_SYS_ADMINCAP_NET_RAWCAP_SYS_PTRACE を必要としない。スキルがそれらを要求すれば、cmdpolicy ゲートが拒否します。
  • Docker を必要としない。プラグインランタイムはコンテナではなく素のサブプロセス supervisor です。

エージェントが開くポート

ポートバインドなぜ
9101localhostエージェント自身の /metrics/healthz
9102localhostnode_exporter(hostmetrics プラグイン有効時)
9256localhostprocess-exporter(procmetrics プラグイン有効時)

manager のポート 40012 への アウトバウンド トンネル接続のみがファイアウォールを通る必要があります。edge ホスト上に開く必要のあるインバウンドポートはありません。

アンインストール

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

これはサービスを止め、バイナリ、env ファイル、systemd unit を削除します。意図的に /var/log/ongrid-edge/ はそのまま残します —— 消したければ手でパージしてください。