Setting up a logging plugin

Knative allows cluster operators to use different backends for their logging
needs. This document describes how to change these settings. Knative currently
requires changes in Fluentd configuration files, however we plan on abstracting
logging configuration in the future
(#906). Once
#906 is complete, the
methodology described in this document will no longer be valid and migration to
a new process will be required. In order to minimize the effort for a future
migration, we recommend only changing the output configuration of Fluentd and
leaving the rest intact.

NOTE: All the files mentioned below are in
knative/serving repository. You run the
commands mentioned below from the root directory of knative/serving.

Configuring

Configure the DaemonSet for stdout/stderr logs

Operators can do the following steps to configure the Fluentd DaemonSet for
collecting stdout/stderr logs from the containers:

Replace 900.output.conf part in
100-fluentd-configmap.yaml
with the desired output configuration. Knative provides a sample for sending
logs to Elasticsearch or Stackdriver. Developers can simply use
100-fluentd-configmap.yaml or override any with other configuration.

Replace the image field of fluentd-ds container of fluentd-ds DaemonSet
in
200-fluentd.yaml
with the Fluentd image including the desired Fluentd output plugin. See
here for the requirements of Flunetd image on
Knative.

Configure the DaemonSet for log files under /var/log

The Fluentd DaemonSet can also capture /var/log logs from the containers. To
enable:

NOTE: The deployment above will not affect the existing pods. Developers
need to redeploy their app to get the newest configuration for /var/log
collection.

NOTE: Operators sometimes need to deploy extra services as the logging
backends. For example, if they desire Elasticsearch&Kibana, they have to deploy
the Elasticsearch and Kibana services. Knative provides this sample: