Skip to content

Commit

Permalink
imp: adds profile-cardano-node-new-tracing nixosModule
Browse files Browse the repository at this point in the history
  • Loading branch information
johnalotoski committed May 8, 2024
1 parent 8b18a67 commit bfeb936
Show file tree
Hide file tree
Showing 5 changed files with 227 additions and 1 deletion.
183 changes: 183 additions & 0 deletions flake/nixosModules/profile-cardano-node-new-tracing.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# nixosModule: profile-cardano-node-new-tracing
#
# TODO: Move this to a docs generator
#
# Attributes available on nixos module import:
#
# Tips:
# * This is a cardano-node add-on to the upstream cardano-node nixos service module
# * This module provides a preview of the new tracing system using cardano-tracer which will soon replace the legacy system
# * The upstream cardano-node nixos service module should still be imported separately
{
flake.nixosModules.profile-cardano-node-new-tracing = {
config,
pkgs,
lib,
name,
...
}: let
inherit (builtins) fromJSON readFile;
inherit (config.cardano-parts.cluster.group.meta) environmentName;
inherit (perNodeCfg.meta) cardanoNodePrometheusExporterPort hostAddr;
inherit (perNodeCfg.lib) cardanoLib;
inherit (cardanoLib.environments.${environmentName}.nodeConfig) ByronGenesisFile;
inherit ((fromJSON (readFile ByronGenesisFile)).protocolConsts) protocolMagic;

perNodeCfg = config.cardano-parts.perNode;
in {
# Leave the import of the upstream cardano-node service for
# cardano-parts consuming repos so that service import can be customized.
#
# Unfortunately, we can't customize the import based on
# perNode nixos options as this leads to infinite recursion.
#
# imports = [
# (
# # Existing tracer service requires a pkgs with commonLib defined in the cardano-node repo flake overlay.
# # We'll import it through flake-compat so we don't need a full flake input just for obtaining commonLib.
# import
# config.cardano-parts.cluster.groups.default.meta.cardano-tracer-service
# (import
# "${config.cardano-parts.cluster.groups.default.meta.cardano-node-service}/../../default.nix" {inherit system;})
# .legacyPackages
# .${system}
# )
# ];

services.cardano-tracer = {
enable = true;
package = perNodeCfg.pkgs.cardano-tracer;
executable = lib.getExe perNodeCfg.pkgs.cardano-tracer;
acceptingSocket = "/tmp/forwarder.sock";

# With the current tracer service, setting these alone is not enough as
# the config is hardcoded to use `ForMachine` output and RTView is not
# included.
#
# So if we want more customization, we need to generate our own full config.
#
# logRoot = "/tmp/logs";
# networkMagic = protocolMagic;

configFile = builtins.toFile "cardano-tracer-config.json" (builtins.toJSON {
ekgRequestFreq = 1;

# EKG interface at https.
hasEKG = [
# Preserve legacy EKG binding unless we have a reason to switch.
# Let's see how the updated nixos node service chooses for defaults.
{
epHost = "127.0.0.1";
epPort = 12788;
}
{
epHost = "127.0.0.1";
epPort = 12789;
}
];

# Metrics exporter with a scrape path of:
# http://$epHost:$epPort/$TraceOptionNodeName
hasPrometheus = {
# Preserve legacy prometheus binding unless we have a reason to switch
# Let's see how the updated nixos node service chooses for defaults.
epHost = hostAddr;
epPort = cardanoNodePrometheusExporterPort;
};

# Real time viewer at https.
hasRTView = {
epHost = "127.0.0.1";
epPort = 3300;
};

# A cardano-tracer error will be thrown if the logging list is empty or
# not included.
logging = [
{
logFormat = "ForHuman";
# logFormat = "ForMachine";

# Selecting `JournalMode` seems to force `ForMachine` logFormat
# even if `ForHuman` is selected.
logMode = "JournalMode";
# logMode = "FileMode";

# /dev/null seems to work but will limit RTView log review capability.
# logRoot = "/dev/null";
logRoot = "/tmp/cardano-node-logs";
}
];

network = {
contents = "/tmp/forwarder.sock";
tag = "AcceptAt";
};

networkMagic = protocolMagic;
resourceFreq = null;

rotation = {
rpFrequencySecs = 15;
rpKeepFilesNum = 10;
rpLogLimitBytes = 1000000000;
rpMaxAgeHours = 24;
};
});
};

systemd.services.cardano-tracer = {
wantedBy = ["multi-user.target"];
after = ["network-online.target"];
environment.HOME = "/var/lib/cardano-tracer";
serviceConfig = {
StateDirectory = "cardano-tracer";
WorkingDirectory = "/var/lib/cardano-tracer";
};
};

services.cardano-node = {
tracerSocketPathConnect = "/tmp/forwarder.sock";

# This removes most of the old tracing system config.
# It will only leave a minSeverity = "Critical" for the legacy system active.
useLegacyTracing = false;

# This appears to do nothing.
withCardanoTracer = true;

extraNodeConfig = {
# This option is what enables the new tracing/metrics system.
UseTraceDispatcher = true;

# Default options; further customization can be added per tracer.
TraceOptions = {
"" = {
severity = "Notice";
detail = "DNormal";
backends = [
# This results in journald output for the service, like we would normally expect.
"Stdout HumanFormatColoured"
# "Stdout HumanFormatUncoloured"
# "Stdout MachineFormat"

# Leave EKG disabled in node as tracer now generates this as well
# "EKGBackend"

# Forward to tracer
"Forwarder"
];
};
};
};

extraNodeInstanceConfig = i: {
# This is important to set, otherwise tracer log files and RTView will get an ugly name.
TraceOptionNodeName =
if (i == 0)
then name
else "${name}-${toString i}";
};
};
};
}
7 changes: 7 additions & 0 deletions flake/nixosModules/profile-cardano-parts.nix
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
# config.cardano-parts.perNode.meta.cardano-metadata-service
# config.cardano-parts.perNode.meta.cardano-node-service
# config.cardano-parts.perNode.meta.cardano-smash-service
# config.cardano-parts.perNode.meta.cardano-tracer-service
# config.cardano-parts.perNode.meta.enableAlertCount
# config.cardano-parts.perNode.meta.enableDns
# config.cardano-parts.perNode.meta.hostAddr
Expand Down Expand Up @@ -199,6 +200,12 @@ flake @ {moduleWithSystem, ...}: {
default = cfg.group.meta.cardano-smash-service;
};

