Linux(edge)
edge エージェント(ongrid-edge)は Ongrid に観測させたいすべてのホスト上で動きます。Linux では単一の curl-pipe コマンドで systemd サービスとしてインストールされます。エージェントは単一の静的 Go バイナリ + 4 つのプラグインバイナリ(promtail、node_exporter、process-exporter、otelcol-contrib)です。
アーキテクチャ
| GOOS | GOARCH | ステータス |
|---|---|---|
| linux | amd64 | ファーストクラス |
| linux | arm64 | ファーストクラス |
インストーラは uname -m を読み、manager の /edge/ 静的パスからダウンロードする適合バイナリを選びます:
x86_64 / amd64 → amd64
aarch64 / arm64 → arm64
anything else → error: "unsupported arch"サポートディストリビューション
サーバーと同じセットでテストしています。実際には systemd 245+(StateDirectory= が動くため)と glibc 2.31+ ならエージェントはちゃんと動きます。
| ディストリビューション | テスト対象 |
|---|---|
| Ubuntu | 20.04 LTS、22.04 LTS、24.04 LTS |
| Debian | 11(bullseye)、12(bookworm) |
| RHEL | 8、9 |
| Rocky Linux | 8、9 |
| AlmaLinux | 8、9 |
| Amazon Linux | 2023 |
ディストリビューションがまだ 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/promtail | logs プラグイン |
/usr/local/lib/ongrid-edge/otelcol-contrib | traces プラグイン |
/usr/local/lib/ongrid-edge/node_exporter | host-metrics プラグイン |
/usr/local/lib/ongrid-edge/process_exporter | proc-metrics プラグイン |
/usr/local/lib/ongrid-edge/apply-pending-upgrade.sh | ADR-024 ステージドバンドルスワップフック |
/etc/ongrid-edge/ongrid-edge.env | access/secret key、cloud addr(mode 640、root:ongrid-edge) |
/etc/systemd/system/ongrid-edge.service | systemd 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 から逐語:
[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 を出荷し永続ジャーナルを無効化しているなら、有効化してください:
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_ADDR、ONGRID_EDGE_ACCESS_KEY、ONGRID_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_ADMIN、CAP_NET_RAW、CAP_SYS_PTRACEを必要としない。スキルがそれらを要求すれば、cmdpolicy ゲートが拒否します。- Docker を必要としない。プラグインランタイムはコンテナではなく素のサブプロセス supervisor です。
エージェントが開くポート
| ポート | バインド | なぜ |
|---|---|---|
| 9101 | localhost | エージェント自身の /metrics と /healthz |
| 9102 | localhost | node_exporter(hostmetrics プラグイン有効時) |
| 9256 | localhost | process-exporter(procmetrics プラグイン有効時) |
manager のポート 40012 への アウトバウンド トンネル接続のみがファイアウォールを通る必要があります。edge ホスト上に開く必要のあるインバウンドポートはありません。
アンインストール
curl -k -sSL https://<manager>/install.sh | sudo bash -s -- --uninstallこれはサービスを止め、バイナリ、env ファイル、systemd unit を削除します。意図的に /var/log/ongrid-edge/ はそのまま残します —— 消したければ手でパージしてください。