# sown/monitoring architecture

> Architecture diagram of the GitHub repository sown/monitoring, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sown/monitoring
- Repository: https://github.com/sown/monitoring

## Overview

SOWN’s monitoring configuration manager gathers active inventory from NetBox, combines it with checked-in Icinga configuration, renders inventory-driven templates, compares the result with the active Icinga package, and optionally submits and verifies an update. The configuration also defines monitoring commands, dependencies, notifications, zones, and host services; check programs live separately. The sampled source supports the generator and API interactions, while the README documents the deployment workflow. Some configuration and check behavior is inferred only from paths and names.

Main entry points: [`icingagen/icingagen/cli.py`](https://github.com/sown/monitoring/blob/master/icingagen/icingagen/cli.py) (Generator CLI), [`config/zones.d/sown`](https://github.com/sown/monitoring/tree/master/config/zones.d/sown) (Icinga configuration), [`icingagen/icingagen/render.py`](https://github.com/sown/monitoring/blob/master/icingagen/icingagen/render.py) (Template renderer), [`icingagen/icingagen/logconfig.py`](https://github.com/sown/monitoring/blob/master/icingagen/icingagen/logconfig.py) (Logging setup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_generation["Config generation"]
  node_cli["Generator CLI<br/>[cli.py]"]
  node_renderer["Template renderer<br/>[render.py]"]
  node_logging["Logging setup<br/>[logconfig.py]"]
end

subgraph group_definitions["Icinga definitions"]
  node_config_root["Icinga configuration<br/>[sown]"]
  node_host_templates["Host templates<br/>[hosts.j2.conf]"]
  node_host_services["Host services<br/>[host-services]"]
  node_temp_config["Temperature config<br/>[host-temp.conf]"]
  node_services_config["Service definitions<br/>[services.conf]"]
  node_commands_config["Command definitions<br/>[commands.conf]"]
  node_dependencies_config["Dependencies<br/>[dependencies.conf]"]
  node_notifications_config["Notifications<br/>[notifications.conf]"]
  node_constants_config["Constants<br/>[000_constants.conf]"]
end

subgraph group_integration["External systems"]
  node_icinga_client["Icinga API client<br/>[icinga.py]"]
  node_netbox[("NetBox inventory")]
  node_icinga_api["Icinga API"]
end

subgraph group_checks["Monitoring checks"]
  node_checks["Check programs"]
  node_notification_scripts["Notification scripts"]
end

node_operator(("Operator"))
node_syslog["System syslog"]

node_operator -->|"runs"| node_cli
node_cli -->|"queries inventory"| node_netbox
node_cli -->|"reads config"| node_config_root
node_cli -->|"reads template"| node_host_templates
node_cli -->|"renders templates"| node_renderer
node_renderer -->|"loads template"| node_host_templates
node_cli -->|"compares and updates"| node_icinga_client
node_icinga_client -->|"reads and submits stages"| node_icinga_api
node_cli -->|"configures logging"| node_logging
node_logging -->|"writes logs"| node_syslog
node_commands_config -->|"defines checks"| node_checks
node_notifications_config -.->|"invokes notifications"| node_notification_scripts
node_services_config -->|"defines services"| node_host_services
node_host_services -->|"includes temperature checks"| node_temp_config
node_config_root -->|"includes constants"| node_constants_config
node_config_root -->|"includes commands"| node_commands_config
node_config_root -->|"includes dependencies"| node_dependencies_config
node_config_root -->|"includes notifications"| node_notifications_config

click node_cli "https://github.com/sown/monitoring/blob/master/icingagen/icingagen/cli.py"
click node_renderer "https://github.com/sown/monitoring/blob/master/icingagen/icingagen/render.py"
click node_icinga_client "https://github.com/sown/monitoring/blob/master/icingagen/icingagen/icinga.py"
click node_config_root "https://github.com/sown/monitoring/tree/master/config/zones.d/sown"
click node_host_templates "https://github.com/sown/monitoring/blob/master/config/zones.d/sown/hosts.j2.conf"
click node_host_services "https://github.com/sown/monitoring/tree/master/config/zones.d/sown/host-services"
click node_temp_config "https://github.com/sown/monitoring/blob/master/config/zones.d/sown/host-temp.conf"
click node_services_config "https://github.com/sown/monitoring/blob/master/config/zones.d/sown/services.conf"
click node_commands_config "https://github.com/sown/monitoring/blob/master/config/zones.d/sown/commands.conf"
click node_dependencies_config "https://github.com/sown/monitoring/blob/master/config/zones.d/sown/dependencies.conf"
click node_notifications_config "https://github.com/sown/monitoring/blob/master/config/zones.d/sown/notifications.conf"
click node_constants_config "https://github.com/sown/monitoring/blob/master/config/zones.d/sown/000_constants.conf"
click node_checks "https://github.com/sown/monitoring/tree/master/checks"
click node_notification_scripts "https://github.com/sown/monitoring/tree/master/scripts"
click node_logging "https://github.com/sown/monitoring/blob/master/icingagen/icingagen/logconfig.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_renderer,node_logging toneBlue
class node_config_root,node_host_templates,node_host_services,node_temp_config,node_services_config,node_commands_config,node_dependencies_config,node_notifications_config,node_constants_config toneAmber
class node_icinga_client,node_netbox,node_icinga_api toneMint
class node_checks,node_notification_scripts toneRose
class node_operator,node_syslog toneIndigo
```

## Components

### Config generation

- [Generator CLI](https://github.com/sown/monitoring/blob/master/icingagen/icingagen/cli.py): `icingagen/icingagen/cli.py`
- [Template renderer](https://github.com/sown/monitoring/blob/master/icingagen/icingagen/render.py): `icingagen/icingagen/render.py`
- [Logging setup](https://github.com/sown/monitoring/blob/master/icingagen/icingagen/logconfig.py): `icingagen/icingagen/logconfig.py`

### Icinga definitions

- [Icinga configuration](https://github.com/sown/monitoring/tree/master/config/zones.d/sown): `config/zones.d/sown`
- [Host templates](https://github.com/sown/monitoring/blob/master/config/zones.d/sown/hosts.j2.conf): `config/zones.d/sown/hosts.j2.conf`
- [Host services](https://github.com/sown/monitoring/tree/master/config/zones.d/sown/host-services): `config/zones.d/sown/host-services`
- [Temperature config](https://github.com/sown/monitoring/blob/master/config/zones.d/sown/host-temp.conf): `config/zones.d/sown/host-temp.conf`
- [Service definitions](https://github.com/sown/monitoring/blob/master/config/zones.d/sown/services.conf): `config/zones.d/sown/services.conf`
- [Command definitions](https://github.com/sown/monitoring/blob/master/config/zones.d/sown/commands.conf): `config/zones.d/sown/commands.conf`
- [Dependencies](https://github.com/sown/monitoring/blob/master/config/zones.d/sown/dependencies.conf): `config/zones.d/sown/dependencies.conf`
- [Notifications](https://github.com/sown/monitoring/blob/master/config/zones.d/sown/notifications.conf): `config/zones.d/sown/notifications.conf`
- [Constants](https://github.com/sown/monitoring/blob/master/config/zones.d/sown/000_constants.conf): `config/zones.d/sown/000_constants.conf`

### External systems

- [Icinga API client](https://github.com/sown/monitoring/blob/master/icingagen/icingagen/icinga.py): `icingagen/icingagen/icinga.py`
- **NetBox inventory**
- **Icinga API**

### Monitoring checks

- [Check programs](https://github.com/sown/monitoring/tree/master/checks): `checks`
- [Notification scripts](https://github.com/sown/monitoring/tree/master/scripts): `scripts`

### Other components

- **Operator**
- **System syslog**

## Connections

- Operator → Generator CLI: runs
- Generator CLI → NetBox inventory: queries inventory
- Generator CLI → Icinga configuration: reads config
- Generator CLI → Host templates: reads template
- Generator CLI → Template renderer: renders templates
- Template renderer → Host templates: loads template
- Generator CLI → Icinga API client: compares and updates
- Icinga API client → Icinga API: reads and submits stages
- Generator CLI → Logging setup: configures logging
- Logging setup → System syslog: writes logs
- Command definitions → Check programs: defines checks
- Notifications → Notification scripts: invokes notifications
- Service definitions → Host services: defines services
- Host services → Temperature config: includes temperature checks
- Icinga configuration → Constants: includes constants
- Icinga configuration → Command definitions: includes commands
- Icinga configuration → Dependencies: includes dependencies
- Icinga configuration → Notifications: includes notifications
