{"id":15396,"date":"2019-07-19T14:09:43","date_gmt":"2019-07-19T14:09:43","guid":{"rendered":"https:\/\/www.microsoft.com\/en-gb\/industry\/blog\/?p=15396"},"modified":"2019-10-07T09:42:59","modified_gmt":"2019-10-07T08:42:59","slug":"azure-sentinel-dashboard-queries","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-gb\/industry\/blog\/cross-industry\/2019\/07\/19\/azure-sentinel-dashboard-queries\/","title":{"rendered":"Azure Sentinel – Dashboard queries"},"content":{"rendered":"
The vast majority of my day job at the moment includes Azure Sentinel. Some of the queries I’ve shown in the previous posts can be used to see data points for Sentinel as well.<\/p>\n
Typically I display all these on an Azure Dashboard<\/a>, but you can also just use the queries. Sentinel specifc DashBoards can be found here<\/a><\/p>\n My Example Dashboard<\/strong><\/p>\n <\/p>\n The new Data Tables that Sentinel uses are shown in this screen shot, but there are others that are related as well (you might want to include \u00a3Events <\/strong>?)<\/p>\n <\/p>\n The query top left in the first picture, uses a Union to pull in the various Tables (I use a bin interval of 1hr to speed up the query (returns less data), which is especially useful as I normally want to look at a week or monthly view).<\/p>\n Run the above here<\/a><\/p>\n The second query (top right) is this one, in structure its very similar – but it’s giving an indication of the data we have and where it may be generated from. You can remove or add Tables that are relevant to you – I use this as a way to remember where the data was added Sentinel vs. Log Analytics.<\/p>\n <\/p>\n The next Four Charts on the left are these. I like to run these with a time-span of a week to give me an insight into any spikes or dips per solution:<\/p>\n The Bar Chart (2nd down on the right) is this query, which is similar to the cost ones here: Note: you could also write the first query in this post in this more compressed format (I didn’t mainly as I wanted to keep the comments and structure readable). However if you want the compressed version click here<\/a><\/p>\nlet tBin = 1h;
\nunion isfuzzy=true
\n(
\n\/\/ Firewall vendors
\nCommonSecurityLog
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ Office 365
\nOfficeActivity
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ Azure Security Center - free
\nSecurityCenterFree
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ Azure Security Center - Standard
\nSecurityEvent
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ Security Alerts
\nSecurityAlert
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ DNS
\nDnsEvents
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ Windows Firewall
\nWindowsFirewall
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ Azure AD
\nSigninLogs
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ Syslog
\nSyslog
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ AWS
\nAWSCloudTrail
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ Symantec
\nSymantecICDX_CL
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ Hunting Bookmarks
\nHuntingBookmark
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ ThreatIntelligence Indicator
\nThreatIntelligenceIndicator
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n),
\n(
\n\/\/ LinuxAuditLog
\nLinuxAuditLog
\n| summarize LogVolume=count() by bin(TimeGenerated,tBin), SolutionName = Type
\n)
\n| sort by LogVolume
\n| render timechart title =\"Sentinel Log Volume by time\"<\/code><\/p>\nunion isfuzzy=true
\n(
\n\/\/ Firewall vendors
\nCommonSecurityLog
\n| summarize Records = count() by SolutionName = Type, Vendor = DeviceVendor
\n| sort by Records desc
\n| extend PotentialDataSource = iif(Records>0,\"\u2705 Sentinel or CEF data found\",\"no data\")
\n),
\n(
\n\/\/ Office 365
\nOfficeActivity
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Microsoft O365\"
\n| sort by Records desc
\n| extend PotentialDataSource = iif(Records>0,\"data found, Log Analytics or Sentinel enabled\",\"no data\")
\n),
\n(
\n\/\/ Azure Security Center - free
\nSecurityCenterFree
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Azure Security Center Free\"
\n| sort by Records desc
\n| extend PotentialDataSource = iif(Records>0,\"data found, ASC or Sentinel enabled\",\"no data\")
\n),
\n(
\n\/\/ Azure Security Center - Standard
\nSecurityEvent
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Azure Security Center Standard\"
\n| sort by Records desc
\n| extend PotentialDataSource = iif(Records>0,\"data found, ASC or Sentinel enabled\",\"no data\")
\n),
\n(
\n\/\/ Security Alerts
\nSecurityAlert
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Azure Sentinel\"
\n| sort by Records desc
\n| extend PotentialDataSource = iif(Records>0,\"data found, ASC or Sentinel\",\"no data\")
\n),
\n(
\n\/\/ DNS
\nDnsEvents
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Microsoft DNS\"
\n| sort by Records desc
\n| extend PotentialDataSource = iif(Records>0,\"data found, Log Analytics or Sentinel\",\"no data\")
\n),
\n(
\n\/\/ Windows Firewall
\nWindowsFirewall
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Microsoft Firewall\"
\n| sort by Records desc
\n| extend PotentialDataSource = iif(Records>0,\"data found, Log Analytics or Sentinel\",\"no data\")
\n),
\n(
\n\/\/ Azure AD
\nSigninLogs
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Microsoft Azure AD\"
\n| extend PotentialDataSource = iif(Records>0,\"data found, Log Analytics or Sentinel\",\"no data\")
\n),
\n(
\n\/\/ Syslog
\nSyslog
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Linux\"
\n| extend PotentialDataSource = iif(Records>0,\"data found, Log Analytics or Sentinel\",\"no data\")
\n),
\n(
\n\/\/ Event log
\nSyslog
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Azure Monitor\"
\n| extend PotentialDataSource = iif(Records>0,\"Log Analytics\",\"no data\")
\n),
\n(
\n\/\/ AWS
\nAWSCloudTrail
\n| summarize Records = count() by SolutionName = Type, Vendor = \"AWS\"
\n| extend PotentialDataSource = iif(Records>0,\"\u2705 Sentinel or CEF data found\",\"no data\")
\n),
\n(
\n\/\/ Symantec
\nSymantecICDX_CL
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Symantec\"
\n| extend PotentialDataSource = iif(Records>0,\"\u2705 Sentinel data found\",\"no data\")
\n),
\n(
\n\/\/ Hunting Bookmarks
\nHuntingBookmark
\n| summarize Records = count() by SolutionName = Type, Vendor = \"Azure Sentinel\"
\n| extend PotentialDataSource = iif(Records>0,\"\u2705 Sentinel data found\",\"no data\")
\n),
\n(
\n\/\/ ThreatIntelligence Indicator
\nThreatIntelligenceIndicator
\n| summarize Records = count() by SolutionName = Type , Vendor = \"Azure Sentinel\"
\n| extend PotentialDataSource = iif(Records>0,\"\u2705 Sentinel data found\",\"no data\")
\n),
\n(
\n\/\/ LinuxAuditLog
\nLinuxAuditLog
\n| summarize Records = count() by SolutionName = Type , Vendor = \"Azure Sentinel\"
\n| extend PotentialDataSource = iif(Records>0,\"\u2705 Sentinel data found\",\"no data\")
\n)
\n| sort by Records<\/code><\/p>\n
\nExample output<\/strong><\/p>\n
\nSecurityAlert
\n| summarize LogVolume=count() by bin(TimeGenerated,1h), SolutionName = Type
\n<\/code><\/p>\n
\nCommonSecurityLog
\n| summarize LogVolume=count() by bin(TimeGenerated,1h), SolutionName = Type
\n| render timechart title = \"CommonSecurityLog by time\"
\n<\/code><\/p>\n
\nSecurityEvent
\n| summarize LogVolume=count() by bin(TimeGenerated,1h), SolutionName = Type
\n| render timechart title = \"SecurityEvent by time\"
\n<\/code><\/p>\n
\nSyslog
\n| summarize LogVolume=count() by bin(TimeGenerated,1h), SolutionName = Type
\n| render timechart title = \"Syslog by time\"
\n<\/code><\/p>\n
\nhttps:\/\/www.microsoft.com\/en-gb\/industry\/blog\/cross-industry\/2019\/07\/18\/azure-log-analytics-looking-at-data-and-costs-part-3\/ <\/a><\/p>\n
\nunion isfuzzy=true withsource = tt *
\n| where tt in (\"Syslog\", \"SecurityEvent\",\"AWSCloudTrail\", \"CommonSecurityLog\",
\n\"SecurityAlert\", \"ThreatIntelligenceIndicator\", \"LinuxAuditLog\",
\n\"HuntingBookmark\")
\n| summarize
\nRecordCount = count(),
\nMbperRecord = round(count() \/ sum(_BilledSize\/(1024*1024)),2) ,
\nTotalGBytes = round(sum(_BilledSize\/(1024*1024*1024)),2)
\nby SolutionName = tt, _IsBillable
\n| sort by TotalGBytes desc
\n| render barchart
\n<\/code><\/p>\n