fix: use nixos-version --json for configuration revision
- Use `nixos-version --json` command instead of reading files directly - Add nixpkgs_rev and nixos_version labels to nixos_flake_info metric - Show "unknown" for current_rev when system.configurationRevision not set - Document configurationRevision setup in README Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
36
README.md
36
README.md
@@ -80,9 +80,35 @@ services.prometheus.exporters.nixos = {
|
||||
|--------|------|--------|-------------|
|
||||
| `nixos_flake_input_age_seconds` | Gauge | `input` | Age of flake input in seconds |
|
||||
| `nixos_flake_input_info` | Gauge | `input`, `rev`, `type` | Info gauge with revision and type labels |
|
||||
| `nixos_flake_info` | Gauge | `current_rev`, `remote_rev` | Info gauge with current and remote flake revisions |
|
||||
| `nixos_flake_info` | Gauge | `current_rev`, `remote_rev`, `nixpkgs_rev`, `nixos_version` | Info gauge with system version details |
|
||||
| `nixos_flake_revision_behind` | Gauge | | 1 if current system revision differs from remote latest |
|
||||
|
||||
### Setting Configuration Revision
|
||||
|
||||
For `current_rev` to show the flake's git revision, you must set `system.configurationRevision` in your flake:
|
||||
|
||||
```nix
|
||||
{
|
||||
outputs = { self, nixpkgs, ... }: {
|
||||
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
|
||||
modules = [
|
||||
{
|
||||
system.configurationRevision = self.rev or self.dirtyRev or "dirty";
|
||||
}
|
||||
./configuration.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
This sets the revision to:
|
||||
- `self.rev` - Git commit hash (only available when tree is clean and committed)
|
||||
- `self.dirtyRev` - Dirty revision (e.g., `abc1234-dirty`) when uncommitted changes exist
|
||||
- `"dirty"` - Fallback when neither is available
|
||||
|
||||
Without this setting, `current_rev` will be `"unknown"` and `nixos_flake_revision_behind` will always be 0.
|
||||
|
||||
## Example Prometheus Alerts
|
||||
|
||||
```yaml
|
||||
@@ -130,13 +156,9 @@ groups:
|
||||
|
||||
## Known Limitations
|
||||
|
||||
- The `nixos_flake_info` and `nixos_flake_revision_behind` metrics rely on parsing the git hash from `/run/current-system/nixos-version`. The format of this file varies depending on NixOS configuration:
|
||||
- Standard format: `25.11.20260203.e576e3c`
|
||||
- Custom format: `1994-294a625`
|
||||
- Flake input metrics (`nixos_flake_input_age_seconds`, `nixos_flake_input_info`) reflect the remote flake state, not the currently deployed system. If the deployed system is behind, these will show newer data than what's actually deployed.
|
||||
|
||||
If your system uses a non-standard format that doesn't end with a git hash, the revision comparison may not work correctly.
|
||||
|
||||
- Flake input ages reflect the remote flake state. If the deployed system is behind, these will show newer timestamps than what's actually deployed.
|
||||
- The `nixos_flake_revision_behind` metric requires `system.configurationRevision` to be set. Without it, the metric will always be 0 since there's no local revision to compare against.
|
||||
|
||||
## License
|
||||
|
||||
|
||||
Reference in New Issue
Block a user