feat(hosts/luna): implement basic monitoring
TODO: make grafana ingest data from prometheus
This commit is contained in:
parent
091ca7b4e0
commit
d89b75d438
27
hosts/luna/modules/monitoring/grafana.nix
Normal file
27
hosts/luna/modules/monitoring/grafana.nix
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{ config, pkgs, fqdn, ... }:
|
||||||
|
let grafana_host = "grafana.${fqdn}";
|
||||||
|
in {
|
||||||
|
services = {
|
||||||
|
grafana = {
|
||||||
|
enable = true;
|
||||||
|
settings.server = {
|
||||||
|
domain = "${grafana_host}";
|
||||||
|
http_addr = "127.0.0.1";
|
||||||
|
http_port = 2342;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nginx.virtualHosts."${grafana_host}" = {
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass =
|
||||||
|
"http://${config.services.grafana.settings.server.http_addr}:${
|
||||||
|
builtins.toString config.services.grafana.settings.server.http_port
|
||||||
|
}";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
92
hosts/luna/modules/monitoring/prometheus.nix
Normal file
92
hosts/luna/modules/monitoring/prometheus.nix
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
{ config, fqdn, pkgs, ... }:
|
||||||
|
let prometheus_host = "prometheus.${fqdn}";
|
||||||
|
in {
|
||||||
|
services = {
|
||||||
|
prometheus = {
|
||||||
|
enable = true;
|
||||||
|
port = 9000;
|
||||||
|
scrapeConfigs = [{
|
||||||
|
job_name = "node-exporter";
|
||||||
|
static_configs = [{
|
||||||
|
targets = [
|
||||||
|
"127.0.0.1:${
|
||||||
|
toString config.services.prometheus.exporters.node.port
|
||||||
|
}"
|
||||||
|
];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
exporters = {
|
||||||
|
node = {
|
||||||
|
enable = true;
|
||||||
|
port = 9001;
|
||||||
|
enabledCollectors = [
|
||||||
|
"arp"
|
||||||
|
"bcache"
|
||||||
|
"btrfs"
|
||||||
|
"bonding"
|
||||||
|
"cpu"
|
||||||
|
"cpufreq"
|
||||||
|
"diskstats"
|
||||||
|
"edac"
|
||||||
|
"entropy"
|
||||||
|
"fibrechannel"
|
||||||
|
"filefd"
|
||||||
|
"filesystem"
|
||||||
|
"hwmon"
|
||||||
|
"ipvs"
|
||||||
|
"loadavg"
|
||||||
|
"meminfo"
|
||||||
|
"mdadm"
|
||||||
|
"netclass"
|
||||||
|
"netdev"
|
||||||
|
"netstat"
|
||||||
|
"nfs"
|
||||||
|
"nfsd"
|
||||||
|
"nvme"
|
||||||
|
"os"
|
||||||
|
"powersupplyclass"
|
||||||
|
"pressure"
|
||||||
|
"rapl"
|
||||||
|
"schedstat"
|
||||||
|
"sockstat"
|
||||||
|
"softnet"
|
||||||
|
"stat"
|
||||||
|
"thermal_zone"
|
||||||
|
"time"
|
||||||
|
"udp_queues"
|
||||||
|
"uname"
|
||||||
|
"vmstat"
|
||||||
|
"systemd"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nginx = {
|
||||||
|
additionalModules = [ pkgs.nginxModules.pam ];
|
||||||
|
virtualHosts."${prometheus_host}" = {
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
extraConfig = ''
|
||||||
|
auth_pam "Password Required";
|
||||||
|
auth_pam_service_name "nginx";
|
||||||
|
'';
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://${config.services.prometheus.listenAddress}:${
|
||||||
|
builtins.toString config.services.prometheus.port
|
||||||
|
}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
security.pam.services.nginx.setEnvironment = false;
|
||||||
|
systemd.services.nginx.serviceConfig = {
|
||||||
|
SupplementaryGroups = [ "shadow" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.persistence.save.directories = [{
|
||||||
|
directory = "/var/lib/${config.services.prometheus.stateDir}";
|
||||||
|
user = "prometheus";
|
||||||
|
group = "prometheus";
|
||||||
|
}];
|
||||||
|
}
|
@ -2,11 +2,12 @@
|
|||||||
{
|
{
|
||||||
security.sudo.wheelNeedsPassword = false;
|
security.sudo.wheelNeedsPassword = false;
|
||||||
users.users = {
|
users.users = {
|
||||||
root.hashedPasswordFile = config.age.secrets.root-pw.path;
|
root.hashedPasswordFile = config.age.secrets.users-root-pw.path;
|
||||||
price = {
|
price = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
extraGroups = [ "wheel" ];
|
extraGroups = [ "wheel" ];
|
||||||
shell = pkgs.bash;
|
shell = pkgs.bash;
|
||||||
|
hashedPasswordFile = config.age.secrets.users-price-pw.path;
|
||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"no-touch-required sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIJ9ODXLAIfGH/7VNobQsp5nwBvNoh+pQMEH7s2jkHpkqAAAACHNzaDpsdW5h"
|
"no-touch-required sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIJ9ODXLAIfGH/7VNobQsp5nwBvNoh+pQMEH7s2jkHpkqAAAACHNzaDpsdW5h"
|
||||||
];
|
];
|
||||||
|
@ -9,7 +9,8 @@ let
|
|||||||
secrets = "luna";
|
secrets = "luna";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
root-pw = "${secrets}/root-hash-pw.age";
|
users-root-pw = "${secrets}/users-root-pw.age";
|
||||||
|
users-price-pw = "${secrets}/users-price-pw.age";
|
||||||
gitlab-runner-reg-config = "${secrets}/gitlab-runner-reg-config.age";
|
gitlab-runner-reg-config = "${secrets}/gitlab-runner-reg-config.age";
|
||||||
gitea-db-pass = "${secrets}/gitea-db-pass.age";
|
gitea-db-pass = "${secrets}/gitea-db-pass.age";
|
||||||
gitea-runner-token = "${secrets}/gitea-runner-token.age";
|
gitea-runner-token = "${secrets}/gitea-runner-token.age";
|
||||||
|
12
secrets/luna/users-price-pw.age
Normal file
12
secrets/luna/users-price-pw.age
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDFmRzBvdyBxWWpi
|
||||||
|
V2c2RkxLanlGYjZ6L2dPYmRHRWwxK0Q0aVNCakNzdFdtZ0k4dW1vCjcrQmptaGgz
|
||||||
|
SmpOb2RFTUlYM1ZWc2U2RkF5eGJzWkI3ekk5RTJXLytHYmcKLT4gcGl2LXAyNTYg
|
||||||
|
ckpzMUhBIEF4enp2K0FvSFlEWWowT3JSaGV0Rkd6WTlrMlRlZUlhK1B0bFRyWkhD
|
||||||
|
dTJ1CklMcFlLYTMwQ2YyZUdEaHZ2ZW10VEN0NCsxWGJQL2JvZG40NGtobVE0TXcK
|
||||||
|
LT4gZmtMNilcfS1ncmVhc2UgI3ZZX243IEkrUSRdblp6IC8KTC9FRERrUGNLTlJs
|
||||||
|
SEEKLS0tIFVHQlovUTVTMk9WY0NwN0cycjJEa0p1L0h0R1BpNFh4am5TVWp4WU5L
|
||||||
|
eGcKXXflLkUPB2sSYVNl+4O1QsWXEKtBItZbM7RP+glsuWQfHJBY133UzVMgXTy0
|
||||||
|
4yvEcD/ixQaKpSIkeOM+bz0IWjyU0y+zL8opR5xX0AMGJZfeNemIZAo8KpmQsoXC
|
||||||
|
7U0McvbgHkfakV1ONxYCgurPZPDW97Mk146oyU9bE/amgKh2MvNM14RmY4y2uw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
Loading…
Reference in New Issue
Block a user