菜单
开源

安装 Promtail

注意

Promtail 已被弃用,并将进入长期支持 (LTS),直到 2026 年 2 月 28 日。Promtail 将于 2026 年 3 月 2 日达到生命周期结束 (EOL)。您可以在此处找到迁移资源。

Promtail 作为二进制文件、Docker 容器分发,也可以使用 Helm Chart 在 Kubernetes 集群中安装。

安装二进制文件

每个 Grafana Loki 版本都包含 Promtail 的二进制文件,可在发布页面的发布资产中找到。

使用 APT 或 RPM 包管理器安装

请参阅此处的说明

使用 Docker 安装

  1. 请务必修改标签以使用最新版本。

    bash
    docker pull grafana/promtail:3.2.1
  2. 创建一个名为 promtail-config.yaml 的 Promtail 配置文件。有关更多详细信息,请参阅Promtail 配置参考

  3. 请注意,您需要在命令中将 <local-path> 替换为您的本地路径。

    bash
    docker run -v <local-path>:/mnt/config -v /var/log:/var/log --link loki grafana/promtail:3.2.1 --config.file=/mnt/config/promtail-config.yaml

使用 Homebrew 在 MacOS 上安装

  1. 如有必要,请安装Homebrew

    bash
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. 更新 Homebrew。

    bash
    brew update
  3. 导航到Promtail 的 Homebrew 页面

  4. 要安装 Promtail,请运行以下命令

    bash
    brew install promtail
  5. 检查安装是否成功。

    1. 检查 promtail 是否存在于其安装目录中。

      bash
      which promtail
    2. 运行 promtail

      bash
      promtail

使用 Helm 安装

  1. 确保已安装 Helm。请参阅安装 Helm

  2. 然后您可以将 Grafana 的 Chart 仓库添加到 Helm

    bash
    helm repo add grafana https://grafana.github.io/helm-charts
  3. 更新 Chart 仓库

    bash
    helm repo update
  4. 创建配置文件 values.yaml。以下示例说明了如何连接到本地部署的 Loki 服务器

    yaml
    config:
    # publish data to loki
      clients:
        - url: http://loki-gateway/loki/api/v1/push
          tenant_id: 1
  5. 最后,可以使用以下命令部署 Promtail

    bash
    # The default helm configuration deploys promtail as a daemonSet (recommended)
    helm upgrade --values values.yaml --install promtail grafana/promtail

DaemonSet 将在 Kubernetes 集群的每个节点上部署 Promtail。

DaemonSet 部署非常适合收集集群中所有容器的日志。对于单租户模型来说,这是最佳解决方案。将 {YOUR_LOKI_ENDPOINT} 替换为您的 Loki 端点。

yaml
--- # 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