场景描述
小王将日志采集到日志服务(Cloud Log Service,CLS),日志通过双竖线
||
分割,有日志的时间、日志级别、任务 ID、进程名称、主机 IP 等。现在小王想将日志结构化,并按照 ERROR、WARNING、INFO 三个级别,把日志分发到三个不同的目标日志主题中,便于后续的分析。场景分析
1. 日志结构化:按照双竖线
||
分割符,对日志进行结构化。 2. 日志分发:按照 ERROR、WARNING、INFO 三个级别,把日志分发到三个不同的目标日志主题。
说明:
原始日志
[{"message": "2021-12-09 11:34:28.279||INFO||605c643e29e4||BIN--Python||192.168.1.1"},{"message": "2021-12-09 11:35:28.279||WARNING||615c643e22e4||BIN--Java||192.168.1.1"},{"message": "2021-12-09 11:36:28.279||ERROR||635c643e22e4||BIN--Go||192.168.1.1"}]
DSL 加工函数
//使用||作为分隔符(竖线需要转义),从message中提取time,loglevel,taskId,ProcessName,ip字段.ext_sepstr("message","time,loglevel,taskId,ProcessName,ip",sep="\\|\\|")//丢弃messagefields_drop("message")//使用switch语句进行分发t_switch(//loglevel为"INFO",输出到info_logop_str_eq(v("loglevel"),"INFO"),log_output("info_log"),//loglevel为"WARNING",输出到warning_logop_str_eq(v("loglevel"),"WARNING"),log_output("warning_log"),//loglevel为"ERROR",输出到error_logop_str_eq(v("loglevel"),"ERROR"),log_output("error_log"))
加工结果
error_log 中:
{"ProcessName":"BIN--Go","ip":"192.168.1.1","loglevel":"ERROR","taskId":"635c643e22e4","time":"2021-12-09 11:36:28.279"}
warning_log 中:
{"ProcessName":"BIN--Java","ip":"192.168.1.1","loglevel":"WARNING","taskId":"615c643e22e4","time":"2021-12-09 11:35:28.279"}
info_log 中:
{"ProcessName":"BIN--PYTHON","ip":"192.168.1.1","loglevel":"INFO","taskId":"605c643e29e4","time":"2021-12-09 11:34:28.279"}
注意
必须要提前配置好目标日志主题和目标名称。