Skip to content

Commit

Permalink
fix: victoriametrics (#172)
Browse files Browse the repository at this point in the history
* chore: update aqua's host key

* fix: victoriametrics

* feat: adjust order of nix cache mirrors

* feat: update mysecrets

* fix: use bind mount - Failed at step STATE_DIRECTORY
  • Loading branch information
ryan4yin authored Oct 31, 2024
1 parent 7c18b85 commit e4c2561
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 23 deletions.
6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 12 additions & 15 deletions hosts/idols-aquamarine/monitoring/module/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,23 @@ with lib; let
cfg = config.services.my-victoriametrics;
settingsFormat = pkgs.formats.yaml {};

workingDir = "/var/lib/" + cfg.stateDir;
startCommandLine =
lib.escapeShellArgs [
startCLIList =
[
"${cfg.package}/bin/victoria-metrics"
"-storageDataPath=${workingDir}"
"-storageDataPath=/var/lib/${cfg.stateDir}"
"-httpListenAddr=${cfg.listenAddress}"
"-retentionPeriod=${cfg.retentionPeriod}"
]
++ lib.optional (cfg.prometheusConfig != null) "-promscrape.config=${prometheusConfigYml}"
++ cfg.extraOptions;
prometheusConfigYml = checkedConfig (
settingsFormat.generate "prometheusConfig.yaml" cfg.prometheusConfig
);

checkedConfig = file:
if cfg.checkConfig
then
pkgs.runCommand "checked-config" {nativeBuildInputs = [cfg.package];} ''
ln -s ${file} $out
${startCommandLine} -dryRun
''
else file;
pkgs.runCommand "checked-config" {nativeBuildInputs = [cfg.package];} ''
ln -s ${file} $out
${lib.escapeShellArgs startCLIList} -promscrape.config=${file} -dryRun
'';
in {
options.services.my-victoriametrics = {
enable = mkEnableOption "VictoriaMetrics, a time series database.";
Expand Down Expand Up @@ -130,15 +125,17 @@ in {
startLimitBurst = 5;

serviceConfig = {
ExecStart = startCommandLine;
ExecStart = lib.escapeShellArgs (
startCLIList
++ lib.optional (cfg.prometheusConfig != null) ["-promscrape.config=${prometheusConfigYml}"]
);

DynamicUser = true;
User = "victoriametrics";
Group = "victoriametrics";
RestartSec = 1;
Restart = "on-failure";
RuntimeDirectory = "victoriametrics";
RuntimeDirectoryMode = "0700";
WorkingDirectory = workingDir;
StateDirectory = cfg.stateDir;
StateDirectoryMode = "0700";

Expand Down
14 changes: 12 additions & 2 deletions hosts/idols-aquamarine/monitoring/victoriametrics.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,23 @@
myvars,
...
}: {
# Since victoriametrics use DynamicUser, the user & group do not exists before the service starts.
# this group is used as a supplementary Unix group for the service to access our data dir(/data/apps/xxx)
users.groups.victoriametrics-data = {};

# Workaround for victoriametrics to store data in another place
# https://www.freedesktop.org/software/systemd/man/latest/tmpfiles.d.html#Type
systemd.tmpfiles.rules = [
"D /data/apps/victoriametrics 0751 victoriametrics victoriametrics - -"
"L+ /var/lib/victoriametrics - - - - /data/apps/victoriametrics"
"D /data/apps/victoriametrics 0770 root victoriametrics-data - -"
];

# Symlinks do not work with DynamicUser, so we should use bind mount here.
# https://github.com/systemd/systemd/issues/25097#issuecomment-1929074961
systemd.services.victoriametrics.serviceConfig = {
SupplementaryGroups = ["victoriametrics-data"];
BindPaths = ["/data/apps/victoriametrics:/var/lib/victoriametrics:rbind"];
};

# https://victoriametrics.io/docs/victoriametrics/latest/configuration/configuration/
services.my-victoriametrics = {
enable = true;
Expand Down
4 changes: 2 additions & 2 deletions modules/base.nix
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,11 @@
# substituers that will be considered before the official ones(https://cache.nixos.org)
substituters = [
# cache mirror located in China
# status: https://mirror.sjtu.edu.cn/
"https://mirror.sjtu.edu.cn/nix-channels/store"
# status: https://mirrors.ustc.edu.cn/status/
"https://mirrors.ustc.edu.cn/nix-channels/store"
"https://mirrors.tuna.tsinghua.edu.cn/nix-channels/store"
# status: https://mirror.sjtu.edu.cn/
"https://mirror.sjtu.edu.cn/nix-channels/store"

"https://nix-community.cachix.org"
# my own cache server
Expand Down
2 changes: 1 addition & 1 deletion vars/networking.nix
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@
publicKey = value.publicKey;
})
{
aquamarine.publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIbIecyrmrBpjD497lA2adJeTpsubZ3dozEraLGCcgVi root@aquamarine";
aquamarine.publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEOXFhFu9Duzp6ZBE288gDZ6VLrNaeWL4kDrFUh9Neic root@aquamarine";
# ruby.publicKey = "";
# kana.publicKey = "";
};
Expand Down

0 comments on commit e4c2561

Please sign in to comment.