Zum Inhalt springen

Agent

Der Agent ist Teil von Vaicoa Pro und Vaicoa Team. Wie du ihn installierst: Agent installieren.

Der Vaicoa-Agent ist ein OS-Paket, cloudviewer-agent, rund um den Upstream-Collector Vector. Er sendet Metriken und Warn-Log-Zeilen von einem Linux-Server an Vaicoa, und Job-Reports über cloudviewer-report. Der Gerätemodus nutzt ihn nicht.

FamiliePaketmanagerPaket
Debian, Ubuntuapt.deb
RHEL-Familie: Rocky Linux, AlmaLinux, CentOS Stream, Fedoradnf oder yum.rpm
Voraussetzung
Architekturx86-64 und Arm64 (etwa Hetzners CAX-Server). Das Paket enthält keinen kompilierten Code (all / noarch); Vectors Repositories liefern den Collector für jede Architektur
Init-Systemsystemd
Werkzeugecurl. Auf Debian und Ubuntu außerdem gpg, wenn der Installer Vectors Repository hinzufügen muss
Installationals root
Getestetdie komplette Installation, vom Paket bis zu den ersten Daten, wurde auf Ubuntu 24.04, Debian 12 und Rocky Linux 9 getestet
Andere SystemeAlpine, NixOS und Systeme ohne systemd: das Container-Image oder die Dateien aus dem Verzeichnis agent/ des Repositorys, von Hand installiert
Paketcloudviewer-agent: wenige KB lesbarer Shell-Skripte und systemd-Units, keine eigenen Binaries. Gebaut aus dem Open-Source-Repository cloudviewer-app/cloudviewer-agent (Apache-2.0)
Version<year>.<quarter>.<patch>, zum Beispiel 2026.3.0
Collectordas Paket vector (0.57.0 oder neuer) aus Vectors eigenem signierten Repository; cloudviewer-agent hängt davon ab
Signaturschlüsselhttps://get.vaicoa.com/keys/cloudviewer.gpg
aptdeb [signed-by=/usr/share/keyrings/cloudviewer.gpg] https://get.vaicoa.com/apt stable main in /etc/apt/sources.list.d/cloudviewer.list
dnf, yum/etc/yum.repos.d/cloudviewer.repo mit baseurl=https://get.vaicoa.com/rpm, gpgcheck=1, repo_gpgcheck=1
Vector, apthttps://apt.vector.dev/ stable vector-0 in /etc/apt/sources.list.d/vector.list, Schlüssel von keys.datadoghq.com in /usr/share/keyrings/datadog-archive-keyring.gpg
Vector, dnfhttps://yum.vector.dev/stable/vector-0/$basearch/ in /etc/yum.repos.d/vector.repo
Updatesmit dem Paketmanager: apt upgrade, dnf upgrade
Vector festpinnenVectors Repositories behalten jede Version, apt-Preferences oder dnf versionlock funktionieren also

Der Installer fügt Vectors Repository nur hinzu, wenn vector nicht installiert ist und weder vector.list noch vector.repo existiert.

Terminal-Fenster
# Ein Server, mit seinem Token aus Überwachte Server → Server hinzufügen → Ein Server
curl -fsSL https://get.vaicoa.com/agent | sh -s -- --token <agent_token>
# Hetzner-Cloud-Server, mit einem Flotten-Token (Server hinzufügen → Flotten-Registrierung)
curl -fsSL https://get.vaicoa.com/agent | sh -s -- --enroll-token <fleet_token>
# Den Agent entfernen
curl -fsSL https://get.vaicoa.com/agent | sh -s -- --uninstall

Der Installer prüft auf root, systemd und curl, erkennt apt, dnf oder yum, fügt die Repositories hinzu, installiert cloudviewer-agent mit dem Paketmanager und führt cloudviewer-agent enroll aus. Danach verwaltet kein Skript mehr etwas auf dem Server.

