但是 Promtail 是运行 Kubernetes 时的首选客户端,因为你可以将其配置为自动从 Promtail 运行的同一节点上运行的 Pod 中抓取日志。 Promtail 和 Prometheus 在 Kubernetes 中一起运行,还可以实现非常强大的调试功能,如果 Prometheus 和 Promtail 使用相同的标签,用户还可以使用 Grafana 此外如果你想从日志中提取指标,比如计算某个特定信息的出现次数,Promtail 效果也是非常友好的。 在 Promtail 中一个 pipeline 管道被用来转换一个单一的日志行、标签和它的时间戳。 本文将介绍 Promtail 中的核心概念 pipeline 以及了解下如何设置 Promtail 来处理你的日志行数据,包括提取指标与标签等。 对于第二行日志也遵循同样的流程,只是值变成了 promtail。
云原生环境下, Grafana + Loki + Promtail 横空出世。 Promtail:相当于 EFK 中的 Filebeat/Fluentd ,用于采集日志并将其发送给 Loki 。 Loki整体架构 Promtail 介绍 Promtail 将本地日志内容传送到 Loki 实例。需要监控的应用程序的机器上都需要部署该组件。 Loki组件架构 使用 Helm 部署 以 Helm 部署 Loki (StatefulSet 方式) 和 Promtail(DaemonSet 方式)采集 k8s pod 应用的日志为例 # 添加 helm install promtail grafana/promtail -f promtail-config.yaml -n loki loki-config.yaml 配置: # loki
Promtail 是负责收集日志发送给 loki 的代理程序,Promtail 默认通过一个 config.yaml 文件进行配置,其中包含 Promtail 服务端信息、存储位置以及如何从文件中抓取日志等配置 默认的 config.yaml 配置文件支持的内容格式为: # 配置 Promtail 服务端 [server: <server_config>] # 描述 Promtail 如何连接到 Loki 的多个实例 当 Promtail 重新启动时需要它,以允许它从中断的地方继续读取日志。 # 用于在 Promtail 中识别该抓取配置的名称。 ] 比如下面的配置示例,将 Promtail 作为一个 Push 接收器启动,并将接受来自其他 Promtail 实例或 Docker Logging Dirver 的日志。
序 本文主要研究一下promtail的positions OIP - 2021-01-21T235621.658.jpeg Positions loki/pkg/promtail/positions Stop() } Positions接口定义了GetString、Get、PutString、Put、Remove、SyncPeriod、Stop方法 positions loki/pkg/promtail Put方法写数据到p.positions中;其SyncPeriod方法返回的是p.cfg.SyncPeriod;其Remove方法将path从p.positions中删除 New loki/pkg/promtail return p, nil } New方法会通过readPositionsFile读取positionData创建positions,然后异步执行p.run() run loki/pkg/promtail doc promtail
序 本文主要研究一下promtail的positions Positions loki/pkg/promtail/positions/positions.go type Positions interface Stop() } Positions接口定义了GetString、Get、PutString、Put、Remove、SyncPeriod、Stop方法 positions loki/pkg/promtail 其Put方法写数据到p.positions中;其SyncPeriod方法返回的是p.cfg.SyncPeriod;其Remove方法将path从p.positions中删除 New loki/pkg/promtail ) return p, nil } New方法会通过readPositionsFile读取positionData创建positions,然后异步执行p.run() run loki/pkg/promtail doc promtail
/promtail 直接运行Promtail时能够快速输出配置 -log-config-reverse-order 配置通过反向输出,这样再Grafana中就能从上到下正确读取 配置文件参考 -config.file . # Promtail server端配置 [server: <server_config>] # Describes how Promtail connects to multiple instances 如果要发送到多个远程Loki实例,通常建议并行运行多个Promtail客户端。 这意味着如果您已经拥有一个Prometheus实例,那么配置将非常相似 # Name to identify this scrape config in the Promtail UI. # 在Promtail #这是prometheus服务发现代码所要求的,但并不真正适用于Promtail,因为Promtail只能查看本地计算机上的文件。
序 本文主要研究一下promtail的Client OIP - 2021-01-20T235914.310.jpeg Client loki/pkg/promtail/client/client.go Stop() } Client接口内嵌了api.EntryHandler接口,定义了Stop方法 EntryHandler loki/pkg/promtail/api/types.go // EntryHandler model.LabelSet, time time.Time, entry string) error } EntryHandler接口定义了Handle方法 client loki/pkg/promtail tenantID, batch)及delete;最后quit的时候,还有defer方法遍历batches执行c.sendBatch(tenantID, batch) sendBatch loki/pkg/promtail doc promtail
promtail 是代理,负责收集日志并将其发送给 loki 。 Grafana 用于 UI 展示。 只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Loki为数据源进行日志查询(如果Loki服务器性能不够,可以部署多个Loki进行存储及查询 image.png 应用服务器158,上传promtail-linux-amd64.zip后解压 mkdir /usr/local/promtail unzip promtail-linux-amd64 .zip vim promtail.yaml ------------------------ server: http_listen_port: 9080 grpc_listen_port: /promtail-linux-amd64 -config.file=./promtail.yaml > .
promtail 配置(最小) server: http_listen_port: 9080 positions: filename: /tmp/positions.yaml clients: Loki 查询示例 # 查看最近日志 {job="app"} |= "ERROR" # 按数量统计 sum(rate({job="app"} |= "ERROR" [5m])) 组件速查 组件 作用 Promtail
2.2 Promtail 安装 2.2.1 下载 Promtail # 创建 Promtail 配置文件夹 sudo mkdir -p /etc/promtail # 下载 Promtail 配置文件 -O /etc/promtail/promtail-local-config.yaml 2.2.2 安装 Promtail # 下载 Promtail 安装脚本 curl -O https://raw.githubusercontent.com /grafana/loki/main/scripts/promtail-docker.sh # 添加执行权限 chmod +x promtail-docker.sh # 执行 Promtail 安装脚本 /promtail-docker.sh 2.3 启动 Promtail # 启动 Promtail docker run -d --name promtail -v /var/log:/var/log -v /etc/promtail:/etc/promtail --link loki:loki grafana/promtail 第三部分:Grafana 配置与可视化 3.1 Grafana 安装 #
解决方案 PLG概述 Promtail、Loki 和 Grafana 是一组开源工具,通常一起使用,用于帮助监控、收集、存储和可视化日志和指标数据的现代化日志解决方案。 Promtail: 介绍:Promtail 是 Grafana Labs 开发的一个用于日志收集的开源代理。 功能:Promtail 会监视目标日志文件、目录或系统日志流,并将其发送到 Loki 数据源。它还支持标签化日志以使其更易于查询,类似于 Prometheus 的标签数据模型。 用途:Promtail 可以与容器化环境、Kubernetes 集群和传统主机一起使用,以便实时收集和传输日志数据。 ---- 3个组件 (Promtail + Loki + Grafana) 代理- 代理或客户端,例如与 Loki 一起分发的 Promtail 或 Grafana 代理。
这里稍微介绍下另外两个软件Promtail和Loki。 Promtail主要是用来发现目标、将标签附加到日志流以及将日志推送到Loki。截止到目前,Promtail可以跟踪两个来源的日志:本地日志文件和systemd日志(仅支持AMD64架构)。 在EKS上部署Promtail + Loki + Grafana解决方案 接下来,我们将演示如何在EKS上部署Promtail + Loki + Grafana组合,下面演示需要有满足一些前提条件: 一个正常运行的 ds loki-promtail -n loki Name: loki-promtail Selector: app=promtail,release=loki Node-Selector Containers: promtail: Image: grafana/promtail:2.1.0 Port: 3101/TCP Host
,将 promtail 配置文件拷贝到宿主机 $ docker run -ti --name promtail grafana/promtail:2.4.1 -config.file=/etc/promtail /config.yml $ mkdir /data/soft/promtail $ docker cp promtail:/etc/promtail/config.yml /data/soft/promtail /config.yml 收集 nginx 日志 修改 promtail 配置文件 url: 指定 Loki 地址 $ vim /data/soft/promtail/config.yml server: /config.yml:/etc/promtail/config.yml \ grafana/promtail:2.4.1 -config.file=/etc/promtail/config.yml # # 客户端收集日志 将需要收集的日志挂载到 promtail 容器 客户端仅启动 promtail 日志收集容器 -v 宿主机日志目录:/var/log/**** promtail 配置说明 支持通配符
通过promtail进行日志收集,写入loki promtail.yaml 文件内容如下 client: backoff_config: maxbackoff: 5s maxretries --from-file=promtail.yaml=promtail-config -n loki promtail-ds.yaml内容如下 # Source: promtail/templates/ labels: app: promtail release: calling-quailsubjects: - kind: ServiceAccount name: promtail name: promtail namespace: loki labels: app: promtail release: calling-quailrules:- apiGroups: : IfNotPresent args: - "-config.file=/etc/promtail/promtail.yaml" - "-
image: grafana/promtail:latest imagePullPolicy: Always command: ["/usr/bin /promtail", "-config.file=/etc/promtail-local-config.yaml"] ports: - name: http 在Deployment对象中,指定了Promtail的镜像以及容器的端口号。此外,还指定了一个名为loki-agent-config的ConfigMap,用于存储Promtail的配置文件。 在容器中,使用/etc/promtail-local-config.yaml路径挂载此ConfigMap。在容器中,还指定了一个名为var-log的主机路径卷,用于存储Nginx的日志文件。 为了将Nginx的日志文件发送到Loki,使用了Promtail的客户端库将日志发送到Loki中。
(二) ♂️ 亲儿子Promtail promtail 是 loki 的官方日志采集器,本身代码就在 loki 项目中。原生支持journal、syslog、file、docker类型的日志。 ,promtail 可以预先对其进行进行更深解析与封装。 每台主机部署一台 promtail,然后整个集群部署一套服务端 loki 与可视化端grafana。 promtail 采用static_configs定义采集的日志。 ,但是promtail还不知道要采集哪些日志,以及他的标签是什么。 注意:这里不可用使用 promtail 的服务发现机制配置标签,因为promtail 的服务发现的原理是请求 APIServer 获取所有pod 的标签。然后利用路径进行匹配,将标签与日志关联。
promtail 是代理,负责收集日志并将其发送给loki。 用户界面的Grafana。 helm upgrade --install loki loki/loki helm upgrade --install promtail loki/promtail --set "loki.serviceName 37s loki-promtail-h4lrm 0/1 Running 0 37s loki-promtail-mbjws 0/1 Running AGE loki 41s loki-promtail 41s ==> v1/RoleBinding NAME AGE loki 40s loki-promtail 2m11s loki-promtail-mbjws 1/1 Running 0 2m11s loki-promtail-nj7k4
安装promtail 3.1 下载地址 https://github.com/grafana/loki/releases 3.2 安装 [root@testqwe ~]# mdkir promtail /v2.7.1/promtail-linux-amd64.zip [root@testqwe ~]# unzip promtail-linux-amd64.zip 3、修改配置文件 client:loki /positions.yaml # This location needs to be writeable by promtail. ] ExecStart=/root/promtail/promtail-linux-amd64 -config.file=/root/promtail/promtail.yaml StandardOutput @testqwe ~]# systemctl daemon-reload [root@testqwe ~]# systemctl start promtail.service 4.
、部署Loki和Promtail Loki 是一个日志聚合系统,用于高效管理日志。Loki 使用 Promtail 来聚合日志。 Promtail 是一个日志收集代理,专为 Loki 设计,负责收集、标记并将日志发送到 Loki。您会看到每个 Kubernetes 节点上都运行着一个 Promtail 实例。 pip install langchain openai pymilvus ragas 上述命令将默认 Promtail 配置写入一个名为 promtail-overrides.yaml 的文件。 2.编辑默认 Promtail 配置: 编辑 promtail-overrides.yaml 文件,将clients.url 的值修改为正确的 Loki service endpoint。 3.使用修改后的配置文件部署 Promtail : helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail
日志采集 promtail 配置有什么需要注意的地方 下面以 helm 默认部署 loki 之后为例进行修改 如何配置定期删除过期日志 我们最常见的一个需求就是只保留固定天数的日志,因为由于日志量大,所以过期的日志不做保留 : - name: promtail image: grafana/promtail:2.1.0 imagePullPolicy: Always args: - "-config.file=/etc/promtail/promtail.yaml" - "-client.url=http://loki.your-namespace.svc.cluster.local 中,这样 promtail 才可以访问到这个日志文件 promtail 的版本最好和当前 loki 部署时对应的 promtail 版本一致避免问题 下面就是 promtail 的配置了,这个配置可以根据自己的需要进行调整 true" - "-config.file=/etc/promtail/promtail.yaml" - "-client.url=http://loki.your-namespace.svc.cluster.local