一、背景
java应用部署在阿里云的k8s容器里,采集其日志的需求则是一个不可缺少的。而不同公司的jvm日志会存在很大的差异,所以本文仅以我的实际情况作一个示例,仅供有需要采集jvm日志的同学们一个参考。
我们打印的Jvm日志格式见下,如果你和我这的不一样,还请自己稍作修改。
2023-12-08 17:55:40.252 INFO [xxx-service,0000000000087a470000018c48dab44c,26914efbf65c43bb,true] 8 --- [nio-9041-exec-6] c.x.s.c.application.ClassroomAppService : 课堂更新任务数量等信息, request={"classroomId":"32SY0C79"}
二、deployment.yaml的环境变量
containers:
- env:
- name: aliyun_logs_xxx-service
value: stdout
三、Logtail配置
接下来是重点,设置日志的处理:
提取字段(正则模式)
这里再重申一下,采集模式选择多行模式,行首正则为日期,比如2023-12-09
\d{4}-\d{2}-\d{2}
跟前文写的kong日志采集类似,主要是填写正则表达式。
(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) *([^ ]+) \[([^\[]*),([^,]*),([^,]*),([^,]*)\] ([^ ]+) --- (.*)
四、验证
按上述配置,最后sls解析的日志见下:
{
“content”:“2023-12-08 17:55:40.252 INFO [xxx-service,0000000000087a470000018c48dab44c,26914efbf65c43bb,true] 8 — [nio-9041-exec-6] c.x.s.c.application.ClassroomAppService : 课堂更新任务数量等信息, request={“classroomId”:“32SY0C79”}”,
“time”:“2023-12-08 17:55:40.252”,
“level”:“INFO”,
“App_Name”:“xxx-service”,
“X_B3_TraceId”:“0000000000087a470000018c48dab44c”,
“X_B3_SpanId”:“26914efbf65c43bb”,
“X_Span_Export”:“true”,
“Pid”:“8”,
“message”:“[nio-9041-exec-6] c.x.s.c.application.ClassroomAppService : 课堂更新任务数量等信息, request={“classroomId”:“32SY0C79”}”
}
- content字段是原始日志
- 不必要的字段被我忽略,真正的比这多,但都没啥用。