一、背景
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-servicevalue: 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字段是原始日志
- 不必要的字段被我忽略,真正的比這多,但都沒啥用。