看了一下官网,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
发现查询到的日志时间戳还是读取日志的时间,有兄弟知道我哪里配置错误了吗。 (如发帖有问题辛苦管理员指出,谢谢)
1
shiyuu 2023-03-10 15:28:41 +08:00
我也遇到这个问题,求大佬解答或者给个配置参考
|
3
shiyuu 2023-03-11 11:01:40 +08:00
@vacuitym 十分感谢 [email protected]
|
5
vacuitym OP 也在这里贴一下:
以下是我们用的日志格式和 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 |
6
yunweier 2023-11-11 19:59:03 +08:00
所以是改了程序,把日志里面的逗号,改成了点吗?
有办法在 promtail 配置里面做兼容不 |