安装 Promtail
注意
Promtail 已被弃用,并将进入长期支持 (LTS),直到 2026 年 2 月 28 日。Promtail 将于 2026 年 3 月 2 日达到生命周期结束 (EOL)。您可以在此处找到迁移资源。
Promtail 作为二进制文件、Docker 容器分发,也可以使用 Helm Chart 在 Kubernetes 集群中安装。
安装二进制文件
每个 Grafana Loki 版本都包含 Promtail 的二进制文件,可在发布页面的发布资产中找到。
使用 APT 或 RPM 包管理器安装
请参阅此处的说明。
使用 Docker 安装
请务必修改标签以使用最新版本。
docker pull grafana/promtail:3.2.1
创建一个名为
promtail-config.yaml
的 Promtail 配置文件。有关更多详细信息,请参阅Promtail 配置参考。请注意,您需要在命令中将
<local-path>
替换为您的本地路径。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 上安装
如有必要,请安装Homebrew。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
更新 Homebrew。
brew update
要安装 Promtail,请运行以下命令
brew install promtail
检查安装是否成功。
检查 promtail 是否存在于其安装目录中。
which promtail
运行 promtail
promtail
使用 Helm 安装
确保已安装 Helm。请参阅安装 Helm。
然后您可以将 Grafana 的 Chart 仓库添加到 Helm
helm repo add grafana https://grafana.github.io/helm-charts
更新 Chart 仓库
helm repo update
创建配置文件
values.yaml
。以下示例说明了如何连接到本地部署的 Loki 服务器config: # publish data to loki clients: - url: http://loki-gateway/loki/api/v1/push tenant_id: 1
最后,可以使用以下命令部署 Promtail
# The default helm configuration deploys promtail as a daemonSet (recommended) helm upgrade --values values.yaml --install promtail grafana/promtail
安装为 Kubernetes DaemonSet (推荐)
DaemonSet
将在 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