aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/services/logging/journaldriver.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/services/logging/journaldriver.nix')
-rw-r--r--nixpkgs/nixos/modules/services/logging/journaldriver.nix112
1 files changed, 112 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/logging/journaldriver.nix b/nixpkgs/nixos/modules/services/logging/journaldriver.nix
new file mode 100644
index 00000000000..9bd581e9ec0
--- /dev/null
+++ b/nixpkgs/nixos/modules/services/logging/journaldriver.nix
@@ -0,0 +1,112 @@
+# This module implements a systemd service for running journaldriver,
+# a log forwarding agent that sends logs from journald to Stackdriver
+# Logging.
+#
+# It can be enabled without extra configuration when running on GCP.
+# On machines hosted elsewhere, the other configuration options need
+# to be set.
+#
+# For further information please consult the documentation in the
+# upstream repository at: https://github.com/tazjin/journaldriver/
+
+{ config, lib, pkgs, ...}:
+
+with lib; let cfg = config.services.journaldriver;
+in {
+ options.services.journaldriver = {
+ enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable journaldriver to forward journald logs to
+ Stackdriver Logging.
+ '';
+ };
+
+ logLevel = mkOption {
+ type = types.str;
+ default = "info";
+ description = ''
+ Log level at which journaldriver logs its own output.
+ '';
+ };
+
+ logName = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = ''
+ Configures the name of the target log in Stackdriver Logging.
+ This option can be set to, for example, the hostname of a
+ machine to improve the user experience in the logging
+ overview.
+ '';
+ };
+
+ googleCloudProject = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = ''
+ Configures the name of the Google Cloud project to which to
+ forward journald logs.
+
+ This option is required on non-GCP machines, but should not be
+ set on GCP instances.
+ '';
+ };
+
+ logStream = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = ''
+ Configures the name of the Stackdriver Logging log stream into
+ which to write journald entries.
+
+ This option is required on non-GCP machines, but should not be
+ set on GCP instances.
+ '';
+ };
+
+ applicationCredentials = mkOption {
+ type = with types; nullOr path;
+ default = null;
+ description = ''
+ Path to the service account private key (in JSON-format) used
+ to forward log entries to Stackdriver Logging on non-GCP
+ instances.
+
+ This option is required on non-GCP machines, but should not be
+ set on GCP instances.
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ systemd.services.journaldriver = {
+ description = "Stackdriver Logging journal forwarder";
+ script = "${pkgs.journaldriver}/bin/journaldriver";
+ after = [ "network-online.target" ];
+ wantedBy = [ "multi-user.target" ];
+
+ serviceConfig = {
+ Restart = "always";
+ DynamicUser = true;
+
+ # This directive lets systemd automatically configure
+ # permissions on /var/lib/journaldriver, the directory in
+ # which journaldriver persists its cursor state.
+ StateDirectory = "journaldriver";
+
+ # This group is required for accessing journald.
+ SupplementaryGroups = "systemd-journal";
+ };
+
+ environment = {
+ RUST_LOG = cfg.logLevel;
+ LOG_NAME = cfg.logName;
+ LOG_STREAM = cfg.logStream;
+ GOOGLE_CLOUD_PROJECT = cfg.googleCloudProject;
+ GOOGLE_APPLICATION_CREDENTIALS = cfg.applicationCredentials;
+ };
+ };
+ };
+}