Add documentation for configuring Stackdriver Logging agents
This commit is contained in:
parent
0ee3235676
commit
59e4200afd
|
|
@ -10,7 +10,7 @@ with the [overview of logging in Kubernetes](/docs/concepts/cluster-administrati
|
||||||
|
|
||||||
**Note:** By default, Stackdriver logging collects only your container's standard output and
|
**Note:** By default, Stackdriver logging collects only your container's standard output and
|
||||||
standard error streams. To collect any logs your application writes to a file (for example),
|
standard error streams. To collect any logs your application writes to a file (for example),
|
||||||
see the [sidecar approach](/docs/concepts/cluster-administration/logging/#using-a-sidecar-container-with-the-logging-agent)
|
see the [sidecar approach](/docs/concepts/cluster-administration/logging#using-a-sidecar-container-with-the-logging-agent)
|
||||||
in the Kubernetes logging overview.
|
in the Kubernetes logging overview.
|
||||||
|
|
||||||
## Deploying
|
## Deploying
|
||||||
|
|
@ -80,16 +80,16 @@ Stackdriver Logging agents to the running cluster.
|
||||||
1. Deploy a `ConfigMap` with the logging agent configuration by running the following command:
|
1. Deploy a `ConfigMap` with the logging agent configuration by running the following command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl create -f https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-gcp/fluentd-gcp-configmap.yaml
|
kubectl create -f https://k8s.io/docs/tasks/debug-application-cluster/fluentd-gcp-configmap.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
The command creates the `ConfigMap` in the `kube-system` namespace. You can download the file
|
The command creates the `ConfigMap` in the `default` namespace. You can download the file
|
||||||
manually and change it before creating the `ConfigMap` object.
|
manually and change it before creating the `ConfigMap` object.
|
||||||
|
|
||||||
1. Deploy the logging agent `DaemonSet` by running the following command:
|
1. Deploy the logging agent `DaemonSet` by running the following command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kubectl create -f https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml
|
kubectl create -f https://k8s.io/docs/tasks/debug-application-cluster/fluentd-gcp-ds.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
You can download and edit this file before using it as well.
|
You can download and edit this file before using it as well.
|
||||||
|
|
@ -231,3 +231,98 @@ or to [BigQuery](https://cloud.google.com/bigquery/) to run further
|
||||||
analysis. Stackdriver Logging offers the concept of sinks, where you can
|
analysis. Stackdriver Logging offers the concept of sinks, where you can
|
||||||
specify the destination of log entries. More information is available on
|
specify the destination of log entries. More information is available on
|
||||||
the Stackdriver [Exporting Logs page](https://cloud.google.com/logging/docs/export/configure_export_v2).
|
the Stackdriver [Exporting Logs page](https://cloud.google.com/logging/docs/export/configure_export_v2).
|
||||||
|
|
||||||
|
## Configuring Stackdriver Logging Agents
|
||||||
|
|
||||||
|
Sometimes the default installation of Stackdriver Logging may not suite your needs, for example:
|
||||||
|
|
||||||
|
* You may want to add more resources because default performance doesn't suite your needs.
|
||||||
|
* You may want to introduce additional parsing to extract more metadata from your log messages,
|
||||||
|
like severity or source code reference.
|
||||||
|
* You may want to send logs not only to Stackdriver or send it to Stackdriver only partially.
|
||||||
|
|
||||||
|
In this case you need to be able to change the parameters of `DaemonSet` and `ConfigMap`.
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
If you're on GKE and Stackdriver Logging is enabled in your cluster, you cannot change its
|
||||||
|
parameters. Likewise, if you're not on GKE, but Stackdriver Logging is installed as an addon,
|
||||||
|
you won't be able to change deployment parameters using Kubernetes API. To make it possible
|
||||||
|
to change parameters of Stackdriver Logging agents, you should switch to the API object
|
||||||
|
deployment, when Stackdriver Logging is installed into a running cluster that didn't have any
|
||||||
|
cluster logging solutions installed before that.
|
||||||
|
|
||||||
|
You can find notes on how to install Stackdriver Logging agents into a running cluster in the
|
||||||
|
[Deploying section](#deploying).
|
||||||
|
|
||||||
|
### Changing `DaemonSet` parameters
|
||||||
|
|
||||||
|
When you have the Stackdriver Logging `DaemonSet` in your cluster, you can just modify the
|
||||||
|
`template` field in its spec, daemonset controller will update the pods for you. For example,
|
||||||
|
let's assume you've just installed the Stackdriver Logging as described above. Now you want to
|
||||||
|
change the memory limit to give fluentd more memory to safely process more logs.
|
||||||
|
|
||||||
|
Get the spec of `DaemonSet` running in your cluster:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl get ds fluentd-gcp-v2.0 --namespace kube-system -o yaml > fluentd-gcp-ds.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
Then edit resource requirements in the spec file and update the `DaemonSet` object
|
||||||
|
in the apiserver using the following command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl replace -f fluentd-gcp-ds.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
After some time, Stackdriver Logging agent pods will be restarted with the new configuration.
|
||||||
|
|
||||||
|
### Changing fluentd parameters
|
||||||
|
|
||||||
|
Fluentd configuration is stored in the `ConfigMap` object. It is effectively a set of configuration
|
||||||
|
files that are merged together. You can learn about fluentd configuration on the [official
|
||||||
|
site](http://docs.fluentd.org).
|
||||||
|
|
||||||
|
Imagine you want to add a new parsing logic to the configuration, so that fluentd can understand
|
||||||
|
default Python logging format. An appropriate fluentd filter looks similar to this:
|
||||||
|
|
||||||
|
```
|
||||||
|
<filter reform.**>
|
||||||
|
type parser
|
||||||
|
format /^(?<severity>\w):(?<logger_name>\w):(?<log>.*)/
|
||||||
|
reserve_data true
|
||||||
|
suppress_parse_error_log true
|
||||||
|
key_name log
|
||||||
|
</filter>
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you have to put it in the configuration and make Stackdriver Logging agents pick it up.
|
||||||
|
Get the current version of the Stackdriver Logging `ConfigMap` in your cluster
|
||||||
|
by running the following command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl get ds fluentd-gcp-v2.0 --namespace kube-system -o yaml > fluentd-gcp-ds.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
Then in the value for the key `containers.input.conf` insert a new filter right after
|
||||||
|
the `source` section. **Note:** order is important.
|
||||||
|
|
||||||
|
Updating `ConfigMap` in the apiserver is more complicated than updating `DaemonSet`. It's better
|
||||||
|
to consider `ConfigMap` to be immutable. Then, in order to update the configuration, you should
|
||||||
|
create `ConfigMap` with a new name and then change `DaemonSet` to point to it
|
||||||
|
using [guide above](#changing-daemonset-parameters).
|
||||||
|
|
||||||
|
### Adding fluentd plugins
|
||||||
|
|
||||||
|
Fluentd is written in Ruby and allows to extend its capabilities using
|
||||||
|
[plugins](http://www.fluentd.org/plugins). If you want to use a plugin, which is not included
|
||||||
|
in the default Stackdriver Logging container image, you have to build a custom image. Imagine
|
||||||
|
you want to add Kafka sink for messages from a particular container for additional processing.
|
||||||
|
You can re-use the default [container image sources](https://github.com/kubernetes/contrib/tree/master/fluentd/fluentd-gcp-image)
|
||||||
|
with minor changes:
|
||||||
|
|
||||||
|
* Change Makefile to point to your container repository, e.g. `PREFIX=gcr.io/<your-project-id>`.
|
||||||
|
* Add your dependency to the Gemfile, for example `gem 'fluent-plugin-kafka'`.
|
||||||
|
|
||||||
|
Then run `make build push` from this directory. After updating `DaemonSet` to pick up the
|
||||||
|
new image, you can use the plugin you installed in the fluentd configuration.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue