最近我一直在测试LOKI - PROMTAIL - GRAFANA用于日志聚合和分析。我在尝试解析我的日志。示例日志如下所示[2023-04-05T00:04:18.105620+00:00] INFO: {"Code":"BGCRIF902","Message":"The backup started","time":1680653058,"Level":"info","businessId":"3896176627628900352","domainId":12421,"userEmail":"peter@abc.com","userId":"3896176627628900352","resourceId":"23a34","instanceId":"3b3b","processId":1907533,"traceid":"50462d9b-c639-4697-8702-d6f4f89919a7","channelName":"Backup"}
当尝试在GRAFANA中使用Transform选项解析它时,它没有正确读取时间戳。我在网上搜索了一下,发现我们可以在promtail中使用PIPELINE STAGES来管理这个。
我的promtail配置是这样的。
GNU nano 4.8 /opt/promtail/promtail-local-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki.com:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: UB
__path__: /home/ubuntu/lustrefsx/centralizedlogs/log/UnifiedBackup_Staging/*
pipeline_stages:
- match:
selector: '{job="UB"}'
stages:
- regex:
expression: "^((?P<timestamp>:(d{4}-d{2}-d{2})T(d{2}:d{2}:d{2}(?:.d+)?))(Z|[+-]d{2}:d{2})?)\s\-\s(?P<logMessage>.*)$"
- labels:
logMessage:
- timestamp:
format: RFC3339Nano
source: timestamp
我认为我的regex表达式是错误的,配置失败,promtail因此停止。
有人能帮我一下吗?提前谢谢。您的配置中的Regex确实是错误的,例如提供的日志。
试题:
^[(?P<timestamp>d{4}-d{2}-d{2}Td{2}:d{2}:d{2}(?:.d+)?(?:Z|[+-]d{2}:d{2})?)]s*(?P<logMessage>.*)$
这里组timestamp
匹配方括号中的全部内容,logMessage
匹配]
之后的所有内容。
匹配的演示可以在这里看到。
在你的正则表达式中,由于某些原因,时区不是timestamp
组的一部分。所以一定要检查promtail
(或loki)是否接受带时区的时间戳,如果不接受,将regex更改为以下内容:
^[(?P<timestamp>d{4}-d{2}-d{2}Td{2}:d{2}:d{2}(?:.d+)?)(?:Z|[+-]d{2}:d{2})?]s*(?P<logMessage>.*)$