Fortimail Parsing Rule

Parsing Rule

Fortimail

Details

IDFortimail_ParsingRule
From Version8.4.0

Rules (XQL)

[RULE: Log_Sample_v1]
alter
    tmp_unite_date_time = concat(Date, " ", Time)
| alter
    _time = parse_timestamp("%Y-%m-%d %k:%M:%S", tmp_unite_date_time)
| fields -tmp_unite_date_time;


[RULE: Log_Sample_v2]
alter 
    tmp_date = arrayindex(regextract(_raw_log, "date\=(\d{4}\-\d{2}\-\d{2})"),0),
    tmp_time = arrayindex(regextract(_raw_log ,"time\=(\d{2}\:\d{2}\:\d{2}\.\d+)"),0)
| alter 
    tmp_time_date = concat(tmp_date ,"T",tmp_time)
| filter 
    tmp_time_date ~= "\d{4}\-\d{2}\-\d{2}T\d{2}\:\d{2}\:\d{2}\.\d+"
| alter 
    _time = parse_timestamp("%Y-%m-%dT%H:%M:%E3S", tmp_time_date)
| alter 
    tmp_keys = if(_raw_log ~= "subtype\=",arrayconcat(arraycreate("date","time","device_id","log_id","type","subtype","priority"),regextract(_raw_log, "([A-Za-z_]+?)=\"")),arrayconcat(arraycreate("date","time","device_id","log_id","type","priority"),regextract(_raw_log, "([A-Za-z_]+?)=\""))),
    tmp_values = if(_raw_log ~= "subtype\=",arraystring(arrayconcat(regextract(_raw_log, "date\=(\d{4}\-\d{2}\-\d{2})"),regextract(_raw_log, "time\=(\d{2}\:\d{2}\:\d{2}\.\d+)"), regextract(_raw_log, "device\_id\=([^\s]+)"),regextract(_raw_log , "log\_id\=(\d+)"),regextract(_raw_log,"\stype\=([^\s]+)"),regextract(_raw_log,"\ssubtype\=([^\s]+)"),regextract(_raw_log,"pri\=([^\s]+)"),regextract(_raw_log, "[a-z_]+\=\"(.*?\")")), "|"),arraystring(arrayconcat(regextract(_raw_log, "date\=(\d{4}\-\d{2}\-\d{2})"),regextract(_raw_log, "time\=(\d{2}\:\d{2}\:\d{2}\.\d+)"), regextract(_raw_log, "device\_id\=([^\s]+)"),regextract(_raw_log , "log\_id\=(\d+)"),regextract(_raw_log,"\stype\=([^\s]+)"),regextract(_raw_log,"pri\=([^\s]+)"),regextract(_raw_log, "[a-z_]+\=\"(.*?\")")), "|"))
| alter
    tmp_values = replex(tmp_values ,"\|\"","|null")
| alter
    tmp_values = replex(tmp_values ,"\"","")
| alter
    tmp_obj_struct = arraystring(arraymap(tmp_keys, concat("(?P<", "@element", ">[^\|]+)")), "\|")
| alter
    tmp_obj_struct = replex(tmp_obj_struct ,"\-","_")
| alter
    parsed_fields = regexcapture(tmp_values, tmp_obj_struct)
| fields -tmp*;


[INGEST:vendor="fortinet", product="fortimail", target_dataset="fortinet_fortimail_raw", no_hit=drop]
filter len(Message) > 0
| call Log_Sample_v1;

filter _raw_log ~= "\w+\=\d{4}\-\d{2}\-\d{2}\s\w+\=\d{2}\:\d{2}\:\d{2}\.\d+\s\w+\=[A-Za-z0-9]+"
| call Log_Sample_v2;

filter _raw_log !~= "\w+\=\d{4}\-\d{2}\-\d{2}\s\w+\=\d{2}\:\d{2}\:\d{2}\.\d+\s\w+\=[A-Za-z0-9]+" and (len(Message) = 0 or Message = null)
| alter _time = _insert_time;