日志收集工具Telegraf和Promtail

news/2025/2/13 11:26:13/文章来源:https://www.cnblogs.com/Nuwa/p/18712778

工具说明

  • Telegraf:
    • Telegraf 是一个用于收集、处理、聚合和写入指标、日志和其他任意数据的代理。
    • 提供超过 300 个插件的综合套件,涵盖系统监控、云服务和消息传递等广泛功能
    • 支持集成用户定义的代码,以高效地收集、转换和传输数据
    • 编译为独立的静态二进制文件,无需任何外部依赖,确保简化部署流程。支持多种操作系统,Linux、Window皆可以使用
    • 属于influxdata的开源项目https://github.com/influxdata/telegraf/tree/master
  • Promtail:
    • Promtail是一个代理,负责将本地日志内容发送到私有Grafana Loki实例或Grafana Cloud。它通常部署到运行需要监控的应用的每一台机器上。
    • 提供发现目标、为日志流附加标签,并将数据推送到将它们推送到Loki实例。
    • Promtail可以从两个来源跟踪日志:本地日志文件和systemd日志(在ARM和AMD64机器上)
    • 天然的与Prometheus结合。也就是它主要就是Grafana家族用来做日志解析和推送的

为什么把这两个拿来比较,看起来Telegraf功能上是更强大一些,Promtail只是一个日志收集推送代理呢。但从日志解析功能上来说两个差不多,都是用表达式,支持正则来解析数据。

但是指标收集聚合功能上Telegraf就很强大,比如我们在不同的机器上有多个服务组件,如Redis、NGINX、Apache等,只需要在一个机器上运行Telegraf,并配置这些组件的地址等信息,就可以抓取并暴露指标,等待外部服务获取指标数据即可。而如果使用Grafana家族的,那就要在每个机器上安装不同的组件运行不同的exporter。

image

Telegraf配置

可以创建一个目录,然后在目录下按照不同的组件,创建不同的.conf文件,运行时指定配置文件目录即可。注意只是测试时,后面可配置为 --test、--debug

.\telegraf.exe --config-directory D:\NDev\telegraf-1.33.0_windows_amd64\telegraf-1.33.0\conf

这里用两个配置文件来举例:

  1. 一个收集Tomcat的Access日志的

    [[inputs.tail]]name_override = "tomcat_log"files = ["D:/telegraf-1.33.0_windows_amd64/telegraf-1.33.0/sample/access.log"]from_beginning = truepipe = falsedata_format = "grok"grok_patterns = ["%{COMMON_LOG_FORMAT}(?: (?:%{NUMBER:cost_time:int}|-))?"]# 处理多行合并的情况,避免被一行行解析。对于解析业务日志很有用# [inputs.tail.multiline]#   pattern = "^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}"#   preserve_newline = true#   timeout = "3s"
    [inputs.tail.tags]_router_key = "tomcat_access"[[outputs.file]]## Files to write to, "stdout" is a specially handled file.files = ["stdout"][[outputs.prometheus_client]]listen = ":19360"collectors_exclude = ["gocollector"]

    关于Telegraf的具体各项插件和配置,上面连接的每个目录下都有详细说明。这里说一下上面的patterns的配置,因为用的是grok来解析的这里的COMMON_LOG_FORMAT是标准日志格式,相似的还有一个叫COMBIED_LOG_FORMAT(如果配置Nginx的access日志解析,直接使用这个即可)。
    https://en.wikipedia.org/wiki/Combined_Log_Format
    https://en.wikipedia.org/wiki/Common_Log_Format

    grok语法说明https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#_grok_basics,里面有很多预制的SYNTAX。基本语法%{SYNTAX:SEMANTIC} 或者 %{SYNTAX:SEMANTIC:TYPE}https://github.com/logstash-plugins/logstash-patterns-core/blob/main/patterns/legacy/grok-patterns

  2. 再给出一个简单的Redis的指标收集配置

    # Read metrics from one or many redis servers
    [[inputs.redis]]servers = ["tcp://:mypass@192.168.3.35:6379"]
    [inputs.redis.tags]_router_key = "redis"
    [[outputs.prometheus_client]]listen = ":19450"collectors_exclude = ["gocollector", "process"]
    [outputs.prometheus_client.tagpass]_router_key = ["redis"]