FlagBedeutung
--token <t>Agent-Token pro Server aus dem Portal, einmal angezeigt. Optional, wenn /etc/cloudviewer-agent/agent.env schon existiert
--enroll-token <t>Registrierungs-Token für die Flotte. Nur Hetzner-Cloud-Server: Der Server identifiziert sich über den Metadaten-Dienst. Nicht mit --token kombinierbar
--facade-url <u>Basis-URL der Vaicoa API. Standard https://api.vaicoa.com
--uninstallEntfernt den Agent, seine Konfiguration, sein Token und gepufferte Daten, über den Paketmanager
--helpZeigt die Verwendung

Vorab eingerichtete Installation (cloud-init, Ansible, Terraform user_data): Schreib CV_AGENT_TOKEN=<agent_token> (oder CV_AGENT_ENROLL_TOKEN=<fleet_token>) nach /etc/cloudviewer-agent/agent.env, Modus 0600, bevor du das Paket installierst. Das Paket registriert den Server dann bei der Installation. cloudviewer-agent enroll ohne Flags macht dasselbe auf einem Server, der das Paket schon hat.

Token pro ServerRegistrierungs-Token für die Flotte
Erstellt unterÜberwachte Server → Server hinzufügen → Ein Server, eins pro ServerServer hinzufügen → Flotten-Registrierung, eins pro Rollout, für ein Projekt
ServerBeliebigeNur Hetzner-Cloud-Server: identifiziert über den Metadaten-Dienst
Auf dem ServerIn agent.envNicht gespeichert. Der Server erhält sein eigenes Token pro Server
Mit dem Cloud-Server in deinem Projekt verknüpftNein, noch nichtJa
Agent-Charts, Jobs und Log-Zeilen in der Detailansicht eines Cloud-ServersNeinJa
Außer Dienst gestellt, wenn der Cloud-Server über die Hetzner API gelöscht wirdNeinJa
Dedizierte ServerJa, mit eigener DetailansichtNicht möglich
Zuletzt benutztWährend einer Rotation pro Token angezeigtListe Registrierungs-Tokens, pro Token
EntziehenAgent-Token entziehen: Jedes Token des Servers funktioniert innerhalb von etwa zehn Sekunden nicht mehrRegistrierungs-Token entziehen: keine neuen Registrierungen; registrierte Server melden weiter

Die Flotten-Registrierung wird mit einer Meldung abgewiesen: bei einem unbekannten oder entzogenen Token, wenn die Server-Grenze des Plans erreicht ist, und für einen Server, der nicht im Projekt des Tokens ist.

BefehlWas er tut
cloudviewer-agent enroll --token <t>Prüft das Token bei Vaicoa, schreibt agent.env und die Konfiguration, aktiviert und startet die Dienste. Erneut mit einem neuen Token ausgeführt, ersetzt es das Token direkt
cloudviewer-agent enroll --enroll-token <t>Flotten-Registrierung über den Metadaten-Dienst der Hetzner Cloud, dann dasselbe wie oben mit dem neuen eigenen Token des Servers. Tut nichts auf einem Server, der schon registriert ist
cloudviewer-agent enrollRegistriert aus einer vorhandenen agent.env
cloudviewer-agent statusRegistriert oder nicht, der Zustand der Dienste, die Konfigurationsversion und die Vector-Version. Endet mit 3, wenn nicht registriert
cloudviewer-agent renderBaut vector.yaml aus den letzten Parametern neu, ohne Netzwerk. Das Paket führt es bei Upgrades aus
cloudviewer-agent uninstallMeldet den Server ab, stoppt die Dienste und entfernt Konfiguration, Token und Daten. Das Paket bleibt installiert
cloudviewer-reportWrapper für Job-Reports, siehe Job-Reports-API
systemctl status cloudviewer-agentDer Collector-Dienst

enroll akzeptiert --facade-url <u> und --quiet. enroll, render und uninstall brauchen root. enroll erneut auszuführen ist immer sicher.

PfadWas
/usr/bin/cloudviewer-agentDie Befehle oben
/usr/bin/cloudviewer-reportWrapper für Job-Reports
/usr/libexec/cloudviewer-agent/fetch-configFragt Vaicoa jede Minute nach den Parametern
/usr/libexec/cloudviewer-agent/render-configBaut vector.yaml aus den Parametern
/usr/libexec/cloudviewer-agent/fleet-enrollFlotten-Registrierung
/usr/lib/systemd/system/cloudviewer-agent.serviceVector, mit der erzeugten Konfiguration
/usr/lib/systemd/system/cloudviewer-agent-config.service und .timerDie Parameterprüfung, jede Minute
/usr/share/doc/cloudviewer-agent/README.mdDie README des Repositorys
/etc/cloudviewer-agent/agent.envCV_AGENT_TOKEN und CV_AGENT_FACADE_URL. Modus 0600, Eigentümer cloudviewer-agent
/etc/cloudviewer-agent/manifestDie zuletzt empfangenen Parameter
/etc/cloudviewer-agent/vector.yamlDie erzeugte Konfiguration. Modus 0640, cloudviewer-agent:vector. Wird bei jeder Änderung neu geschrieben; nicht bearbeiten
/etc/cloudviewer-agent/config.etagVersion der letzten Parameter
/var/lib/cloudviewer-agent/Vectors Puffer und Checkpoints, Eigentümer vector. Nicht /var/lib/vector, damit ein eigenes Vector daneben laufen kann

dpkg -L cloudviewer-agent oder rpm -ql cloudviewer-agent listet jede Datei, die das Paket installiert.

NutzerFührt ausDarf
vectorcloudviewer-agent.service (der Collector)journald und das Auth-Log über seine Gruppen systemd-journal und adm lesen; seine Konfiguration lesen, nicht schreiben. Angelegt vom Paket vector
cloudviewer-agentcloudviewer-agent-config.service (die Parameterprüfung)/etc/cloudviewer-agent schreiben. Angelegt vom Paket

Nach der Registrierung läuft nichts als root. Nur die Befehle, die du selbst ausführst (enroll, render, uninstall), tun das.

DatenQuellePlan
CPU, Speicher, Load, Festplatten-I/O, Netzwerk und Dateisystembelegung pro Mountpoint, alle 30 SekundenVectors Host-MetrikenPro und Team
System-Log-Zeilen mit Priorität 0 bis 4 (emergency bis warning), aus allen UnitsjournaldPro und Team
SSH- und sudo-Log-Zeilen/var/log/auth.log oder /var/log/secure, falls das System eine davon schreibtTeam, nachdem ein Admin im Portal unter Log-Erfassung die Option SSH- und sudo-Log-Zeilen erfassen eingeschaltet hat
Job-Reportscloudviewer-report oder dein eigener HTTP-AufrufPro und Team
  • Die App zeigt Charts für Speicher, Festplatte und Load aus dem Agent. CPU- und Netzwerk-Charts kommen aus der Hetzner Cloud API, nur Cloud-Server haben sie also.
  • Zeilen deiner eigenen Dienste sind dabei, wenn sie mit Priorität Warning oder höher nach journald gehen, zum Beispiel logger -p user.warning -t backup "s3 sync retried 3 times, succeeded" oder systemd-cat -t myapp -p warning. Zeilen der Stufe Info werden nicht gesendet.
  • Bevor eine Zeile den Server verlässt, werden die Werte nach authorization, bearer, password, passwd, secret, token und key sowie PEM-Blöcke mit privaten Schlüsseln durch [REDACTED] ersetzt. Vaicoa wendet dieselben Regeln noch einmal an, wenn die Zeile ankommt. Siehe Log-Kontext.
  • Log-Zeilen werden 72 Stunden aufbewahrt, höchstens 2.000 Zeilen pro Server.
  • Schaltest du SSH- und sudo-Zeilen aus, stoppen sie bei der nächsten Parameterprüfung jedes Servers, meist innerhalb einer Minute. Zeilen, die danach ankommen, werden abgewiesen.
  • Sonst nichts: keine Anwendungs-Logs außer journald, keine Dateiinhalte, keine Prozessliste.
  • Enthält der Plan des Teams den Agent nicht mehr, speichert Vaicoa nicht mehr, was er sendet. Auf dem Server ändert sich nichts.
GrenzeWertDarüber
Log-Zeilen120 pro MinuteVerworfen. Die App sagt, dass Zeilen gedrosselt wurden
Länge einer Log-Zeile2.048 ByteAbgeschnitten
Metrik-Samples10.000 pro MinuteVerworfen. Die App sagt, dass Metriken gedrosselt wurden
Neue Metrik-Serien2.000 pro StundeNeue Serien verworfen; bekannte Serien werden weiter angenommen
Gespeicherte Log-Zeilen72 Stunden, höchstens 2.000 ZeilenDie ältesten zuerst entfernt
Job-Reportssiehe Job-Reports-API

Jede Grenze gilt für einen Server. Andere Server des Teams sind nicht betroffen.

Der Agent baut nur Verbindungen nach außen auf. Er öffnet keinen eingehenden Port.

ZielPortWann
api.vaicoa.com443Immer: Parameter jede Minute, Metriken, Log-Zeilen, Job-Reports, Registrierung und Abmeldung
get.vaicoa.com443Installation und Update: Installer, Paket-Repository, Signaturschlüssel
apt.vector.dev oder yum.vector.dev443Installation und Update: das Paket vector
keys.datadoghq.com443Installation und Update: Vectors Signaturschlüssel
169.254.169.25480Nur Flotten-Registrierung: der Metadaten-Dienst der Hetzner Cloud, für die ID des Servers
ghcr.io443Nur Container und Kubernetes: Image und Helm-Chart

Der Installer hat keine Proxy-Option. Ein für die Dienste gesetztes HTTPS_PROXY ist ungetestet.

Planwechsel und Einstellungen aus dem Portal erreichen deine Server innerhalb einer Minute, ohne SSH-Zugang. Jede Minute fragt der Agent Vaicoa nach einer kleinen Menge deklarierter Parameter, etwa dem Plan und ob er journald-Zeilen sowie SSH- und sudo-Zeilen senden soll. Er prüft sie gegen eine feste Liste von Schlüsseln und Werten und baut seine Konfiguration lokal aus der Vorlage im Paket. Alles andere, etwa ein unbekannter Schlüssel, eine unbekannte Version oder eine vollständige Konfiguration, wird abgewiesen, und die letzte funktionierende Konfiguration bleibt.

Auf diesem Weg wird kein ausführbarer Code übertragen, und das Token reist nie in den Parametern mit. Selbst wenn die Server von Vaicoa kompromittiert wären, könnte ein Angreifer nur diese dokumentierten Einstellungen ändern, aber keinen Code auf deinen Servern ausführen.

Im Portal (Überwachte Server):

KennzeichnungBedeutung
WartetRegistriert, noch keine Meldung
VerbundenLetzte Meldung vor weniger als 5 Minuten
VeraltetLetzte Meldung vor 5 Minuten bis 1 Stunde
OfflineLetzte Meldung vor mehr als 1 Stunde
EntzogenDer Server hat kein aktives Token
Außer DienstEin per Flotte registrierter Cloud-Server, der aus seinem Hetzner-Projekt gelöscht wurde, oder der Agent hat sich abgemeldet. 72 Stunden sichtbar, dann mit seinen Daten gelöscht

Ein per Flotte registrierter Server zeigt „selbst registriert über“ und das Label des Tokens. Während einer Rotation zeigt die Zeile, wann das alte und das neue Token zuletzt benutzt wurden.

In der App, für dedizierte Server:

ZustandBedeutung
Warten auf AgentNoch keine Meldung
Agent verbundenDer Agent hat in den letzten 5 Minuten gemeldet
Zuletzt gesehen …Der Agent hat seit mehr als 5 Minuten nicht gemeldet; die Zeit ist die seiner letzten Meldung
Agent widerrufenDer Server hat kein aktives Token
AusgemustertWie Außer Dienst im Portal

Nach 5 Minuten ohne Metriken löst der Server stopped reporting aus (Alarmregeln).

AktionMeldet den Server abEntfernt vom Server
apt purge cloudviewer-agentjaPaket, Konfiguration, Token, gepufferte Daten
apt remove cloudviewer-agentneinnur die Paketdateien
dnf remove cloudviewer-agentjaPaket, Konfiguration, Token, gepufferte Daten
Installer mit --uninstalljaführt den Paketmanager wie oben aus
cloudviewer-agent uninstalljaKonfiguration, Token, gepufferte Daten; das Paket bleibt
Server entfernen im Portalentfernt ihn aus der Überwachungnichts; sein Token funktioniert nicht mehr
helm uninstall cloudviewer-agentneindas DaemonSet
Löschen eines per Flotte registrierten Cloud-Servers über die Hetzner APIautomatisch außer Dienst gestelltentfällt

Die Abmeldung geschieht nach bestem Bemühen. Schlägt der Aufruf fehl, sagt der Befehl das; prüf dann das Portal und entferne den Server dort, wenn er nicht Außer Dienst zeigt. Ein außer Dienst gestellter Server gibt seinen Platz im Plan sofort frei.

Was installiert bleibt:

  • Debian, Ubuntu: das Paket vector, /etc/apt/sources.list.d/cloudviewer.list und vector.list sowie die Schlüssel in /usr/share/keyrings/. Nutzt du Vector sonst nicht, führ apt autoremove aus und lösch die beiden List-Dateien.
  • RHEL-Familie: /etc/yum.repos.d/cloudviewer.repo und vector.repo. dnf entfernt vector normalerweise zusammen mit dem Agent.
  • Der Systemnutzer cloudviewer-agent.
Terminal-Fenster
dpkg -L cloudviewer-agent && dpkg --verify cloudviewer-agent # Debian, Ubuntu
rpm -ql cloudviewer-agent && rpm -V cloudviewer-agent # RHEL-Familie

Der erste Befehl listet jede Datei des Pakets, der zweite meldet Dateien, die sich seit der Installation geändert haben. Token, Parameter und Puffer in /etc/cloudviewer-agent/ und /var/lib/cloudviewer-agent/ gehören nicht zum Paket.

Für Hosts ohne apt, dnf oder systemd:

Terminal-Fenster
docker run -d --name cloudviewer-agent --restart always \
-e CV_AGENT_TOKEN=<agent_token> \
-v /proc:/host/proc:ro -v /sys:/host/sys:ro -v /:/host/root:ro \
-e PROCFS_ROOT=/host/proc -e SYSFS_ROOT=/host/sys \
ghcr.io/cloudviewer-app/cloudviewer-agent:<version>
VariableBedeutung
CV_AGENT_TOKEN, CV_AGENT_TOKEN_FILEAgent-Token pro Server oder eine Datei, die es enthält
CV_AGENT_ENROLL_TOKEN, CV_AGENT_ENROLL_TOKEN_FILERegistrierungs-Token für die Flotte, nur Hetzner Cloud; der Container muss den Metadaten-Dienst erreichen
CV_AGENT_FACADE_URLBasis-URL der Vaicoa API. Standard https://api.vaicoa.com

Der Container prüft wie das Paket alle 60 Sekunden auf neue Parameter. Ein falsches oder entzogenes Token stoppt ihn mit einer Meldung in seinem Log.

Chartoci://ghcr.io/cloudviewer-app/charts/cloudviewer-agent
AufbauEin DaemonSet: ein Pod pro Node, hostNetwork, read-only Mounts von /proc, /sys und / des Nodes
ZugangsdatenEin Secret mit dem Schlüssel enroll-token (ein Flotten-Token, für Cluster) oder token (ein Token pro Server, nur für Single-Node-Cluster: Ein Token auf mehreren Nodes meldet sie alle als denselben Server). Gibt es beide, gewinnt token
ValuesexistingSecret, enrollToken, token, facadeUrl, image.repository, image.tag, image.digest, image.pullPolicy, resources, tolerations, nodeSelector, podAnnotations, priorityClassName
BerechtigungenKein ServiceAccount und kein RBAC; der Pod spricht nur mit Vaicoa
Nodes außerhalb der Hetzner CloudKönnen kein Flotten-Token nutzen; ihre Pods starten mit einer Meldung neu, die das sagt
Entfernenhelm uninstall cloudviewer-agent meldet die Nodes nicht ab. Nodes, die aus dem Hetzner-Projekt gelöscht werden, gehen von selbst außer Dienst; die anderen entfernst du im Portal

Details: die Chart-README.