buildbot/nix-eval Build done.
Issue 1 - Grafana secret key:
- Replace hardcoded '123456789' secret_key in hosea Grafana config
with an agenix-managed secret ($__file interpolation)
- Add age.secrets.grafana-secret-key declaration to hosea config
- Register grafana-secret-key.age in secrets/secrets.nix (publicKeys=everyone)
- NOTE: The .age file still needs to be created by running:
agenix -e secrets/grafana-secret-key.age
and entering a strong random secret (e.g. from 'pwgen -s 64 1')
Issue 2 - Prometheus stale targets:
- Remove retired vm-gitlab host from all three scrape jobs
(node, systemd, ping) in manifests/monitoring/config.yaml
- linode was already present in all scrape jobs
Issue 3 - Prometheus alerting gaps:
- Wire up rule_files in prometheus.yml pointing at alerts.yml
- Add manifests/monitoring/alerts.yaml with alerting rules:
* HostDown (node unreachable > 2m) - critical
* HighCPULoad (>90% for 10m) - warning
* LowDiskSpace (<10% free) - warning
* CriticalDiskSpace (<5% free) - critical
* HighMemoryUsage (>90% for 10m) - warning
* ResticBackupStaleness (no success > 26h) - warning
* PodCrashLooping - warning
* PodNotReady (>10m) - warning
- Mount alerts ConfigMap as separate volume subPath in deployment
so prometheus.yml and alerts.yml are both accessible at
/etc/prometheus/ without conflicts
160 lines
3.4 KiB
Nix
160 lines
3.4 KiB
Nix
# Edit this configuration file to define what should be installed on
|
||
# your system. Help is available in the configuration.nix(5) man page
|
||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||
|
||
{
|
||
config,
|
||
metadata,
|
||
pkgs,
|
||
...
|
||
}:
|
||
let
|
||
wanInterface = "enp2s0";
|
||
lanInterface = "enp1s0";
|
||
lanIpAddress = metadata.hosts.${config.networking.hostName}.ip;
|
||
in
|
||
|
||
{
|
||
imports = [
|
||
# Include the results of the hardware scan.
|
||
./arr.nix
|
||
./hardware-configuration.nix
|
||
];
|
||
|
||
age.secrets.grafana-secret-key = {
|
||
file = ../../../secrets/grafana-secret-key.age;
|
||
owner = "grafana";
|
||
};
|
||
|
||
# Bootloader
|
||
boot = {
|
||
loader = {
|
||
systemd-boot.enable = true;
|
||
efi = {
|
||
canTouchEfiVariables = true;
|
||
efiSysMountPoint = "/boot/";
|
||
};
|
||
};
|
||
extraModprobeConfig = "vboxdrv";
|
||
};
|
||
|
||
environment.systemPackages = with pkgs; [
|
||
clinfo
|
||
jellyfin-ffmpeg
|
||
libva-utils
|
||
mesa-demos
|
||
radeontop
|
||
vulkan-tools
|
||
];
|
||
|
||
greg = {
|
||
home = true;
|
||
proxies = {
|
||
"jellyfin.home".target = "http://localhost:8096/";
|
||
"jellyfin.thehellings.lan".target = "http://localhost:8096/";
|
||
};
|
||
tailscale = {
|
||
enable = true;
|
||
tags = [ "home" ];
|
||
};
|
||
};
|
||
|
||
hardware = {
|
||
enableAllFirmware = true;
|
||
enableRedistributableFirmware = true;
|
||
graphics = {
|
||
enable = true;
|
||
extraPackages = with pkgs; [
|
||
intel-media-driver
|
||
intel-vaapi-driver
|
||
libva-vdpau-driver
|
||
#intel-media-sdk
|
||
intel-compute-runtime
|
||
];
|
||
};
|
||
};
|
||
|
||
networking = {
|
||
hostName = "hosea";
|
||
nameservers = [ metadata.infra.dns ];
|
||
defaultGateway = metadata.infra.gw;
|
||
interfaces = {
|
||
"${wanInterface}".useDHCP = true;
|
||
"${lanInterface}" = {
|
||
useDHCP = false;
|
||
ipv4.addresses = [
|
||
{
|
||
address = lanIpAddress;
|
||
prefixLength = 16;
|
||
}
|
||
];
|
||
};
|
||
};
|
||
};
|
||
|
||
services = {
|
||
albyhub = {
|
||
enable = true;
|
||
openFirewall = true;
|
||
settings = {
|
||
workDir = "/chain/alby";
|
||
};
|
||
};
|
||
jellyfin = {
|
||
enable = true;
|
||
openFirewall = true;
|
||
};
|
||
grafana = {
|
||
enable = true;
|
||
provision = {
|
||
enable = true;
|
||
dashboards.settings.providers = [
|
||
{
|
||
name = "Dashboards";
|
||
disableDeletion = true;
|
||
options = {
|
||
path = "/etc/grafana-dashboards";
|
||
foldersFromFilesStructure = true;
|
||
};
|
||
}
|
||
];
|
||
datasources.settings.datasources = [
|
||
{
|
||
name = "Prometheus";
|
||
type = "prometheus";
|
||
url = "https://prometheus.shire-zebra.ts.net";
|
||
isDefault = true;
|
||
editable = false;
|
||
}
|
||
];
|
||
};
|
||
settings = {
|
||
security.secret_key = "$__file{${config.age.secrets.grafana-secret-key.path}}";
|
||
server = {
|
||
domain = "${config.networking.hostName}.shire-zebra.ts.net";
|
||
enforce_domain = true;
|
||
http_addr = "0.0.0.0";
|
||
enable_gzip = true;
|
||
http_port = 3001;
|
||
};
|
||
analytics.reporting_enabled = false;
|
||
};
|
||
};
|
||
prometheus.exporters.graphite.enable = true;
|
||
# Configure keymap
|
||
xserver.xkb = {
|
||
layout = "us";
|
||
variant = "";
|
||
};
|
||
};
|
||
|
||
users.users = {
|
||
greg.extraGroups = [ "vboxusers" ];
|
||
|
||
jellyfin.extraGroups = [
|
||
"video"
|
||
"render"
|
||
];
|
||
};
|
||
}
|