cardano-tracer-service = mkOption {
type = str;
description = mdDoc "The cardano-tracer-service import path string.";
default = cfg.group.meta.cardano-tracer-service;
};

enableAlertCount = mkOption {
type = bool;
description = mdDoc ''
Expand Down
3 changes: 2 additions & 1 deletion flake/nixosModules/profile-pre-release.nix
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ flake @ {moduleWithSystem, ...}: {
cardano-db-sync-pkgs = groupFlake.config.flake.cardano-parts.pkgs.special.cardano-db-sync-pkgs-ng system;
cardano-faucet = groupFlake.withSystem system ({config, ...}: config.cardano-parts.pkgs.cardano-faucet-ng);
cardano-node = groupFlake.withSystem system ({config, ...}: config.cardano-parts.pkgs.cardano-node-ng);
cardano-node-pkgs = groupFlake.config.flake.cardano-parts.pkgs.special.cardano-node-pkgs-ng system;
cardano-smash = groupFlake.withSystem system ({config, ...}: config.cardano-parts.pkgs.cardano-smash-ng);
cardano-submit-api = groupFlake.withSystem system ({config, ...}: config.cardano-parts.pkgs.cardano-submit-api-ng);
cardano-node-pkgs = groupFlake.config.flake.cardano-parts.pkgs.special.cardano-node-pkgs-ng system;
cardano-tracer = groupFlake.withSystem system ({config, ...}: config.cardano-parts.pkgs.cardano-tracer-ng);
mithril-client-cli = groupFlake.withSystem system ({config, ...}: config.cardano-parts.pkgs.mithril-client-cli-ng);
mithril-signer = groupFlake.withSystem system ({config, ...}: config.cardano-parts.pkgs.mithril-signer-ng);
};
Expand Down
21 changes: 21 additions & 0 deletions flakeModules/cluster.nix
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
# flake.cardano-parts.cluster.groups.<default|name>.meta.cardano-node-service
# flake.cardano-parts.cluster.groups.<default|name>.meta.cardano-node-service-ng
# flake.cardano-parts.cluster.groups.<default|name>.meta.cardano-smash-service
# flake.cardano-parts.cluster.groups.<default|name>.meta.cardano-tracer-service
# flake.cardano-parts.cluster.groups.<default|name>.meta.cardano-tracer-service-ng
# flake.cardano-parts.cluster.groups.<default|name>.meta.domain
# flake.cardano-parts.cluster.groups.<default|name>.meta.environmentName
# flake.cardano-parts.cluster.groups.<default|name>.meta.hostsList
Expand All @@ -52,6 +54,7 @@
# flake.cardano-parts.cluster.groups.<default|name>.pkgs.cardano-node-pkgs
# flake.cardano-parts.cluster.groups.<default|name>.pkgs.cardano-smash
# flake.cardano-parts.cluster.groups.<default|name>.pkgs.cardano-submit-api
# flake.cardano-parts.cluster.groups.<default|name>.pkgs.cardano-tracer
# flake.cardano-parts.cluster.groups.<default|name>.pkgs.mithril-client-cli
# flake.cardano-parts.cluster.groups.<default|name>.pkgs.mithril-signer
#
Expand Down Expand Up @@ -458,6 +461,18 @@ flake @ {
default = cfg.pkgs.special.cardano-smash-service;
};

cardano-tracer-service = mkOption {
type = str;
description = mdDoc "Cardano-parts cluster group cardano-tracer-service import path string.";
default = cfg.pkgs.special.cardano-tracer-service;
};

cardano-tracer-service-ng = mkOption {
type = str;
description = mdDoc "Cardano-parts cluster group cardano-tracer-service-ng import path string.";
default = cfg.pkgs.special.cardano-tracer-service-ng;
};

domain = mkOption {
type = str;
description = mdDoc "Cardano-parts cluster group domain.";
Expand Down Expand Up @@ -568,6 +583,12 @@ flake @ {
default = system: withSystem system ({config, ...}: config.cardano-parts.pkgs.cardano-submit-api);
};

cardano-tracer = mkOption {
type = functionTo package;
description = mdDoc "Cardano-parts cluster group default cardano-tracer package.";
default = system: withSystem system ({config, ...}: config.cardano-parts.pkgs.cardano-tracer);
};

mithril-client-cli = mkOption {
type = functionTo package;
description = mdDoc "Cardano-parts cluster group default mithril-client-cli package.";
Expand Down
14 changes: 14 additions & 0 deletions flakeModules/pkgs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
# flake.cardano-parts.pkgs.special.cardano-node-pkgs-ng
# flake.cardano-parts.pkgs.special.cardano-node-service
# flake.cardano-parts.pkgs.special.cardano-node-service-ng
# flake.cardano-parts.pkgs.special.cardano-tracer-service
# flake.cardano-parts.pkgs.special.cardano-tracer-service-ng
# flake.cardano-parts.pkgs.special.cardano-smash-service
# perSystem.cardano-parts.pkgs.bech32
# perSystem.cardano-parts.pkgs.cardano-address
Expand Down Expand Up @@ -297,6 +299,18 @@
description = mdDoc "The cardano-parts default cardano-smash-service import path string.";
default = "${localFlake.inputs.cardano-db-sync-service}/nix/nixos/smash-service.nix";
};

cardano-tracer-service = mkOption {
type = str;
description = mdDoc "The cardano-parts default cardano-tracer-service import path string.";
default = "${localFlake.inputs.cardano-node-service}/nix/nixos/cardano-tracer-service.nix";
};

cardano-tracer-service-ng = mkOption {
type = str;
description = mdDoc "The cardano-parts default cardano-tracer-service-ng import path string.";
default = "${localFlake.inputs.cardano-node-service-ng}/nix/nixos/cardano-tracer-service.nix";
};
};
};
in
Expand Down

0 comments on commit bfeb936

Please sign in to comment.