Hi,
I am trying to calculate the time difference from a fields that has a timestamp in string format (%Y-%m-%dT%H:%M:%S%Z ("2024-10-10T13:51:32Z")), the search does not seem be get any compilation error but when the search and ran. it receives an error after running. "Error: Search has encountered an error and could not load data. Please try again, and contact support if this error continues."
This seems to happen when I try to use the timestamp.as_unix_seconds()
Was wondering if anyone came across a similar issue.
Here is the search:
metadata.log_type = "ABNORMAL_SECURITY" metadata.event_type = "EMAIL_TRANSACTION"
// replace
// format time string correctly
$recieved_time_s = re.replace(re.replace(additional.fields["mailReceivedTime"], "T", " "), "Z", "")
$remediated_time_s = re.replace(re.replace(additional.fields["mailRemediationTimestamp"], "T", " "), "Z", "")
$received_time = timestamp.as_unix_seconds($recieved_time_s)
$remediated_time = timestamp.as_unix_seconds($remediated_time_s)
match:
security_result.threat_name
outcome:
$c = count(security_result.threat_name)
$dif_avg = array_distinct($remediated_time - $received_time)
Yes I am aware about the regex replace commands, but the timestamp command doesn't allow me to provide a custom format.
Solved! Go to Solution.
Hi @mokatsu,
Does the below satisfy your requirement - I don't have access to any of the data you have in your instance, or any replica data.
metadata.log_type = "ABNORMAL_SECURITY" metadata.event_type = "EMAIL_TRANSACTION"
// replace
// format time string correctly
$Received_Time_Formatted = re.replace(re.replace(additional.fields["mailReceivedTime"], "T", " "), "Z", "")
$Remediated_Time_Formatted = re.replace(re.replace(additional.fields["mailRemediationTimestamp"], "T", " "), "Z", "")
match:
security_result.threat_name
outcome:
$c = count(security_result.threat_name)
$Diffavg = array_distinct(timestamp.diff(timestamp.as_unix_seconds($Received_Time_Formatted), timestamp.as_unix_seconds($Remediated_Time_Formatted), "SECOND"))
In terms of why the error is occurring, this great blogspot[1] by thatsiemguy explains that this issue is something observed
Hope this helps!
[1] - https://medium.com/@thatsiemguy/aggregate-queries-in-udm-search-1b885c8c27d5
Kind Regards,
Ayman C
Based on what you are describing here and based on what I found during my testing of the as_unix_seconds function, I was wondering if something like this might work because the expected format for the conversion to unix seconds is 2024-08-12 23:00:06
$datetime = strings.concat(strings.substr(extracted.fields["receiveTimestamp"],0,10), " ",strings.substr(extracted.fields["receiveTimestamp"],12,8))
outcome:
The reason you are getting that non-descriptive error I suspect is because you are going placeholder variable to placeholder variable in the filtering statment to massage the data a second time.
To alleviate that, nest the functions in a single statement in the filtering statement
$datetime = timestamp.as_unix_seconds(strings.concat(strings.substr(extracted.fields["receiveTimestamp"],0,10), " ",strings.substr(extracted.fields["receiveTimestamp"],12,8)))
Alternatively, depending when you need the value, you could also use the as_unix_seconds function in the outcome section instead
$outcome_variable = array_distinct(timestamp.as_unix_seconds($datetime))
I posted a blog last week about the as_unix_seconds and get_timestamp functions and included it below for reference.
Hi @mokatsu,
Does the below satisfy your requirement - I don't have access to any of the data you have in your instance, or any replica data.
metadata.log_type = "ABNORMAL_SECURITY" metadata.event_type = "EMAIL_TRANSACTION"
// replace
// format time string correctly
$Received_Time_Formatted = re.replace(re.replace(additional.fields["mailReceivedTime"], "T", " "), "Z", "")
$Remediated_Time_Formatted = re.replace(re.replace(additional.fields["mailRemediationTimestamp"], "T", " "), "Z", "")
match:
security_result.threat_name
outcome:
$c = count(security_result.threat_name)
$Diffavg = array_distinct(timestamp.diff(timestamp.as_unix_seconds($Received_Time_Formatted), timestamp.as_unix_seconds($Remediated_Time_Formatted), "SECOND"))
In terms of why the error is occurring, this great blogspot[1] by thatsiemguy explains that this issue is something observed
Hope this helps!
[1] - https://medium.com/@thatsiemguy/aggregate-queries-in-udm-search-1b885c8c27d5
Kind Regards,
Ayman C
I did find my issue, will post here incase someone comes across it.
It seems that assigning variable to variable doesn't act like I expected, fixing the query to
#### From
metadata.log_type = "<LogSource>" metadata.event_type = "EMAIL_TRANSACTION"
// replace
// format time string correctly
$recieved_time_s = re.replace(re.replace(additional.fields["mailReceivedTime"], "T", " "), "Z", "")
$remediated_time_s = re.replace(re.replace(additional.fields["mailRemediationTimestamp"], "T", " "), "Z", "")
$received_time = timestamp.as_unix_seconds($recieved_time_s)
$remediated_time = timestamp.as_unix_seconds($remediated_time_s)
match:
security_result.threat_name
outcome:
$c = count(security_result.threat_name)
$dif_avg = array_distinct($remediated_time - $received_time)
### To
metadata.log_type = "<LogSource>" metadata.event_type = "EMAIL_TRANSACTION"
// replace
// format time string correctly
$received_time = math.round(timestamp.as_unix_seconds(re.replace(re.replace(additional.fields["mailReceivedTime"], "T", " "), "Z", "")), 4)
$remediated_time = math.round(timestamp.as_unix_seconds(re.replace(re.replace(additional.fields["mailReceivedTime"], "T", " "), "Z", "")), 4)
match:
security_result.threat_name
outcome:
$c = count(security_result.threat_name)
$dif_avg = array($remediated_time - $received_time)
Based on what you are describing here and based on what I found during my testing of the as_unix_seconds function, I was wondering if something like this might work because the expected format for the conversion to unix seconds is 2024-08-12 23:00:06
$datetime = strings.concat(strings.substr(extracted.fields["receiveTimestamp"],0,10), " ",strings.substr(extracted.fields["receiveTimestamp"],12,8))
outcome:
The reason you are getting that non-descriptive error I suspect is because you are going placeholder variable to placeholder variable in the filtering statment to massage the data a second time.
To alleviate that, nest the functions in a single statement in the filtering statement
$datetime = timestamp.as_unix_seconds(strings.concat(strings.substr(extracted.fields["receiveTimestamp"],0,10), " ",strings.substr(extracted.fields["receiveTimestamp"],12,8)))
Alternatively, depending when you need the value, you could also use the as_unix_seconds function in the outcome section instead
$outcome_variable = array_distinct(timestamp.as_unix_seconds($datetime))
I posted a blog last week about the as_unix_seconds and get_timestamp functions and included it below for reference.