apiVersion: v1 kind: ServiceAccount metadata: name: promtail namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: promtail rules: - apiGroups: [""] resources: - nodes - pods - pods/log - services - endpoints - namespaces verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: promtail roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: promtail subjects: - kind: ServiceAccount name: promtail namespace: monitoring --- apiVersion: v1 kind: ConfigMap metadata: name: promtail-config namespace: monitoring data: promtail.yaml: | server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /run/promtail/positions.yaml clients: - url: http://loki:3100/loki/api/v1/push scrape_configs: - job_name: kubernetes-pods kubernetes_sd_configs: - role: pod relabel_configs: - action: replace source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name] target_label: app regex: (.+) - action: replace source_labels: [__meta_kubernetes_pod_label_app] target_label: app regex: (.+) - action: replace source_labels: [__meta_kubernetes_pod_node_name] target_label: node - action: replace source_labels: [__meta_kubernetes_namespace] target_label: namespace - action: replace source_labels: [__meta_kubernetes_pod_name] target_label: pod - action: replace source_labels: [__meta_kubernetes_pod_container_name] target_label: container - action: replace source_labels: [__meta_kubernetes_pod_uid, __meta_kubernetes_pod_container_name] separator: / target_label: __path__ replacement: /var/log/pods/*$1/*.log - job_name: kubernetes-pods-static pipeline_stages: - regex: source: filename expression: /var/log/pods/(?P[^_]+)_(?P[^_]+)_[^/]+/(?P[^/]+)/[0-9]+\.log - regex: source: pod expression: ^(?P.+?)(?:-[a-f0-9]{8,10}-[a-z0-9]{5}|-[0-9]+)?$ - labels: namespace: pod: container: app: static_configs: - targets: - localhost labels: job: kubernetes-pods __path__: /var/log/pods/*/*/*.log --- apiVersion: apps/v1 kind: DaemonSet metadata: name: promtail namespace: monitoring spec: selector: matchLabels: app: promtail template: metadata: labels: app: promtail spec: serviceAccountName: promtail tolerations: - operator: "Exists" containers: - name: promtail image: grafana/promtail:2.9.6 securityContext: runAsUser: 0 runAsGroup: 0 args: - "-config.file=/etc/promtail/promtail.yaml" volumeMounts: - name: config mountPath: /etc/promtail - name: positions mountPath: /run/promtail - name: varlog mountPath: /var/log readOnly: true - name: dockercontainers mountPath: /var/lib/docker/containers readOnly: true volumes: - name: config configMap: name: promtail-config - name: positions emptyDir: {} - name: varlog hostPath: path: /var/log - name: dockercontainers hostPath: path: /var/lib/docker/containers