Promtail配置

Promtail的配置是yaml格式的,这里举个配置的例子:里面读取了多个日志文件,并按照一定格式解析,最终推送到loki中

server:http_listen_port: 9080grpc_listen_port: 0# 是否启用运行时重新加载,重新加载,指标都将被重置。enable_runtime_reload: false
# positions 块配置 Promtail 将在何处保存一个文件,该文件指示它已读取文件多远。它是在 Promtail 重新启动时需要的,以允许它从停止的地方继续
positions:filename: D:\Loki-promtail\positions.yamlsync_period: 10sclients:- url: http://192.168.1.88:3100/loki/api/v1/pushscrape_configs:
- job_name: java_currentstatic_configs:- targets: ["192.168.1.15"]labels:job: emoappservice: 'tomcat1'__path__: D:/apache-tomcat-9.0.98/8080/logs/*.log  - targets: ["192.168.1.15"]labels:job: emoappservice: 'tomcat2'__path__: D:/apache-tomcat-9.0.98/8081/logs/*.log  pipeline_stages:# 多行日志处理,避免把SQL、异常堆栈给分成多行解析- match:selector: '{job="emoapp"}'stages:- multiline:firstline: '^\d{4}-\w{2,3}-\d{2} \d{1,2}:\d{2}:\d{2}.\d{3}'max_wait_time: 3s- regex:expression: '^(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P<thread>[^\]]+)\] (?P<level>[A-Z]+)\s+(?P<class>[^\s]+) (?P<line>\d+) - (?P<message>.*)$'- labels:level:thread:- timestamp:source: timeformat: '2006-01-02 15:04:05.000'location: "Local"- job_name: java_archivedstatic_configs:- targets: ["192.168.1.15"]labels:job: emoapp__path__: d:/logs/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/*.log- job_name: tomcatASstatic_configs:- targets: ["192.168.1.15"]labels:job: access__path__: D:\Tomcat 9.0\logs\localhost_access_log*.txtpipeline_stages:- regex:# tomcat的日志配置为pattern="%h %l %u %t &quot;%r&quot; %s %b %T"expression: '^(?P<remote_addr>\S+) - (?P<remote_user>\S+) \[(?P<time>[^\]]+)\] "(?P<request_method>\S+) (?P<request_url>\S+) (?P<http_version>\S+)" (?P<status_code>\d{3}) (?P<response_size>\d+|-)( (?P<request_time>\S+))?\r?$'    - template:source: parsedJsontemplate: '{"remote_addr":"{{.remote_addr}}","time":"{{.time}}","request_method":"{{.request_method}}","request_url":"{{.request_url}}","status_code":"{{.status_code}}","body_size":"{{.response_size}}","request_time":"{{.request_time}}"}'# - labels:#     request_url:#     status_code:- timestamp:source: time# 格式化为与日志中的时间戳匹配format: '02/Jan/2006:15:04:05 -0700'- output:source: parsedJson

多行日志处理

无论是Telegraf还是上面的Promtail中都加入了关于多行日志的处理,尤其是针对异常堆栈的展示,SQL的展示等等。

Promtail中multiline的配置,包括timestamp的配置都很重要,否则会解析不正常。
image
在Grafana中,通过loki输出信息图示(后面再抽空详细说明配置和实际使用):
image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/883139.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker问题:docker: Error response from daemon

问题 docker 拉取镜像失败解决方法 1、在 Docker 的配置文件中设置代理 编辑 Docker 配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf(如果没有该文件,您可以手动创建它) sudo mkdir -p /etc/systemd/system/docker.service.d sudo vim /etc/systemd/system…

CTF-web-你必须让他停下来

1.首先打开题目2.按要求进行停止,直接使用Burp进行抓包3.逐个放行,当停留在图片10时,得到flag4.flag

通义灵码全新上线模型选择功能,新增支持 DeepSeek-V3 和 DeepSeek-R1 模型

近期,阿里云百炼平台重磅推出 DeepSeek-V3、DeepSeek-R1、DeepSeek-R1-Distill-Qwen-32B 等 6 款模型,进一步丰富其 AI 模型矩阵。与此同时,通义灵码也紧跟步伐,全新上线模型选择功能,支持基于百炼的 DeepSeek-V3 和 DeepSeek-R1 满血版671B模型,为 AI 编程领域注入新活力…

linkedhashmap和hashmap区别

https://docs.pingcode.com/ask/67278.htmllinkedhashmap和hashmap区别2023-12-26 261 百科 LinkedHashMap和HashMap是Java中用于存储键值对的数据结构,它们之间的主要区别在于对键值对的顺序管理和性能特征。LinkedHashMap保留了键值对的插入顺序,而HashMap则不保证顺序。Li…

secureCRT 个人配置

前言secureCRT 是一款比较简介轻量的远程工具,支持ssh、串口登录等操作。下面的内容是根据本人操作习惯做的一些配置,留作后续再次安装时参考。 配置1. 修改鼠标功能 设置 -> 全设置 -> 外观 -> 鼠标功能去掉勾选 粘贴(P)用鼠标的xx键,默认是鼠标右键,但是查询系统…

看板工具与跨团队协作:从流程标准化到数据驱动决策

通过这些策略,看板工具可以有效提升跨团队协作效率,确保项目顺利进行。跨团队协作效率优化可以通过看板工具实现,以下是一些关键步骤和策略: 1. 选择合适的看板工具 ● 工具选择:根据团队需求选择适合的看板工具,如banlikanban、Trello、Asana、Monday.com等。 ● 功能评…

MINE类型

1、什么是MIME类型MIME(Multipurpose Internet Mail Extensions)类型是在互联网上用于标识文件类型的标准方式。它在很多应用中得到了广泛的应用,例如电子邮件、Web浏览器和Web服务器等。MIME类型是由两部分组成的,第一部分是媒体类型(media type),用来表示文件的大类别…

解决微信小程序原生云开发退款报错“特约子商户商户号未授权服务商的产品权限”的问题

背景:微信小程序云开发支付没问题,退款时就会报这个错。 现象: 解决方法流程: 1、打开微信小程序开发者工具上面的云开发界面: 2、进入设置: 3、其他设置: 需要授权退款API权限,我这里已经授权了,未授权的话会有授权按钮,点击后会提示等待商户审核 4、我们来到微信支…

探索ChatGPT背后的前端黑科技

由于图片和格式解析问题,可前往 阅读原文在人工智能与互联网技术飞速发展的今天,像ChatGPT这样的智能对话系统已经成为科技领域的焦点。它不仅能够进行自然流畅的对话,还能以多种格式展示内容,为用户带来高效且丰富的交互体验。然而,这些令人惊叹的功能背后,离不开前端技…

OTA软件升级管理系统

OTA(空中下载技术)是通过空中下载的方式对车辆中的软件进行远程升级。经纬恒润OTA软件升级管理系统基于软件架构、应用架构、业务架构和技术架构,为整车提供云-管-端-屏完整OTA解决方案,可靠地完成系统更新、软件升级、功能迭代和安全漏洞修复等功能。同时支持固件升级(FOTA…

深度学习经典 - 鱼书 - 《深度学习入门:基于Python的理论与实现》 - PDF免费下载

深度学习经典“鱼书”,下载地址:https://pdfs.top/book/深度学习入门:基于Python的理论与实现.html。本书深入浅出地介绍了深度学习的原理,使用Python3从零开始构建深度学习模型。书中详细讲解了神经网络、误差反向传播法、卷积神经网络等核心技术,并探讨了深度学习在自动…

DeepSeek 相关知识学习和整理ing...

【硬件相关】 HBM3e:HBM3e是HBM(高带宽内存)技术的迭代升级版本,属于HBM3的扩展。它采用3D堆叠封装技术,将多个DRAM芯片垂直堆叠,通过硅互连通道传输数据,大幅提升带宽和容量,同时降低功耗。 迭代背景:HBM系列从第一代(HBM)到第五代(HBM3e)持续升级,每一代都提高…