123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- {{ template "chart.header" . }}
- {{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }}
- {{ template "chart.description" . }}
- {{ template "chart.sourcesSection" . }}
- {{ template "chart.requirementsSection" . }}
- ## Chart Repo
- Add the following repo to use the chart:
- ```console
- helm repo add grafana https://grafana.github.io/helm-charts
- ```
- ## Upgrading
- A major chart version change indicates that there is an incompatible breaking change needing manual actions.
- ### From Chart Versions >= 3.0.0
- * Customizeable initContainer added.
- ### From Chart Versions < 3.0.0
- #### Notable Changes
- * Helm 3 is required
- * Labels have been updated to follow the official Kubernetes [label recommendations](https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/)
- * The default scrape configs have been updated to take new and old labels into consideration
- * The config file must be specified as string which can be templated.
- See below for details
- * The config file is now stored in a Secret and no longer in a ConfigMap because it may contain sensitive data, such as basic auth credentials
- Due to the label changes, an existing installation cannot be upgraded without manual interaction.
- There are basically two options:
- ##### Option 1
- Uninstall the old release and re-install the new one.
- There will be no data loss.
- Promtail will cleanly shut down and write the `positions.yaml`.
- The new release which will pick up again from the existing `positions.yaml`.
- ##### Option 2
- * Add new selector labels to the existing pods:
- ```
- kubectl label pods -n <namespace> -l app=promtail,release=<release> app.kubernetes.io/name=promtail app.kubernetes.io/instance=<release>
- ```
- * Perform a non-cascading deletion of the DaemonSet which will keep the pods running:
- ```
- kubectl delete daemonset -n <namespace> -l app=promtail,release=<release> --cascade=false
- ```
- * Perform a regular Helm upgrade on the existing release.
- The new DaemonSet will pick up the existing pods and perform a rolling upgrade.
- {{ template "chart.valuesSection" . }}
- ## Configuration
- The config file for Promtail must be configured as string.
- This is necessary because the contents are passed through the `tpl` function.
- With this, the file can be templated and assembled from reusable YAML snippets.
- It is common to have multiple `kubernetes_sd_configs` that, in turn, usually need the same `pipeline_stages`.
- Thus, extracting reusable snippets helps reduce redundancy and avoid copy/paste errors.
- See `values.yaml´ for details.
- Also, the following examples make use of this feature.
- For additional reference, please refer to Promtail's docs:
- https://grafana.com/docs/loki/latest/clients/promtail/configuration/
- ### Syslog Support
- ```yaml
- extraPorts:
- syslog:
- name: tcp-syslog
- containerPort: 1514
- service:
- port: 80
- type: LoadBalancer
- externalTrafficPolicy: Local
- loadBalancerIP: 123.234.123.234
- config:
- snippets:
- extraScrapeConfigs: |
- # Add an additional scrape config for syslog
- - job_name: syslog
- syslog:
- listen_address: 0.0.0.0:{{"{{"}} .Values.extraPorts.syslog.containerPort {{"}}"}}
- labels:
- job: syslog
- relabel_configs:
- - source_labels:
- - __syslog_message_hostname
- target_label: hostname
- # example label values: kernel, CRON, kubelet
- - source_labels:
- - __syslog_message_app_name
- target_label: app
- # example label values: debug, notice, informational, warning, error
- - source_labels:
- - __syslog_message_severity
- target_label: level
- ```
- Find additional source labels in the Promtail's docs:
- https://grafana.com/docs/loki/latest/clients/promtail/configuration/#syslog
- ### Journald Support
- ```yaml
- config:
- snippets:
- extraScrapeConfigs: |
- # Add an additional scrape config for syslog
- - job_name: journal
- journal:
- path: /var/log/journal
- max_age: 12h
- labels:
- job: systemd-journal
- relabel_configs:
- - source_labels:
- - __journal__hostname
- target_label: hostname
- # example label values: kubelet.service, containerd.service
- - source_labels:
- - __journal__systemd_unit
- target_label: unit
- # example label values: debug, notice, info, warning, error
- - source_labels:
- - __journal_priority_keyword
- target_label: level
- # Mount journal directory and machine-id file into promtail pods
- extraVolumes:
- - name: journal
- hostPath:
- path: /var/log/journal
- - name: machine-id
- hostPath:
- path: /etc/machine-id
- extraVolumeMounts:
- - name: journal
- mountPath: /var/log/journal
- readOnly: true
- - name: machine-id
- mountPath: /etc/machine-id
- readOnly: true
- ```
- Find additional configuration options in Promtail's docs:
- https://grafana.com/docs/loki/latest/clients/promtail/configuration/#journal
- More journal source labels can be found here https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html.
- > Note that each message from the journal may have a different set of fields and software may write an arbitrary set of custom fields for their logged messages. [(related issue)](https://github.com/grafana/loki/issues/2048#issuecomment-626234611)
- The machine-id needs to be available in the container as it is required for scraping.
- This is described in Promtail's scraping docs:
- https://grafana.com/docs/loki/latest/clients/promtail/scraping/#journal-scraping-linux-only
- ### Push API Support
- ```yaml
- extraPorts:
- httpPush:
- name: http-push
- containerPort: 3500
- grpcPush:
- name: grpc-push
- containerPort: 3600
- config:
- file: |
- server:
- log_level: {{"{{"}} .Values.config.logLevel {{"}}"}}
- http_listen_port: {{"{{"}} .Values.config.serverPort {{"}}"}}
- clients:
- - url: {{"{{"}} .Values.config.lokiAddress {{"}}"}}
- positions:
- filename: /run/promtail/positions.yaml
- scrape_configs:
- {{"{{"}}- tpl .Values.config.snippets.scrapeConfigs . | nindent 2 {{"}}"}}
- - job_name: push1
- loki_push_api:
- server:
- http_listen_port: {{"{{"}} .Values.extraPorts.httpPush.containerPort {{"}}"}}
- grpc_listen_port: {{"{{"}} .Values.extraPorts.grpcPush.containerPort {{"}}"}}
- labels:
- pushserver: push1
- ```
- ### Customize client config options
- By default, promtail send logs scraped to `loki` server at `http://loki-gateway/loki/api/v1/push`.
- If you want to customize clients or add additional options to `loki`, please use the `clients` section. For example, to enable HTTP basic auth and include OrgID header, you can use:
- ```yaml
- config:
- clients:
- - url: http://loki.server/loki/api/v1/push
- tenant_id: 1
- basic_auth:
- username: loki
- password: secret
- ```
|