230 lines
6.9 KiB
Go Template
230 lines
6.9 KiB
Go Template
{{ 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
|
||
```
|