Promtail 以二进制形式分布在 Docker 容器中,或者有一个 Helm chart 可以将其安装在 Kubernetes 集群中。

二进制

每个 Grafana Loki 版本都包含 Promtail 的二进制文件,可以在 发布页面上找到它作为发布资产的一部分。

码头工人

modify tag to most recent version

docker pull grafana/promtail:2.0.0


确保已安装 Helm。请参阅安装 Helm。然后就可以将Grafana的chart仓库添加到Helm中了:

helm repo add grafana https://grafana.github.io/helm-charts
并且可以通过运行更新图表存储库:

helm repo update
最后,可以使用以下方式部署 Promtail:

$ helm upgrade –install promtail grafana/promtail –set “loki.serviceName=loki”
库伯内斯
DaemonSet(推荐)
ADaemonSet将在 Kubernetes 集群中的每个节点上部署 Promtail。

DaemonSet 部署可以很好地收集集群内所有容器的日志。这是单租户模型的最佳解决方案。替换{YOUR_LOKI_ENDPOINT}为您的 Loki 端点。

— # Daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: promtail-daemonset
spec:
selector:
matchLabels:
name: promtail
template:
metadata:
labels:
name: promtail
spec:
serviceAccount: promtail-serviceaccount
containers:

  - name: promtail-container
    image: grafana/promtail
    args:
    - -config.file=/etc/promtail/promtail.yaml
    env: 
    - name: 'HOSTNAME' # needed when using kubernetes_sd_configs
      valueFrom:
        fieldRef:
          fieldPath: 'spec.nodeName'
    volumeMounts:
    - name: logs
      mountPath: /var/log
    - name: promtail-config
      mountPath: /etc/promtail
    - mountPath: /var/lib/docker/containers
      name: varlibdockercontainers
      readOnly: true
  volumes:
  - name: logs
    hostPath:
      path: /var/log
  - name: varlibdockercontainers
    hostPath:
      path: /var/lib/docker/containers
  - name: promtail-config
    configMap:
      name: promtail-config

— # configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: promtail-config
data:
promtail.yaml: |
server:
http_listen_port: 9080
grpc_listen_port: 0

clients:
- url: https://{YOUR_LOKI_ENDPOINT}/loki/api/v1/push

positions:
  filename: /tmp/positions.yaml
target_config:
  sync_period: 10s
scrape_configs:
- job_name: pod-logs
  kubernetes_sd_configs:
    - role: pod
  pipeline_stages:
    - docker: {}
  relabel_configs:
    - source_labels:
        - __meta_kubernetes_pod_node_name
      target_label: __host__
    - action: labelmap
      regex: __meta_kubernetes_pod_label_(.+)
    - action: replace
      replacement: $1
      separator: /
      source_labels:
        - __meta_kubernetes_namespace
        - __meta_kubernetes_pod_name
      target_label: job
    - 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
    - replacement: /var/log/pods/*$1/*.log
      separator: /
      source_labels:
        - __meta_kubernetes_pod_uid
        - __meta_kubernetes_pod_container_name
      target_label: __path__

— # Clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: promtail-clusterrole
rules:

  • apiGroups: [“”]
    resources:
    • nodes
    • services
    • pods
      verbs:
    • get
    • watch
    • list

— # ServiceAccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: promtail-serviceaccount

— # Rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: promtail-clusterrolebinding
subjects:

- kind: ServiceAccount
  name: promtail-serviceaccount
  namespace: default

roleRef:
kind: ClusterRole
name: promtail-clusterrole
apiGroup: rbac.authorization.k8s.io

作者:Jeebiz  创建时间:2023-02-26 21:27
最后编辑:Jeebiz  更新时间:2024-02-26 11:18