From d0f73000a8f20842162a29429cb065ac3ccda01a Mon Sep 17 00:00:00 2001 From: Steven Sheehy <ssheehy@firescope.com> Date: Mon, 25 Mar 2019 11:45:53 -0500 Subject: [PATCH] Helm: Allow custom promtail configuration Signed-off-by: Steven Sheehy <ssheehy@firescope.com> --- production/helm/Chart.yaml | 2 +- .../helm/templates/promtail/configmap.yaml | 204 +--------------- production/helm/values.yaml | 218 +++++++++++++++++- production/ksonnet/promtail/config.libsonnet | 5 - tools/scrape_config.sh | 18 -- 5 files changed, 211 insertions(+), 236 deletions(-) diff --git a/production/helm/Chart.yaml b/production/helm/Chart.yaml index 6eebbd45..57501cb3 100644 --- a/production/helm/Chart.yaml +++ b/production/helm/Chart.yaml @@ -1,5 +1,5 @@ name: loki -version: 0.4.0 +version: 0.5.0 appVersion: 0.0.1 kubeVersion: "^1.10.0-0" description: "Loki: like Prometheus, but for logs." diff --git a/production/helm/templates/promtail/configmap.yaml b/production/helm/templates/promtail/configmap.yaml index 71d6c061..25fdc366 100644 --- a/production/helm/templates/promtail/configmap.yaml +++ b/production/helm/templates/promtail/configmap.yaml @@ -10,207 +10,5 @@ metadata: heritage: {{ .Release.Service }} data: promtail.yaml: | - backoff_config: - minbackoff: {{ .Values.promtail.config.backoff_config.minbackoff }} - maxbackoff: {{ .Values.promtail.config.backoff_config.maxbackoff }} - maxretries: {{ .Values.promtail.config.backoff_config.maxretries }} - server: - http_listen_port: {{ .Values.promtail.port }} - positions: - filename: /run/promtail/positions.yaml - scrape_configs: - - entry_parser: '{{ .Values.promtail.entryParser }}' - job_name: kubernetes-pods-name - kubernetes_sd_configs: - - role: pod - relabel_configs: - - source_labels: - - __meta_kubernetes_pod_label_name - target_label: __service__ - - source_labels: - - __meta_kubernetes_pod_node_name - target_label: __host__ - - action: drop - regex: ^$ - source_labels: - - __service__ - - action: replace - replacement: $1 - separator: / - source_labels: - - __meta_kubernetes_namespace - - __service__ - target_label: job - - action: replace - source_labels: - - __meta_kubernetes_namespace - target_label: namespace - - action: replace - source_labels: - - __meta_kubernetes_pod_name - target_label: instance - - action: replace - source_labels: - - __meta_kubernetes_pod_container_name - target_label: container_name - - action: labelmap - regex: __meta_kubernetes_pod_label_(.+) - - replacement: /var/log/pods/$1/*.log - separator: / - source_labels: - - __meta_kubernetes_pod_uid - - __meta_kubernetes_pod_container_name - target_label: __path__ - - entry_parser: '{{ .Values.promtail.entryParser }}' - job_name: kubernetes-pods-app - kubernetes_sd_configs: - - role: pod - relabel_configs: - - action: drop - regex: .+ - source_labels: - - __meta_kubernetes_pod_label_name - - source_labels: - - __meta_kubernetes_pod_label_app - target_label: __service__ - - source_labels: - - __meta_kubernetes_pod_node_name - target_label: __host__ - - action: drop - regex: ^$ - source_labels: - - __service__ - - action: replace - replacement: $1 - separator: / - source_labels: - - __meta_kubernetes_namespace - - __service__ - target_label: job - - action: replace - source_labels: - - __meta_kubernetes_namespace - target_label: namespace - - action: replace - source_labels: - - __meta_kubernetes_pod_name - target_label: instance - - action: replace - source_labels: - - __meta_kubernetes_pod_container_name - target_label: container_name - - action: labelmap - regex: __meta_kubernetes_pod_label_(.+) - - replacement: /var/log/pods/$1/*.log - separator: / - source_labels: - - __meta_kubernetes_pod_uid - - __meta_kubernetes_pod_container_name - target_label: __path__ - - entry_parser: '{{ .Values.promtail.entryParser }}' - job_name: kubernetes-pods-direct-controllers - kubernetes_sd_configs: - - role: pod - relabel_configs: - - action: drop - regex: .+ - separator: '' - source_labels: - - __meta_kubernetes_pod_label_name - - __meta_kubernetes_pod_label_app - - action: drop - regex: ^([0-9a-z-.]+)(-[0-9a-f]{8,10})$ - source_labels: - - __meta_kubernetes_pod_controller_name - - source_labels: - - __meta_kubernetes_pod_controller_name - target_label: __service__ - - source_labels: - - __meta_kubernetes_pod_node_name - target_label: __host__ - - action: drop - regex: ^$ - source_labels: - - __service__ - - action: replace - replacement: $1 - separator: / - source_labels: - - __meta_kubernetes_namespace - - __service__ - target_label: job - - action: replace - source_labels: - - __meta_kubernetes_namespace - target_label: namespace - - action: replace - source_labels: - - __meta_kubernetes_pod_name - target_label: instance - - action: replace - source_labels: - - __meta_kubernetes_pod_container_name - target_label: container_name - - action: labelmap - regex: __meta_kubernetes_pod_label_(.+) - - replacement: /var/log/pods/$1/*.log - separator: / - source_labels: - - __meta_kubernetes_pod_uid - - __meta_kubernetes_pod_container_name - target_label: __path__ - - entry_parser: '{{ .Values.promtail.entryParser }}' - job_name: kubernetes-pods-indirect-controller - kubernetes_sd_configs: - - role: pod - relabel_configs: - - action: drop - regex: .+ - separator: '' - source_labels: - - __meta_kubernetes_pod_label_name - - __meta_kubernetes_pod_label_app - - action: keep - regex: ^([0-9a-z-.]+)(-[0-9a-f]{8,10})$ - source_labels: - - __meta_kubernetes_pod_controller_name - - action: replace - regex: ^([0-9a-z-.]+)(-[0-9a-f]{8,10})$ - source_labels: - - __meta_kubernetes_pod_controller_name - target_label: __service__ - - source_labels: - - __meta_kubernetes_pod_node_name - target_label: __host__ - - action: drop - regex: ^$ - source_labels: - - __service__ - - action: replace - replacement: $1 - separator: / - source_labels: - - __meta_kubernetes_namespace - - __service__ - target_label: job - - action: replace - source_labels: - - __meta_kubernetes_namespace - target_label: namespace - - action: replace - source_labels: - - __meta_kubernetes_pod_name - target_label: instance - - action: replace - source_labels: - - __meta_kubernetes_pod_container_name - target_label: container_name - - action: labelmap - regex: __meta_kubernetes_pod_label_(.+) - - replacement: /var/log/pods/$1/*.log - separator: / - source_labels: - - __meta_kubernetes_pod_uid - - __meta_kubernetes_pod_container_name - target_label: __path__ + {{- tpl (toYaml .Values.promtail.config | nindent 4 ) . }} {{- end }} diff --git a/production/helm/values.yaml b/production/helm/values.yaml index ee7df7a8..a6b6ed1b 100644 --- a/production/helm/values.yaml +++ b/production/helm/values.yaml @@ -134,20 +134,12 @@ promtail: entryParser: docker - config: - backoff_config: - # Initial backoff time between retries - minbackoff: 100ms - # Maximum backoff time between retries - maxbackoff: 5s - # Maximum number of retires when sending batches, 0 means infinite retries - maxretries: 5 - image: repository: grafana/promtail tag: latest pullPolicy: Always # Always pull while in BETA + # This should match promtail.config.server.http_listen_port port: 3101 # Extra volumes to scrape logs from @@ -213,3 +205,211 @@ promtail: ## affinity: {} + config: + client: + backoff_config: + # Initial backoff time between retries + minbackoff: 100ms + # Maximum backoff time between retries + maxbackoff: 5s + # Maximum number of retires when sending batches, 0 means infinite retries + maxretries: 5 + server: + http_listen_port: 3101 + positions: + filename: /run/promtail/positions.yaml + scrape_configs: + - entry_parser: '{{ .Values.promtail.entryParser }}' + job_name: kubernetes-pods-name + kubernetes_sd_configs: + - role: pod + relabel_configs: + - source_labels: + - __meta_kubernetes_pod_label_name + target_label: __service__ + - source_labels: + - __meta_kubernetes_pod_node_name + target_label: __host__ + - action: drop + regex: ^$ + source_labels: + - __service__ + - action: replace + replacement: $1 + separator: / + source_labels: + - __meta_kubernetes_namespace + - __service__ + target_label: job + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: instance + - action: replace + source_labels: + - __meta_kubernetes_pod_container_name + target_label: container_name + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - replacement: /var/log/pods/$1/*.log + separator: / + source_labels: + - __meta_kubernetes_pod_uid + - __meta_kubernetes_pod_container_name + target_label: __path__ + - entry_parser: '{{ .Values.promtail.entryParser }}' + job_name: kubernetes-pods-app + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: drop + regex: .+ + source_labels: + - __meta_kubernetes_pod_label_name + - source_labels: + - __meta_kubernetes_pod_label_app + target_label: __service__ + - source_labels: + - __meta_kubernetes_pod_node_name + target_label: __host__ + - action: drop + regex: ^$ + source_labels: + - __service__ + - action: replace + replacement: $1 + separator: / + source_labels: + - __meta_kubernetes_namespace + - __service__ + target_label: job + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: instance + - action: replace + source_labels: + - __meta_kubernetes_pod_container_name + target_label: container_name + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - replacement: /var/log/pods/$1/*.log + separator: / + source_labels: + - __meta_kubernetes_pod_uid + - __meta_kubernetes_pod_container_name + target_label: __path__ + - entry_parser: '{{ .Values.promtail.entryParser }}' + job_name: kubernetes-pods-direct-controllers + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: drop + regex: .+ + separator: '' + source_labels: + - __meta_kubernetes_pod_label_name + - __meta_kubernetes_pod_label_app + - action: drop + regex: ^([0-9a-z-.]+)(-[0-9a-f]{8,10})$ + source_labels: + - __meta_kubernetes_pod_controller_name + - source_labels: + - __meta_kubernetes_pod_controller_name + target_label: __service__ + - source_labels: + - __meta_kubernetes_pod_node_name + target_label: __host__ + - action: drop + regex: ^$ + source_labels: + - __service__ + - action: replace + replacement: $1 + separator: / + source_labels: + - __meta_kubernetes_namespace + - __service__ + target_label: job + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: instance + - action: replace + source_labels: + - __meta_kubernetes_pod_container_name + target_label: container_name + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - replacement: /var/log/pods/$1/*.log + separator: / + source_labels: + - __meta_kubernetes_pod_uid + - __meta_kubernetes_pod_container_name + target_label: __path__ + - entry_parser: '{{ .Values.promtail.entryParser }}' + job_name: kubernetes-pods-indirect-controller + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: drop + regex: .+ + separator: '' + source_labels: + - __meta_kubernetes_pod_label_name + - __meta_kubernetes_pod_label_app + - action: keep + regex: ^([0-9a-z-.]+)(-[0-9a-f]{8,10})$ + source_labels: + - __meta_kubernetes_pod_controller_name + - action: replace + regex: ^([0-9a-z-.]+)(-[0-9a-f]{8,10})$ + source_labels: + - __meta_kubernetes_pod_controller_name + target_label: __service__ + - source_labels: + - __meta_kubernetes_pod_node_name + target_label: __host__ + - action: drop + regex: ^$ + source_labels: + - __service__ + - action: replace + replacement: $1 + separator: / + source_labels: + - __meta_kubernetes_namespace + - __service__ + target_label: job + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: instance + - action: replace + source_labels: + - __meta_kubernetes_pod_container_name + target_label: container_name + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - replacement: /var/log/pods/$1/*.log + separator: / + source_labels: + - __meta_kubernetes_pod_uid + - __meta_kubernetes_pod_container_name + target_label: __path__ diff --git a/production/ksonnet/promtail/config.libsonnet b/production/ksonnet/promtail/config.libsonnet index 335531fb..8b9f9a1f 100644 --- a/production/ksonnet/promtail/config.libsonnet +++ b/production/ksonnet/promtail/config.libsonnet @@ -13,11 +13,6 @@ container_root_path: '/var/lib/docker', external_labels: {}, entry_parser: 'docker', - backoff_config: { - minbackoff: 100ms, - maxbackoff: 5s, - maxretries: 5 - } }, service_url: diff --git a/tools/scrape_config.sh b/tools/scrape_config.sh index 14a8bfc7..ebb945b7 100755 --- a/tools/scrape_config.sh +++ b/tools/scrape_config.sh @@ -19,30 +19,12 @@ case $target in ;; "helm") - cat <<EOF -{{- if .Values.promtail.enabled }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ template "promtail.fullname" . }} - labels: - app: {{ template "promtail.name" . }} - chart: {{ template "promtail.chart" . }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -data: - promtail.yaml: | - scrape_configs: -EOF (cd $BASE; jsonnet -e '((import "../production/ksonnet/promtail/scrape_config.libsonnet") + { _config:: { promtail_config: { entry_parser: "{{ .Values.promtail.entryParser }}"}}}).promtail_config' \ | ytools 2>/dev/null \ | tail -n +3 \ | awk '{ print " " $0 }' \ ) - cat <<EOF -{{- end }} -EOF ;; *) echo "unknown target. expected 'shell' or 'helm'" -- GitLab