851ef58fa8
* Official documentation on Poseidon/Firmament, a new multi-scheduler support for K8S. (#11752)
* Added documentation about Poseidon-Firmament scheduler
* Fixed some style issues.
* Udpated the document as per the review comments.
* Fixed some typos and updated the document
* Updated the document as per the review comments.
* Document timeout attribute for kms-plugin. (#12158)
See 72540.
* Official documentation on Poseidon/Firmament, a new multi-scheduler (#12343)
* Removed the old version of the Poseidon documentation. Incorrect location.
* Official documentation on Poseidon/Firmament, a new multi-scheduler support for K8S (#12069)
* Official documentation on Poseidon/Firmament, a new multi-scheduler support for K8S. (#11752)
* Added documentation about Poseidon-Firmament scheduler
* Fixed some style issues.
* Udpated the document as per the review comments.
* Fixed some typos and updated the document
* Updated the document as per the review comments.
* Updated the document as per review comments. Added config details.
* Updated the document as per the latest review comments. Fixed nits
* Made changes as per latest suggestions.
* Some more changes added.
* Updated as per suggestions.
* Changed the release process section.
* SIG Docs edits
Small edits to match style guidelines.
* add plus to feature state
* capitalization
* revert feature state shortcode
since this is a Kubernetes extension, not a direct feature, it shouldn't use the regular feature state tagging.
(cherry picked from commit 7730c1540b)
* Remove initializers from doc. It will be removed in 1.14 (#12331)
* kubeadm: Document CRI auto detection functionality (#12462)
Signed-off-by: Rostislav M. Georgiev <rostislavg@vmware.com>
* Minor doc change for GAing Pod DNS Config (#12514)
* Graduate ExpandInUsePersistentVolumes feature to beta (#10574)
* Rename 2018-11-07-grpc-load-balancing-with-linkerd.md.md file (#12594)
* Add dynamic percentage of node scoring to user docs (#12235)
* Add dynamic percentage of node scoring to user docs
* addressed review comments
* delete special symbol (#12445)
* Update documentation for VolumeSubpathEnvExpansion (#11843)
* Update documentation for VolumeSubpathEnvExpansion
* Address comments - improve descriptions
* Graduate Pod Priority and Preemption to GA (#12428)
* Added Instana links to the documentation (#12977)
* Added link to the Instana Kubernetes integration
* Added Instana link for services section
Added Instana and a link to the Kubernetes integration to the analytics services section and broadened the scope to APM, monitoring and analytics.
* Oxford comma /flex
* More Oxford commas, because they matter
* Update kubectl plugins to stable (#12847)
* documentation for CSI topology beta (#12889)
* Document changes to default RBAC discovery ClusterRole(Binding)s (#12888)
* Document changes to default RBAC discovery ClusterRole(Binding)s
Documentation for https://github.com/kubernetes/enhancements/issues/789 and https://github.com/kubernetes/kubernetes/pull/73807
* documentation review feedback
* CSI raw block to beta (#12931)
* Change incorrect string raw to block (#12926)
Fixes #12925
* Update documentation on node OS/arch labels (#12976)
These labels have been promoted to GA:
https://github.com/kubernetes/enhancements/issues/793
* local pv GA doc updates (#12915)
* Publish CRD OpenAPI Documentation (#12910)
* add documentation for CustomResourcePublishOpenAPI
* address comments
fix links, ordered lists, style and typo
* kubeadm: add document for upgrading from 1.13 to 1.14 (single CP and HA) (#13189)
* kubeadm: add document for upgrading from 1.13 to 1.14
- remove doc for upgrading 1.10 -> 1.11
* kubeadm: apply amends to upgrade-1.14 doc
* kubeadm: apply amends to upgrade-1.14 doc (part2)
* kubeadm: apply amends to upgrade-1.14 doc (part3)
* kubeadm: add note about "upgrade node experimental-control-plane"
+ add comment about `upgrade plan`
* kubeadm: add missing "You should see output similar to this"
* fix bullet indentation (#13214)
* mark PodReadinessGate GA (#12800)
* Update RuntimeClass documentation for beta (#13043)
* Update RuntimeClass documentation for beta
* Update feature gate & add upgrade section
* formatting fixes
* Highlight upgrade action required
* Address feedback
* CSI ephemeral volume alpha documentation (#10934)
* update kubectl documentation (#12867)
* update kubectl documentation
* add document for Secret/ConfigMap generators
* replace `kubectl create -f` by `kubectl apply -f`
* Add page for kustomization support in kubectl
* fix spelling errors and address comments
* Documentation for Windows GMSA feature (#12936)
* Documentation for Windows GMSA feature
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Enhancements to GMSA docs
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Fix links
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Fix GMSA link
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Add GMSA feature flag in feature flag list
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Relocate GMSA to container configuration
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Add example for container spec
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Remove changes in Windows index
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Update configure-gmsa.md
* Update configure-gmsa.md
* Update configure-gmsa.md
* Update configure-gmsa.md
* Rearrange the steps into two sections and other edits
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Fix links
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Add reference to script to generate GMSA YAMLs
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Some more clarifications for GMSA
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* HugePages graduated to GA (#13004)
* HugePages graduated to GA
* fixing nit for build
* Docs for node PID limiting (https://github.com/kubernetes/kubernetes/pull/73651) (#12932)
* kubeadm: update the reference documentation for 1.14 (#12911)
* kubeadm: update list of generated files for 1.14
NOTE: PLACEHOLDERS! these files are generated by SIG Docs each
release, but we need them to pass the k/website PR CI.
- add join_phase* (new sub phases of join)
- add init_phase_upload-certs.md (new upload certs phase for init)
- remove alpha-preflight (now both init and join have this)
* kubeadm: update reference docs includes for 1.14
- remove includes from alpha.md
- add upload-certs to init-phase.md
- add join-phase.md and it's phases
* kubeadm: update the editorial content of join and init
- cleanup master->control-plane node
- add some notes about phases and join
- remove table about pre-pulling images
- remove outdated info about self-hosting
* kubeadm: update target release for v1alpha3 removal
1.14 -> 1.15
* kubeadm: copy edits for 1.14 reference docs (part1)
* kubeadm: use "shell" for code blocks
* kubeadm: update the 1.14 HA guide (#13191)
* kubeadm: update the 1.14 HA guide
* kubeadm: try to fix note/caution indent in HA page
* kubeadm: fix missing sudo and minor amends in HA doc
* kubeadm: apply latest amends to the HA doc for 1.14
* fixed a few missed merge conflicts
* Admission Webhook new features doc (#12938)
- kubernetes/kubernetes#74998
- kubernetes/kubernetes#74477
- kubernetes/kubernetes#74562
* Clarifications and fixes in GMSA doc (#13226)
* Clarifications and fixes in GMSA doc
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Update configure-gmsa.md
* Reformat to align headings and pre-reqs better
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Reformat to align headings and pre-reqs better
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Reformat to fix bullets
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Reword application of sample gmsa
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Update configure-gmsa.md
* Address feedback to use active voice
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Address feedback to use active voice
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* RunAsGroup documentation for Progressing this to Beta (#12297)
* start serverside-apply documentation (#13077)
* start serverside-apply documentation
* add more concept info on server side apply
* Update api concepts
* Update api-concepts.md
* fix style issues
* Document CSI update (#12928)
* Document CSI update
* Finish CSI documentation
Also fix mistake with ExpandInUsePersistentVolumes documented as beta
* Overall docs for CSI Migration feature (#12935)
* Placeholder docs for CSI Migration feature
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Address CR comments and update feature gates
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Add mappings for CSI plugins
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Add sections for AWS and GCE PD migration
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Add docs for Cinder and CSI Migration info
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Clarify scope to volumes with file system
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Change the format of EBS and Cinder CSI Migration sections to follow the GCE template
Signed-off-by: Deep Debroy <ddebroy@docker.com>
* Windows documentation updates for 1.14 (#12929)
* Updated the note to indicate doc work for 1.14
* first attempt at md export from gdoc
* simplifyig
* big attempt
* moving DRAFT windows content to PR for review
* moving content to PR in markdown for review
* updated note tags
* Delete windows-contributing.md
deleting this file as it is already ported to the github contributor guide
* fixed formatting in intro and cluster setup guide
* updating formatting for running containers guide
* rejiggered end of troubleshooting
* fixed minor typos
* Clarified the windows binary download step
* Update _index.md
making updates based on feedback
* Update _index.md
updating ovn-kubernetes docs
* Update _index.md
* Update _index.md
* updating relative docs links
updating all the links to be relative links to /docs
* Update _index.md
* Update _index.md
updates for windows services and ovn-kubernetes
* formatted for correct step numbering
* fix typos
* Update _index.md
updates for flannel PR in troubleshooting
* Update _index.md
* Update _index.md
updating a few sections like roadmap, services, troubleshooting/filing tickets
* Update _index.md
* Update _index.md
* Update _index.md
* Fixed a few whitespace issues
* Update _index.md
* Update _index.md
* Update _index.md
* add section on upgrading CoreDNS (#12909)
* documentation for kubelet resource metrics endpoint (#12934)
* windows docs updates for 1.14 (#13279)
* Delete sample-l2bridge-wincni-config.json
this file is not used anywhere
* Update _index.md
* Update _index.md
* Update _index.md
* Update _index.md
* Update _index.md
* Rename content/en/docs/getting-started-guides/windows/_index.md to content/en/docs/setup/windows/_index.md
moving to new location
* Delete flannel-master-kubectl-get-ds.png
* Delete flannel-master-kubeclt-get-pods.png
* Delete windows-docker-error.png
* Add files via upload
* Rename _index.md to add-windows-nodes.md
* Create _index.md
* Update _index.md
* Update add-windows-nodes.md
* Update add-windows-nodes.md
* Create user-guide-windows-nodes.md
* Create user-guide-windows-containers.md
* Update and rename add-windows-nodes.md to intro-windows-nodes.md
* Update user-guide-windows-containers.md
* Rename intro-windows-nodes.md to intro-windows-in-kubernetes.md
* Update user-guide-windows-nodes.md
* Update user-guide-windows-containers.md
* Update user-guide-windows-containers.md
* Update user-guide-windows-nodes.md
* Update user-guide-windows-containers.md
* Update _index.md
* Update intro-windows-in-kubernetes.md
* Update intro-windows-in-kubernetes.md
fixing the pause image
* Update intro-windows-in-kubernetes.md
changing tables from html to MD
* Update user-guide-windows-nodes.md
converting tables from HTML to MD
* Update intro-windows-in-kubernetes.md
* Update user-guide-windows-nodes.md
* Update user-guide-windows-nodes.md
* Update user-guide-windows-nodes.md
updating the numbering , even though it messes up the notes a little bit. Jim will file a ticket to follow up
* Update user-guide-windows-nodes.md
* update to windows docs for 1.14 (#13322)
* Update intro-windows-in-kubernetes.md
* Update intro-windows-in-kubernetes.md
* Update intro-windows-in-kubernetes.md
* Update intro-windows-in-kubernetes.md
* Update intro-windows-in-kubernetes.md
* Update user-guide-windows-containers.md
* Update user-guide-windows-nodes.md
* Update intro-windows-in-kubernetes.md (#13344)
* server side apply followup (#13321)
* change some parts of serverside apply docs in response to comments
* fix typos and wording
* Update config.toml (#13365)
372 lines
13 KiB
Markdown
372 lines
13 KiB
Markdown
---
|
|
reviewers:
|
|
- piosz
|
|
- x13n
|
|
title: Logging Using Stackdriver
|
|
content_template: templates/concept
|
|
---
|
|
|
|
{{% capture overview %}}
|
|
|
|
Before reading this page, it's highly recommended to familiarize yourself
|
|
with the [overview of logging in Kubernetes](/docs/concepts/cluster-administration/logging).
|
|
|
|
{{< 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),
|
|
see the [sidecar approach](/docs/concepts/cluster-administration/logging#sidecar-container-with-a-logging-agent)
|
|
in the Kubernetes logging overview.
|
|
{{< /note >}}
|
|
|
|
{{% /capture %}}
|
|
|
|
|
|
{{% capture body %}}
|
|
|
|
## Deploying
|
|
|
|
To ingest logs, you must deploy the Stackdriver Logging agent to each node in your cluster.
|
|
The agent is a configured `fluentd` instance, where the configuration is stored in a `ConfigMap`
|
|
and the instances are managed using a Kubernetes `DaemonSet`. The actual deployment of the
|
|
`ConfigMap` and `DaemonSet` for your cluster depends on your individual cluster setup.
|
|
|
|
### Deploying to a new cluster
|
|
|
|
#### Google Kubernetes Engine
|
|
|
|
Stackdriver is the default logging solution for clusters deployed on Google Kubernetes Engine.
|
|
Stackdriver Logging is deployed to a new cluster by default unless you explicitly opt-out.
|
|
|
|
#### Other platforms
|
|
|
|
To deploy Stackdriver Logging on a *new* cluster that you're
|
|
creating using `kube-up.sh`, do the following:
|
|
|
|
1. Set the `KUBE_LOGGING_DESTINATION` environment variable to `gcp`.
|
|
1. **If not running on GCE**, include the `beta.kubernetes.io/fluentd-ds-ready=true`
|
|
in the `KUBE_NODE_LABELS` variable.
|
|
|
|
Once your cluster has started, each node should be running the Stackdriver Logging agent.
|
|
The `DaemonSet` and `ConfigMap` are configured as addons. If you're not using `kube-up.sh`,
|
|
consider starting a cluster without a pre-configured logging solution and then deploying
|
|
Stackdriver Logging agents to the running cluster.
|
|
|
|
{{< warning >}}
|
|
The Stackdriver logging daemon has known issues on platforms other
|
|
than Google Kubernetes Engine. Proceed at your own risk.
|
|
{{< /warning >}}
|
|
|
|
### Deploying to an existing cluster
|
|
|
|
1. Apply a label on each node, if not already present.
|
|
|
|
The Stackdriver Logging agent deployment uses node labels to determine to which nodes
|
|
it should be allocated. These labels were introduced to distinguish nodes with the
|
|
Kubernetes version 1.6 or higher. If the cluster was created with Stackdriver Logging
|
|
configured and node has version 1.5.X or lower, it will have fluentd as static pod. Node
|
|
cannot have more than one instance of fluentd, therefore only apply labels to the nodes
|
|
that don't have fluentd pod allocated already. You can ensure that your node is labelled
|
|
properly by running `kubectl describe` as follows:
|
|
|
|
```
|
|
kubectl describe node $NODE_NAME
|
|
```
|
|
|
|
The output should be similar to this:
|
|
|
|
```
|
|
Name: NODE_NAME
|
|
Role:
|
|
Labels: beta.kubernetes.io/fluentd-ds-ready=true
|
|
...
|
|
```
|
|
|
|
Ensure that the output contains the label `beta.kubernetes.io/fluentd-ds-ready=true`. If it
|
|
is not present, you can add it using the `kubectl label` command as follows:
|
|
|
|
```
|
|
kubectl label node $NODE_NAME beta.kubernetes.io/fluentd-ds-ready=true
|
|
```
|
|
|
|
{{< note >}}
|
|
If a node fails and has to be recreated, you must re-apply the label to
|
|
the recreated node. To make this easier, you can use Kubelet's command-line parameter
|
|
for applying node labels in your node startup script.
|
|
{{< /note >}}
|
|
|
|
1. Deploy a `ConfigMap` with the logging agent configuration by running the following command:
|
|
|
|
```
|
|
kubectl apply -f https://k8s.io/examples/debug/fluentd-gcp-configmap.yaml
|
|
```
|
|
|
|
The command creates the `ConfigMap` in the `default` namespace. You can download the file
|
|
manually and change it before creating the `ConfigMap` object.
|
|
|
|
1. Deploy the logging agent `DaemonSet` by running the following command:
|
|
|
|
```
|
|
kubectl apply -f https://k8s.io/examples/debug/fluentd-gcp-ds.yaml
|
|
```
|
|
|
|
You can download and edit this file before using it as well.
|
|
|
|
## Verifying your Logging Agent Deployment
|
|
|
|
After Stackdriver `DaemonSet` is deployed, you can discover logging agent deployment status
|
|
by running the following command:
|
|
|
|
```shell
|
|
kubectl get ds --all-namespaces
|
|
```
|
|
|
|
If you have 3 nodes in the cluster, the output should looks similar to this:
|
|
|
|
```
|
|
NAMESPACE NAME DESIRED CURRENT READY NODE-SELECTOR AGE
|
|
...
|
|
default fluentd-gcp-v2.0 3 3 3 beta.kubernetes.io/fluentd-ds-ready=true 5m
|
|
...
|
|
```
|
|
|
|
To understand how logging with Stackdriver works, consider the following
|
|
synthetic log generator pod specification [counter-pod.yaml](/examples/debug/counter-pod.yaml):
|
|
|
|
{{< codenew file="debug/counter-pod.yaml" >}}
|
|
|
|
This pod specification has one container that runs a bash script
|
|
that writes out the value of a counter and the datetime once per
|
|
second, and runs indefinitely. Let's create this pod in the default namespace.
|
|
|
|
```shell
|
|
kubectl apply -f https://k8s.io/examples/debug/counter-pod.yaml
|
|
```
|
|
|
|
You can observe the running pod:
|
|
|
|
```shell
|
|
kubectl get pods
|
|
```
|
|
```
|
|
NAME READY STATUS RESTARTS AGE
|
|
counter 1/1 Running 0 5m
|
|
```
|
|
|
|
For a short period of time you can observe the 'Pending' pod status, because the kubelet
|
|
has to download the container image first. When the pod status changes to `Running`
|
|
you can use the `kubectl logs` command to view the output of this counter pod.
|
|
|
|
```shell
|
|
kubectl logs counter
|
|
```
|
|
```
|
|
0: Mon Jan 1 00:00:00 UTC 2001
|
|
1: Mon Jan 1 00:00:01 UTC 2001
|
|
2: Mon Jan 1 00:00:02 UTC 2001
|
|
...
|
|
```
|
|
|
|
As described in the logging overview, this command fetches log entries
|
|
from the container log file. If the container is killed and then restarted by
|
|
Kubernetes, you can still access logs from the previous container. However,
|
|
if the pod is evicted from the node, log files are lost. Let's demonstrate this
|
|
by deleting the currently running counter container:
|
|
|
|
```shell
|
|
kubectl delete pod counter
|
|
```
|
|
```
|
|
pod "counter" deleted
|
|
```
|
|
|
|
and then recreating it:
|
|
|
|
```shell
|
|
kubectl create -f https://k8s.io/examples/debug/counter-pod.yaml
|
|
```
|
|
```
|
|
pod/counter created
|
|
```
|
|
|
|
After some time, you can access logs from the counter pod again:
|
|
|
|
```shell
|
|
kubectl logs counter
|
|
```
|
|
```
|
|
0: Mon Jan 1 00:01:00 UTC 2001
|
|
1: Mon Jan 1 00:01:01 UTC 2001
|
|
2: Mon Jan 1 00:01:02 UTC 2001
|
|
...
|
|
```
|
|
|
|
As expected, only recent log lines are present. However, for a real-world
|
|
application you will likely want to be able to access logs from all containers,
|
|
especially for the debug purposes. This is exactly when the previously enabled
|
|
Stackdriver Logging can help.
|
|
|
|
## Viewing logs
|
|
|
|
Stackdriver Logging agent attaches metadata to each log entry, for you to use later
|
|
in queries to select only the messages you're interested in: for example,
|
|
the messages from a particular pod.
|
|
|
|
The most important pieces of metadata are the resource type and log name.
|
|
The resource type of a container log is `container`, which is named
|
|
`GKE Containers` in the UI (even if the Kubernetes cluster is not on Google Kubernetes Engine).
|
|
The log name is the name of the container, so that if you have a pod with
|
|
two containers, named `container_1` and `container_2` in the spec, their logs
|
|
will have log names `container_1` and `container_2` respectively.
|
|
|
|
System components have resource type `compute`, which is named
|
|
`GCE VM Instance` in the interface. Log names for system components are fixed.
|
|
For a Google Kubernetes Engine node, every log entry from a system component has one of the following
|
|
log names:
|
|
|
|
* docker
|
|
* kubelet
|
|
* kube-proxy
|
|
|
|
You can learn more about viewing logs on [the dedicated Stackdriver page](https://cloud.google.com/logging/docs/view/logs_viewer).
|
|
|
|
One of the possible ways to view logs is using the
|
|
[`gcloud logging`](https://cloud.google.com/logging/docs/api/gcloud-logging)
|
|
command line interface from the [Google Cloud SDK](https://cloud.google.com/sdk/).
|
|
It uses Stackdriver Logging [filtering syntax](https://cloud.google.com/logging/docs/view/advanced_filters)
|
|
to query specific logs. For example, you can run the following command:
|
|
|
|
```none
|
|
gcloud beta logging read 'logName="projects/$YOUR_PROJECT_ID/logs/count"' --format json | jq '.[].textPayload'
|
|
```
|
|
```
|
|
...
|
|
"2: Mon Jan 1 00:01:02 UTC 2001\n"
|
|
"1: Mon Jan 1 00:01:01 UTC 2001\n"
|
|
"0: Mon Jan 1 00:01:00 UTC 2001\n"
|
|
...
|
|
"2: Mon Jan 1 00:00:02 UTC 2001\n"
|
|
"1: Mon Jan 1 00:00:01 UTC 2001\n"
|
|
"0: Mon Jan 1 00:00:00 UTC 2001\n"
|
|
```
|
|
|
|
As you can see, it outputs messages for the count container from both
|
|
the first and second runs, despite the fact that the kubelet already deleted
|
|
the logs for the first container.
|
|
|
|
### Exporting logs
|
|
|
|
You can export logs to [Google Cloud Storage](https://cloud.google.com/storage/)
|
|
or to [BigQuery](https://cloud.google.com/bigquery/) to run further
|
|
analysis. Stackdriver Logging offers the concept of sinks, where you can
|
|
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).
|
|
|
|
## Configuring Stackdriver Logging Agents
|
|
|
|
Sometimes the default installation of Stackdriver Logging may not suit your needs, for example:
|
|
|
|
* You may want to add more resources because default performance doesn't suit 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 using GKE and Stackdriver Logging is enabled in your cluster, you
|
|
cannot change its configuration, because it's managed and supported by GKE.
|
|
However, you can disable the default integration and deploy your own.
|
|
|
|
{{< note >}}
|
|
You will have to support and maintain a newly deployed configuration
|
|
yourself: update the image and configuration, adjust the resources and so on.
|
|
{{< /note >}}
|
|
|
|
To disable the default logging integration, use the following command:
|
|
|
|
```
|
|
gcloud beta container clusters update --logging-service=none CLUSTER
|
|
```
|
|
|
|
You can find notes on how to then 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 cm fluentd-gcp-config --namespace kube-system -o yaml > fluentd-gcp-configmap.yaml
|
|
```
|
|
|
|
Then in the value of the key `containers.input.conf` insert a new filter right after
|
|
the `source` section.
|
|
|
|
{{< note >}}
|
|
Order is important.
|
|
{{< /note >}}
|
|
|
|
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://git.k8s.io/contrib/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.
|
|
|
|
{{% /capture %}}
|