GOdin

Know what is installed on every machine you run.

GOdin is an open source monitoring server and agent for Linux systems. The agent reports installed packages, pending upgrades and repository state. The server keeps every report in PostgreSQL, ready for Grafana to read.

Written in Go, licensed GPL-3.0. Agent runs anywhere bash and curl do.

What GOdin does

Package drift is quiet. A box misses a reboot, a repository is disabled by hand, a machine stops taking updates entirely, and nobody finds out until something breaks. GOdin makes that state visible across every host you run.

Each agent builds a structured report about its own system and posts it to the server. The server validates it and stores it as JSONB in PostgreSQL, so the whole history stays queryable with plain SQL. GOdin does not draw graphs itself — it feeds tools that already do that well.

There is a sample Grafana dashboard to start from.

A report carries

Host info
Hostname, distribution, kernel and the tags you assign.
Installed packages
Name and version of everything the package manager knows about.
Pending upgrades
What is waiting to be installed, and the version it moves to.
Repositories
Which repositories are configured and enabled, on RPM systems.

How it works

Four moving parts, and only one of them is GOdin's to keep running.

  1. 1

    The agent collects

    A bash script on each host queries the package manager and builds a JSON report. Run it from cron or a systemd timer, as often as you care to know.

  2. 2

    curl sends it

    The report is posted to your GOdin server over HTTP. No agent daemon, no open inbound ports on the host being monitored.

  3. 3

    The server stores it

    GOdin validates the report and writes it to a JSONB column in PostgreSQL, keeping every past report alongside the current one.

  4. 4

    Grafana reads it

    Point any tool that speaks PostgreSQL at the database and query the fleet however you like.

Get GOdin

Packages are published for Debian-family and RHEL-family systems. Add the repository once, then install the server on your central host and the agent on everything you want to watch.

Add the repository

curl -fsSL https://godin.bdrogo.xyz/godin-archive-keyring.gpg \
  | sudo tee /usr/share/keyrings/godin-archive-keyring.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/godin-archive-keyring.gpg] \
https://godin.bdrogo.xyz/deb stable main" \
  | sudo tee /etc/apt/sources.list.d/godin.list

sudo apt update

Install the server

sudo apt install godin-server

Install the agent on each host

sudo apt install godin-client

No packages for your distribution? The server is a single Go binary: clone the repository and run go get && go build. The agent is a bash script you can copy anywhere on your PATH.

Configure

Server

GOdin needs a PostgreSQL database, version 13 or newer. Create it first:

create database godin;
create user godin with encrypted password 'password';
grant all privileges on database godin to godin;
alter database godin owner to godin;

Then write /etc/godin/settings.json, readable by the user that runs the server:

{
  "Address": "0.0.0.0",
  "Port": "80",
  "LogLevel": "INFO",
  "SQLUser": "godin",
  "SQLPassword": "password",
  "SQLDatabaseName": "godin",
  "SQLServerAddress": "localhost",
  "SQLPort": "5432"
}

Change that password. For HTTPS, put GOdin behind nginx or Apache — it does not terminate TLS itself.

Agent

Settings live in /etc/godin/godin-client.conf. The file is sourced by the script, so keep the spaces out of the assignments:

CLIENT_HOSTNAME="myHostname"
SERVER_URL="http://godin.example.com/reports/upload"
TAGS="tag1,tag2"

Call the script on a schedule. Once a day is plenty for package state:

17 6 * * * /usr/bin/godin-client

Tags are free-form. They are stored with the report, so use them for whatever you want to group by later.

Matching versions

Server and agent speak the same report format as long as their first two version numbers match. The patch number is free to drift, so you can upgrade one host at a time and only need to plan for minor releases.

Compatibility
ServerAgentWorks
1.01.0yes
1.2.11.2.3yes
1.31.2.5no