HelloCoder HelloCoder
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
随笔
关于作者
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
随笔
关于作者
  • 《从0到1学习Java多线程》

  • 《从0到1搭建服务器》

  • 可观测和监控

    • 可观测是什么
    • 指标
    • 链路
    • 日志
    • Zabbix vs Prometheus
    • 基于Micrometer的Prometheus指标生成
    • OpenTelemetry
    • Opentelemetry Collector
    • Opentelemetry尾采样
    • 基于Opentelemetry的filelog插件收集日志
    • Python接入Opentelemetry
    • 基于javaagent探针自动埋点
    • 可观测系统在Flyme落地
  • 玩转IDEA

  • 03-RPC

  • 04-Spring源码

  • 05-《Java日志框架》

  • 专栏
  • 可观测和监控
#Opentelemetry #filelog #基于
码农阿雨
2025-09-05
目录

基于Opentelemetry的filelog插件收集日志

opentelemetry提供了一种类似于 filebeat 的日志收集插件:filelogreceiver

官方说明:https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/filelogreceiver

这种就是通用的日志收集方案,它和语言无关,opentelemetry 只关心日志在哪里,具体怎么收集,正则?单行?改写?过滤?这些能力都支持。

简单来说,你只需要配置日志路径即可。

一般来说,常用4种日志切割方案:

  • 单行全文 (默认分行符号切割)
  • 多行全文 (需要行首正则切割)
  • 多行正则(正则切割)

# 单行全文

单行全文最简单了,只需要配置日子里路径即可:

filelog:
  'include':
  - '/otel-file-log/data/log/app/*.log'
  'include_file_path': !!bool 'true'
  'operators': []

单行全文 需要注意的是,这里的时间是 filelogreceiver 日志收集的时间,并不是真实的日志打印时间。

同时,像Java、Python的堆栈报错日志,都是分行输出的,也会被采集成一条单独的记录。

我们其实更需要的是 日志真正记录的时间以及分行合并。

# 多行正则

多行正则就不用担心日志时间这个问题,我们可以通过正则,把日志真正记录的时间给提取出来。

假如我本地的日志如下:

2024-05-15 16:19:51,823 [WARNING] [6de580dbb64922369c7a359fef697e25] - [166132] - [MainThread] - [otel_sdk_config.py  ][125] : use NoOpTracerProvider
Traceback (most recent call last):
  File "G:\PyCharm 2023.3.4\plugins\python\helpers\pydev\_pydevd_bundle\pydevd_pep_669_tracing.py", line 111, in __call__
    if not is_thread_alive(thread):
           ~~~~~~~~~~~~~~~^^^^^^^^

借用正则平台https://regex101.com ,测试一下正则表达式:

./

然后把正确的正则表达式复制到配置这里,我本地 collector sidecar 的 config.yaml 配置如下:

receivers:
  filelog:
    start_at: beginning
    include:
    - /otel-file-log/data/log/app/*.log
    include_file_path: true
    multiline:
      line_start_pattern: '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d+'
    operators:
    - regex: '(?P<log_time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d+) \[(?P<log_level>\w+)\s*\] \[(?P<trace_id>\w*)\] - \[(?P<process_id>\d+)\] - \[(?P<thread_name>\S+)\] - \[(?P<class_name>\S+)\s*\]\[(?P<line>\d+)\s*\] : (?P<msg>[\s\S]*)'
      # 使用正则切割的 日志level 替代
      severity:
        parse_from: attributes.log_level
      # 使用正则切割的 log_time 替掉 
      timestamp:
        layout: '%Y-%m-%d %H:%M:%S,%L'
        layout_type: strptime
        parse_from: attributes.log_time
      type: regex_parser
   - field: attributes.log_time
     type: remove
   - field: attributes.log_level
     type: remove
阅读全文
×

(为防止恶意爬虫)
扫码或搜索:HelloCoder
发送:290992
即可永久解锁本站全部文章

解锁
#Opentelemetry#filelog#基于
上次更新: 2025-09-05 07:09:03
最近更新
01
阿里面试题(答案)
09-05
02
《LeetCode 101》
09-05
03
《LeetCode CookBook》
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 码农阿雨
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式