FortiGate logs ingested through the CEF via AMA connector appear in the CommonSecurityLog table. Any CEF key–value pairs that Microsoft Sentinel does not map to a standard CommonSecurityLog column are stored in the AdditionalExtensions field.
In the screenshot, the FTNTFGT* fields are vendor‑specific Fortinet keys that do not have built‑in mappings, so they are expected to appear concatenated in AdditionalExtensions rather than in separate columns. This does not indicate a parsing failure, only that these fields are unmapped.
To validate that the logs are correctly parsed as CEF and not raw syslog:
- Confirm the CEF header format on the FortiGate side matches the required structure:
<Priority>Timestamp Hostname CEF:Version|Device Vendor|Device Product|Device Version|Device Event Class ID|Name|Severity|[Extension]
For example:
Jan 18 11:07:53 host CEF:0|Vendor|Product|1.0|100|EventName|5|src=10.0.0.1 dst=10.0.0.2
Ensure:
-
CEF:0| is present.
- All seven header fields are present and separated by
|.
- Any
|, \, or = characters in values are properly escaped (\|, \\, \=).
- Verify that the Data Collection Rule on the AMA forwarder is configured for CEF:
sudo grep -i -r "SECURITY_CEF_BLOB" /etc/opt/microsoft/azuremonitoragent/config-cache/configchunks
Presence of SECURITY_CEF_BLOB confirms that CEF events are being collected.
- If needed, enable AMA diagnostic tracing temporarily to confirm that events are recognized as CEF and uploaded correctly:
sudo vim /etc/default/azuremonitoragent
# add -T 0x2002 to MDSD_OPTIONS
sudo systemctl restart azuremonitoragent
sudo tail -f /var/opt/microsoft/azuremonitoragent/log/mdsd.info | grep -a "CEF"
Then remove the trace flag after troubleshooting to avoid excessive logging.
If the CEF header is valid and SECURITY_CEF_BLOB is present, the behavior where Fortinet‑specific fields appear in AdditionalExtensions is by design. Queries can extract these values from AdditionalExtensions using KQL parsing functions if needed.
References: