Five steps, each one with its expected result. If a step does not return what is written here, stop on it: the next one will fail in silence.
Two dependencies only, each with a declared reason in the repository.
# for rhel and derivatives sudo dnf localinstall -y https://rpm.rda.run/repo.rpm sudo dnf install -y corvo # for debian / ubuntu and derivatives wget https://apt.rda.run/pool/main/apt-rda-run_1.0.0_all.deb sudo dpkg -i apt-rda-run_1.0.0_all.deb sudo apt update sudo apt install corvo
The token lives in a file, with mode 0600. check warns if it is looser than that.
endpoint: url: https://ninho.example.com/api/ingest token_file: /etc/corvo/token gzip: true queue: dir: /var/lib/corvo/queue max_bytes: 512MiB full_policy: drop_oldest
A nonzero exit means it slots straight into Ansible, or any pipeline that already watches exit codes.
On AlmaLinux the directory is /etc/audit/plugins.d/, not the /etc/audisp/ of RHEL 7 and 8.
echo '-a always,exit -F arch=b64 -S execve -k cmds' \ | sudo tee /etc/audit/rules.d/50-cmds.rules sudo augenrules --load sudo systemctl restart auditd
Run any command on the audited machine and look for the host on the agents screen.
id -u curl -s -H "Authorization: Bearer $NINHO_READ_TOKEN" https://ninho.example.com/api/agents \ | jq '.[] | select(.host=="srv-web-01")'
corvo_queue_depth_bytes and the silence per host. A growing queue points at the endpoint. Long silence on an active machine points at the agent.