V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vacuitym
V2EX  ›  程序员

关于 promtail 与 loki 处理时间戳

  •  
  •   vacuitym · 2022-02-22 16:37:49 +08:00 · 1723 次点击
    这是一个创建于 766 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了一下官网,promtail 默认是读取日志时间作为时间戳,但是也可以自己从日志读取时间作为时间戳,有日志如下:

    2022-02-17 21:50:17,869 [DubboServerHandler-132.147.1.198:20881-thread-474] INFO  com.aaa.cccc.service.channel.OpPaaaaaaaSerivce [20220217214840017738] - 2222222
    

    我的 promtail 配置如下:

    - job_name: system
      pipeline_stages:
          # 这个阶段只有在被抓取地目标有一个标签名为 name 且值为 promtail 地时候才会执行
          - match:
              selector: '{job="onepay"}'
              stages:
                # regex 阶段解析出一个 level 、timestamp 与 component ,在该阶段结束时,这几个值只为 pipeline 内部设置,在以后地阶段可以使用这些值并决定如何处理他们。
                - regex:
                    expression: '(?P<timestamp>[\d- :,]*) \[.*'
                # 最后,时间戳阶段采用从 regex 提取地 timestamp ,并将其变成日志的新时间戳,并解析为 RFC3339Nano 格式。
                - timestamp:
                    format: RFC3339Nano
                    # format: Year-Month-Day Hour:Minute:Second
                    # format: 2006-01-02 15:04:05
                    source: timestamp
    
    

    发现查询到的日志时间戳还是读取日志的时间,有兄弟知道我哪里配置错误了吗。 (如发帖有问题辛苦管理员指出,谢谢)

    7 条回复    2023-11-13 12:00:26 +08:00
    shiyuu
        1
    shiyuu  
       2023-03-10 15:28:41 +08:00
    我也遇到这个问题,求大佬解答或者给个配置参考
    vacuitym
        2
    vacuitym  
    OP
       2023-03-10 17:12:06 +08:00
    @shiyuu 我这边解决了,你发个邮箱我给你我用的配置吧
    shiyuu
        3
    shiyuu  
       2023-03-11 11:01:40 +08:00
    vacuitym
        4
    vacuitym  
    OP
       2023-03-13 14:31:08 +08:00
    @shiyuu 已发邮件
    vacuitym
        5
    vacuitym  
    OP
       2023-03-13 14:32:34 +08:00
    也在这里贴一下:

    以下是我们用的日志格式和 promtail 配置,需要重点关注下日志中的时间最后的毫秒和秒之间一定要是”.”而不是”,”,这个好像是因为 promtail 用的 go 版本还不支持逗号分隔的时间格式。

    format: "2006-01-02 15:04:05.000”
    这一行的数字也不能改动,这是 go 语言对时间的定义,类似其他语言中的:yyyy-MM-dd HH:mm:ss.sss

    差不多就这些,希望可以帮到你

    目前我们用的日志格式:
    2023-03-13 13:54:54.776 [xxxxxxx,231901dc1678686893498301420468,0] [http-nio-8086-exec-7] INFO com.xxxxxxx.compatible.servi

    目前我们用的 promtail 配置:

    server:
    http_listen_port: 9080
    grpc_listen_port: 0

    # 自己创建到 tmp 文件夹,后面的会自动创建
    positions:
    filename: /app/software/loki/tmp/positions.yaml

    # 此处需要根据 loki 所在的 ip 和端口进行更改
    clients:
    - url: http://localhost:3100/loki/api/v1/push


    # 以下需要修改的部分为__path__,修改为日志路径
    # 注意此处配置了三个 job ,到时候可以根据需要增删
    scrape_configs:
    - job_name: web
    pipeline_stages:
    - multiline:
    firstline: '^\d{4}'
    max_wait_time: 3s
    - regex:
    expression: '^(?P<ttts>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3}).*'
    - timestamp:
    source: ttts
    format: "2006-01-02 15:04:05.000"
    location: Asia/Shanghai

    static_configs:
    - targets:
    - localhost
    labels:
    job: onepay
    service: web
    __path__: /app/logs/xxx/xxxx-debug*log
    yunweier
        6
    yunweier  
       139 天前
    所以是改了程序,把日志里面的逗号,改成了点吗?
    有办法在 promtail 配置里面做兼容不
    vacuitym
        7
    vacuitym  
    OP
       137 天前
    @yunweier 要看现在的 promtail 编译用的 go 版本支不支持,以前是因为 go 本身没有对逗号的时间格式做支持
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2772 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:33 · PVG 20:33 · LAX 05:33 · JFK 08:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.