···
+
# This module implements a systemd service for running journaldriver,
+
# a log forwarding agent that sends logs from journald to Stackdriver
+
# It can be enabled without extra configuration when running on GCP.
+
# On machines hosted elsewhere, the other configuration options need
+
# For further information please consult the documentation in the
+
# upstream repository at: https://github.com/aprilabank/journaldriver/
+
{ config, lib, pkgs, ...}:
+
with lib; let cfg = config.services.journaldriver;
+
options.services.journaldriver = {
+
Whether to enable journaldriver to forward journald logs to
+
Log level at which journaldriver logs its own output.
+
type = with types; nullOr str;
+
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
+
googleCloudProject = mkOption {
+
type = with types; nullOr str;
+
Configures the name of the Google Cloud project to which to
+
This option is required on non-GCP machines, but should not be
+
type = with types; nullOr str;
+
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
+
applicationCredentials = mkOption {
+
type = with types; nullOr path;
+
Path to the service account private key (in JSON-format) used
+
to forward log entries to Stackdriver Logging on non-GCP
+
This option is required on non-GCP machines, but should not be
+
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" ];
+
# 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";
+
RUST_LOG = cfg.logLevel;
+
LOG_NAME = cfg.logName;
+
LOG_STREAM = cfg.logStream;
+
GOOGLE_CLOUD_PROJECT = cfg.googleCloudProject;
+
GOOGLE_APPLICATION_CREDENTIALS = cfg.applicationCredentials;