关于 promtail 与 loki 处理时间戳

2022-02-22 16:37:49 +08:00
 vacuitym

看了一下官网,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

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

1802 次点击
所在节点    程序员
7 条回复
shiyuu
2023-03-10 15:28:41 +08:00
我也遇到这个问题,求大佬解答或者给个配置参考
vacuitym
2023-03-10 17:12:06 +08:00
@shiyuu 我这边解决了,你发个邮箱我给你我用的配置吧
shiyuu
2023-03-11 11:01:40 +08:00
@vacuitym 十分感谢 lovejian999@gmail.com
vacuitym
2023-03-13 14:31:08 +08:00
@shiyuu 已发邮件
vacuitym
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
169 天前
所以是改了程序,把日志里面的逗号,改成了点吗?
有办法在 promtail 配置里面做兼容不
vacuitym
167 天前
@yunweier 要看现在的 promtail 编译用的 go 版本支不支持,以前是因为 go 本身没有对逗号的时间格式做支持

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/835691

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX