diff --git a/Solutions/Cribl/Data/Solution_Cribl.json b/Solutions/Cribl/Data/Solution_Cribl.json
index 1355622f2ec..a425b46494d 100644
--- a/Solutions/Cribl/Data/Solution_Cribl.json
+++ b/Solutions/Cribl/Data/Solution_Cribl.json
@@ -3,6 +3,7 @@
"Author": "Cribl - tap@cribl.io",
"Logo": "",
"Description": "Cribl is a vendor neutral, purpose-built processing engine for data security and IT operations focused on centralized parsing and processing of event data.",
+ "WorkbookBladeDescription": "Monitor Cribl Logs across Access, Audit, Internal & UI Access.",
"Data Connectors": [
"Data Connectors/Connector_Cribl.json"
],
@@ -12,9 +13,12 @@
"Parsers/CriblInternal.yaml",
"Parsers/CriblUIAccess.yaml"
],
+ "Workbooks": [
+ "Workbooks/CriblWorkbook.json"
+ ],
"BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\Cribl",
"Version": "3.0.0",
"Metadata": "SolutionMetadata.json",
"TemplateSpec": true,
"Is1Pconnector": false
- }
\ No newline at end of file
+ }
diff --git a/Solutions/Cribl/Package/3.0.1.zip b/Solutions/Cribl/Package/3.0.1.zip
index 706a0d08af2..5dd21256f2e 100644
Binary files a/Solutions/Cribl/Package/3.0.1.zip and b/Solutions/Cribl/Package/3.0.1.zip differ
diff --git a/Solutions/Cribl/Package/createUiDefinition.json b/Solutions/Cribl/Package/createUiDefinition.json
index b6b9c4358b7..32f2b3e22cd 100644
--- a/Solutions/Cribl/Package/createUiDefinition.json
+++ b/Solutions/Cribl/Package/createUiDefinition.json
@@ -6,7 +6,7 @@
"config": {
"isWizard": false,
"basics": {
- "description": "
\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/Cribl/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nCribl is a vendor neutral, purpose-built processing engine for data security and IT operations focused on centralized parsing and processing of event data.\n\n**Data Connectors:** 1, **Parsers:** 4\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)",
+ "description": "
\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/Cribl/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nCribl is a vendor neutral, purpose-built processing engine for data security and IT operations focused on centralized parsing and processing of event data.\n\n**Data Connectors:** 1, **Parsers:** 4, **Workbooks:** 1\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)",
"subscription": {
"resourceProviders": [
"Microsoft.OperationsManagement/solutions",
@@ -81,6 +81,48 @@
}
}
]
+ },
+ {
+ "name": "workbooks",
+ "label": "Workbooks",
+ "subLabel": {
+ "preValidation": "Configure the workbooks",
+ "postValidation": "Done"
+ },
+ "bladeTitle": "Workbooks",
+ "elements": [
+ {
+ "name": "workbooks-text",
+ "type": "Microsoft.Common.TextBlock",
+ "options": {
+ "text": "Monitor Cribl Logs across Access, Audit, INternal & UI Access."
+ }
+ },
+ {
+ "name": "workbooks-link",
+ "type": "Microsoft.Common.TextBlock",
+ "options": {
+ "link": {
+ "label": "Learn more",
+ "uri": "https://docs.microsoft.com/azure/sentinel/tutorial-monitor-your-data"
+ }
+ }
+ },
+ {
+ "name": "workbook1",
+ "type": "Microsoft.Common.Section",
+ "label": "Cribl Workbook",
+ "elements": [
+ {
+ "name": "workbook1-text",
+ "type": "Microsoft.Common.TextBlock",
+ "options": {
+ "text": "This workbook provides insights into Cribl."
+ }
+ }
+ ]
+ }
+ ]
}
],
"outputs": {
diff --git a/Solutions/Cribl/Package/mainTemplate.json b/Solutions/Cribl/Package/mainTemplate.json
index a29c63d01d1..6728a6f8b3c 100644
--- a/Solutions/Cribl/Package/mainTemplate.json
+++ b/Solutions/Cribl/Package/mainTemplate.json
@@ -27,6 +27,14 @@
"metadata": {
"description": "Workspace name for Log Analytics where Microsoft Sentinel is setup"
}
+ },
+ "workbook1-name": {
+ "type": "string",
+ "defaultValue": "Cribl Workbook",
+ "minLength": 1,
+ "metadata": {
+ "description": "Name for the workbook"
+ }
}
},
"variables": {
@@ -73,6 +81,13 @@
"parserVersion4": "1.0.1",
"parserContentId4": "CriblUIAccess-Parser"
},
+ "workbookVersion1": "1.0.0",
+ "workbookContentId1": "Cribl",
+ "workbookId1": "[resourceId('Microsoft.Insights/workbooks', variables('workbookContentId1'))]",
+ "workbookTemplateSpecName1": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-wb-',uniquestring(variables('_workbookContentId1'))))]",
+ "_workbookContentId1": "[variables('workbookContentId1')]",
+ "workspaceResourceId": "[resourceId('microsoft.OperationalInsights/Workspaces', parameters('workspace'))]",
+ "_workbookcontentProductId1": "[concat(take(variables('_solutionId'),50),'-','wb','-', uniqueString(concat(variables('_solutionId'),'-','Workbook','-',variables('_workbookContentId1'),'-', variables('workbookVersion1'))))]",
"_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]"
},
"resources": [
@@ -401,7 +416,7 @@
"resources": [
{
"name": "[variables('parserObject1')._parserName1]",
- "apiVersion": "2022-10-01",
+ "apiVersion": "2025-07-01",
"type": "Microsoft.OperationalInsights/workspaces/savedSearches",
"location": "[parameters('workspace-location')]",
"properties": {
@@ -466,7 +481,7 @@
},
{
"type": "Microsoft.OperationalInsights/workspaces/savedSearches",
- "apiVersion": "2022-10-01",
+ "apiVersion": "2025-07-01",
"name": "[variables('parserObject1')._parserName1]",
"location": "[parameters('workspace-location')]",
"properties": {
@@ -533,7 +548,7 @@
"resources": [
{
"name": "[variables('parserObject2')._parserName2]",
- "apiVersion": "2022-10-01",
+ "apiVersion": "2025-07-01",
"type": "Microsoft.OperationalInsights/workspaces/savedSearches",
"location": "[parameters('workspace-location')]",
"properties": {
@@ -598,7 +613,7 @@
},
{
"type": "Microsoft.OperationalInsights/workspaces/savedSearches",
- "apiVersion": "2022-10-01",
+ "apiVersion": "2025-07-01",
"name": "[variables('parserObject2')._parserName2]",
"location": "[parameters('workspace-location')]",
"properties": {
@@ -665,7 +680,7 @@
"resources": [
{
"name": "[variables('parserObject3')._parserName3]",
- "apiVersion": "2022-10-01",
+ "apiVersion": "2025-07-01",
"type": "Microsoft.OperationalInsights/workspaces/savedSearches",
"location": "[parameters('workspace-location')]",
"properties": {
@@ -730,7 +745,7 @@
},
{
"type": "Microsoft.OperationalInsights/workspaces/savedSearches",
- "apiVersion": "2022-10-01",
+ "apiVersion": "2025-07-01",
"name": "[variables('parserObject3')._parserName3]",
"location": "[parameters('workspace-location')]",
"properties": {
@@ -797,7 +812,7 @@
"resources": [
{
"name": "[variables('parserObject4')._parserName4]",
- "apiVersion": "2022-10-01",
+ "apiVersion": "2025-07-01",
"type": "Microsoft.OperationalInsights/workspaces/savedSearches",
"location": "[parameters('workspace-location')]",
"properties": {
@@ -862,7 +877,7 @@
},
{
"type": "Microsoft.OperationalInsights/workspaces/savedSearches",
- "apiVersion": "2022-10-01",
+ "apiVersion": "2025-07-01",
"name": "[variables('parserObject4')._parserName4]",
"location": "[parameters('workspace-location')]",
"properties": {
@@ -911,6 +926,106 @@
}
}
},
+ {
+ "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates",
+ "apiVersion": "2023-04-01-preview",
+ "name": "[variables('workbookTemplateSpecName1')]",
+ "location": "[parameters('workspace-location')]",
+ "dependsOn": [
+ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]"
+ ],
+ "properties": {
+ "description": "CriblWorkbook Workbook with template version 3.0.1",
+ "mainTemplate": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "[variables('workbookVersion1')]",
+ "parameters": {},
+ "variables": {},
+ "resources": [
+ {
+ "type": "Microsoft.Insights/workbooks",
+ "name": "[variables('workbookContentId1')]",
+ "location": "[parameters('workspace-location')]",
+ "kind": "shared",
+ "apiVersion": "2021-08-01",
+ "metadata": {
+ "description": "This workbook provides insights into Cribl."
+ },
+ "properties": {
+ "displayName": "[parameters('workbook1-name')]",
+ "serializedData": "{\"version\":\"Notebook/1.0\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Cribl Workbook\\r\\n\\r\\nThis Workbook contains summary of \\r\\n\\r\\n\\r\\n| Access Logs | Audit Logs | Internal Logs | UI Access Logs|\\r\\n| -------------- | --------------- | -------------- |-------------- |\\r\\n|||||\"},\"customWidth\":\"50\",\"name\":\"text - 19\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"007ea1ee-99dd-4c59-bc0f-7eb8b1e05c71\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"TimeGenerated\",\"type\":4,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000},\"value\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 21\"},{\"type\":1,\"content\":{\"json\":\"# Access Logs\\n---\\n\",\"style\":\"info\"},\"name\":\"text - 2\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAccess\\n| summarize Count = count() by tostring(status)\",\"size\":1,\"title\":\"Summary of HTTP Status Code\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\",\"chartSettings\":{\"showMetrics\":false,\"showLegend\":true}},\"customWidth\":\"33\",\"name\":\"HTTP Status Code Overview\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAccess\\n| summarize count() by method\\n\",\"size\":1,\"title\":\"Summary of HTTP Methods\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\",\"chartSettings\":{\"showMetrics\":false,\"showLegend\":true}},\"customWidth\":\"33\",\"name\":\"HTTP Status Code Overview - Copy\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAccess\\n| summarize Count = count() by src\",\"size\":1,\"title\":\"Summary of Source\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Count\",\"formatter\":8,\"formatOptions\":{\"palette\":\"blue\"}}]}},\"customWidth\":\"33\",\"name\":\"HTTP Status Code Overview - Copy - Copy - Copy\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAccess\\n| summarize Hits = count() by url\\n| top 10 by Hits\\n\",\"size\":0,\"title\":\"Top Accessed API Endpoints\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\"},\"name\":\"Top Accessed API Endpoints\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAccess\\n| where status >= 400\\n| summarize ErrorCount = count() by tostring(status)\\n| sort by ErrorCount desc\\n\",\"size\":0,\"title\":\"HTTP Error Code Summary\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\"},\"name\":\"HTTP Error Code Summary\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAccess\\n| summarize AvgResponseTime = avg(response_time) by url\\n| top 10 by AvgResponseTime\\n\\n\",\"size\":0,\"title\":\"API Response Time Analysis\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"unstackedbar\"},\"name\":\"API Response Time Analysis\"},{\"type\":1,\"content\":{\"json\":\"# Audit Logs\\n---\\n\",\"style\":\"info\"},\"name\":\"text - 2 - Copy\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAudit\\n| summarize Count = count() by service\\n\",\"size\":1,\"title\":\"Summary of Servies\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Count\",\"formatter\":8,\"formatOptions\":{\"palette\":\"blue\"}}]}},\"customWidth\":\"50\",\"name\":\"HTTP Status Code Overview - Copy - Copy\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAudit\\n| summarize Count = count() by user\\n| top 5 by Count\\n\",\"size\":1,\"title\":\"Top 5 Users by Audit Events\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\",\"chartSettings\":{\"showMetrics\":false,\"showLegend\":true}},\"customWidth\":\"50\",\"name\":\"Top 5 Users by Audit Events\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAudit\\n| summarize Count = count() by bin(event_time, {TimeGenerated:grain})\\n\",\"size\":0,\"title\":\"Requests Over Time\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"timechart\"},\"name\":\"Requests Over Time\"}]},\"name\":\"group - 32\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAudit\\n| summarize Count = count() by action\\n| order by Count desc\\n\",\"size\":0,\"title\":\"Most Performed Audit Actions\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"unstackedbar\"},\"name\":\"Most Performed Audit Actions\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAudit\\n| summarize UniqueUsers = dcount(user) by action\\n| order by UniqueUsers desc\\n\",\"size\":0,\"title\":\"User Participation by Action Type\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\"},\"name\":\"User Participation by Action Type\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAudit\\n| summarize Count = count() by bin(event_time, 5m)\\n| order by event_time asc\\n\",\"size\":0,\"title\":\"Audit Event Activity Over Time\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"timechart\"},\"name\":\"Audit Event Activity Over Time\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblAudit\\n| summarize Count = count() by service, action\\n| order by service asc\\n\",\"size\":0,\"title\":\"Actions by Cribl Service Module\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\"},\"name\":\"Actions by Cribl Service Module\"},{\"type\":1,\"content\":{\"json\":\"# Internal Logs\\n---\\n\",\"style\":\"info\"},\"name\":\"text - 2 - Copy - Copy\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblInternal\\n| summarize avg(cpuPerc) by service\\n| order by avg_cpuPerc desc\\n\",\"size\":0,\"title\":\"Average CPU Usage per Cribl Component\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"unstackedbar\"},\"name\":\"Average CPU Usage per Cribl Component\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblInternal\\n| summarize avg(mem_rss) by service\\n| order by avg_mem_rss desc\\n\",\"size\":0,\"title\":\"Average Memory (RSS) Usage by Component\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\"},\"name\":\"Average Memory (RSS) Usage by Component\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblInternal\\n| summarize avg(cpuPerc) , avg(eluPerc) by bin(event_time, 1m)\\n| order by event_time asc\\n\",\"size\":0,\"title\":\"CPU vs ELU Over Time\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"linechart\"},\"name\":\"CPU vs ELU Over Time\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblInternal\\n| summarize avg(mem_heap), avg(mem_heapTotal) by bin(event_time, 1m)\\n\",\"size\":0,\"title\":\"Heap vs Total Heap Memory Over Time\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"areachart\"},\"name\":\"Heap vs Total Heap Memory Over Time\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblInternal\\n| summarize avg(mem_rss) by instance\\n| top 5 by avg_mem_rss\\n\",\"size\":0,\"title\":\"Top 5 Hosts by RSS Memory Usage\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\"},\"name\":\"Top 5 Hosts by RSS Memory Usage\"},{\"type\":1,\"content\":{\"json\":\"# UI Access Logs\\n---\\n\",\"style\":\"info\"},\"name\":\"text - 2 - Copy - Copy - Copy\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblUIAccess\\n| summarize Count = count() by user\\n| top 5 by Count\\n\",\"size\":1,\"title\":\"Top 5 Users Accessing Cribl UI\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\",\"chartSettings\":{\"showMetrics\":false,\"showLegend\":true}},\"customWidth\":\"50\",\"name\":\"Top 5 Users Accessing Cribl UI\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblUIAccess\\n| summarize Count = count() by tenantId\\n| top 5 by Count\\n\",\"size\":1,\"title\":\"Top 5 Tenants Accessing Cribl UI\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\",\"chartSettings\":{\"showMetrics\":false,\"showLegend\":true}},\"customWidth\":\"50\",\"name\":\"Top 5 Tenants Accessing Cribl UI\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblUIAccess\\n| summarize Count = count() by url\\n| order by Count desc\\n\",\"size\":0,\"title\":\"Most Accessed UI Pages\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"unstackedbar\"},\"name\":\"Most Accessed UI Pages\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblUIAccess\\n| summarize AccessCount = count() by bin(event_time, 1m)\\n| order by event_time asc\\n\",\"size\":0,\"title\":\"Cribl UI Access Trend\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"timechart\"},\"name\":\"Cribl UI Access Trend\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblUIAccess\\n| summarize AccessCount = count() by src\\n| top 10 by AccessCount\\n\",\"size\":0,\"title\":\"Top Source IPs Accessing UI\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\"},\"name\":\"Top Source IPs Accessing UI\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"CriblUIAccess\\n| summarize Count = count() by http_user_agent\\n| top 5 by Count\\n\",\"size\":0,\"title\":\"Most Common Browsers & Tools\",\"timeContextFromParameter\":\"TimeGenerated\",\"showRefreshButton\":true,\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\"},\"name\":\"Most Common Browsers & Tools\"}],\"fromTemplateId\":\"sentinel-CriblWorkbook\",\"$schema\":\"https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json\"}\r\n",
+ "version": "1.0",
+ "sourceId": "[variables('workspaceResourceId')]",
+ "category": "sentinel"
+ }
+ },
+ {
+ "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
+ "apiVersion": "2022-01-01-preview",
+ "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('Workbook-', last(split(variables('workbookId1'),'/'))))]",
+ "properties": {
+ "description": "@{workbookKey=Cribl; logoFileName=Azure_Sentinel.svg; description=This workbook provides insights into Cribl.; dataTypesDependencies=System.Object[]; dataConnectorsDependencies=System.Object[]; previewImagesFileNames=System.Object[]; version=1.0.0; title=Cribl Workbook; templateRelativePath=CriblWorkbook.json; subtitle=; provider=Microsoft Sentinel Community; support=; author=}.description",
+ "parentId": "[variables('workbookId1')]",
+ "contentId": "[variables('_workbookContentId1')]",
+ "kind": "Workbook",
+ "version": "[variables('workbookVersion1')]",
+ "source": {
+ "kind": "Solution",
+ "name": "Cribl",
+ "sourceId": "[variables('_solutionId')]"
+ },
+ "author": {
+ "name": "Cribl",
+ "email": "[variables('_email')]"
+ },
+ "support": {
+ "tier": "Partner",
+ "name": "Cribl",
+ "email": "support@cribl.io",
+ "link": "https://www.cribl.io/support/"
+ },
+ "dependencies": {
+ "operator": "AND",
+ "criteria": [
+ {
+ "contentId": "CriblAccess_CL",
+ "kind": "DataType"
+ },
+ {
+ "contentId": "CriblAudit_CL",
+ "kind": "DataType"
+ },
+ {
+ "contentId": "CriblInternal_CL",
+ "kind": "DataType"
+ },
+ {
+ "contentId": "CriblUIAccess_CL",
+ "kind": "DataType"
+ },
+ {
+ "contentId": "Cribl",
+ "kind": "DataConnector"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ "packageKind": "Solution",
+ "packageVersion": "[variables('_solutionVersion')]",
+ "packageName": "[variables('_solutionName')]",
+ "packageId": "[variables('_solutionId')]",
+ "contentSchemaVersion": "3.0.0",
+ "contentId": "[variables('_workbookContentId1')]",
+ "contentKind": "Workbook",
+ "displayName": "[parameters('workbook1-name')]",
+ "contentProductId": "[variables('_workbookcontentProductId1')]",
+ "id": "[variables('_workbookcontentProductId1')]",
+ "version": "[variables('workbookVersion1')]"
+ }
+ },
{
"type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages",
"apiVersion": "2023-04-01-preview",
@@ -921,7 +1036,7 @@
"contentSchemaVersion": "3.0.0",
"displayName": "Cribl",
"publisherDisplayName": "Cribl",
- "descriptionHtml": "
Note: Please refer to the following before installing the solution:
\n• Review the solution Release Notes
\n• There may be known issues pertaining to this Solution, please refer to them before installing.
\nCribl is a vendor neutral, purpose-built processing engine for data security and IT operations focused on centralized parsing and processing of event data.
\nData Connectors: 1, Parsers: 4
\nLearn more about Microsoft Sentinel | Learn more about Solutions
\n", + "descriptionHtml": "Note: Please refer to the following before installing the solution:
\n• Review the solution Release Notes
\n• There may be known issues pertaining to this Solution, please refer to them before installing.
\nCribl is a vendor neutral, purpose-built processing engine for data security and IT operations focused on centralized parsing and processing of event data.
\nData Connectors: 1, Parsers: 4, Workbooks: 1
\nLearn more about Microsoft Sentinel | Learn more about Solutions
\n", "contentKind": "Solution", "contentProductId": "[variables('_solutioncontentProductId')]", "id": "[variables('_solutioncontentProductId')]", @@ -970,6 +1085,11 @@ "kind": "Parser", "contentId": "[variables('parserObject4').parserContentId4]", "version": "[variables('parserObject4').parserVersion4]" + }, + { + "kind": "Workbook", + "contentId": "[variables('_workbookContentId1')]", + "version": "[variables('workbookVersion1')]" } ] }, diff --git a/Solutions/Cribl/Package/testParameters.json b/Solutions/Cribl/Package/testParameters.json index e55ec41a9ac..8f80225defc 100644 --- a/Solutions/Cribl/Package/testParameters.json +++ b/Solutions/Cribl/Package/testParameters.json @@ -20,5 +20,13 @@ "metadata": { "description": "Workspace name for Log Analytics where Microsoft Sentinel is setup" } + }, + "workbook1-name": { + "type": "string", + "defaultValue": "Cribl Workbook", + "minLength": 1, + "metadata": { + "description": "Name for the workbook" + } } } diff --git a/Solutions/Cribl/Workbooks/CriblWorkbook.json b/Solutions/Cribl/Workbooks/CriblWorkbook.json new file mode 100644 index 00000000000..3ff6cf3335f --- /dev/null +++ b/Solutions/Cribl/Workbooks/CriblWorkbook.json @@ -0,0 +1,564 @@ +{ + "version": "Notebook/1.0", + "items": [ + { + "type": 1, + "content": { + "json": "# Cribl Workbook\r\n\r\nThis Workbook contains summary of \r\n\r\n\r\n| Access Logs | Audit Logs | Internal Logs | UI Access Logs|\r\n| -------------- | --------------- | -------------- | -------------- |\r\n| Included | Included | Included | Included |" + }, + "customWidth": "50", + "name": "text - 19" + }, + { + "type": 9, + "content": { + "version": "KqlParameterItem/1.0", + "parameters": [ + { + "id": "007ea1ee-99dd-4c59-bc0f-7eb8b1e05c71", + "version": "KqlParameterItem/1.0", + "name": "TimeGenerated", + "type": 4, + "typeSettings": { + "selectableValues": [ + { + "durationMs": 300000 + }, + { + "durationMs": 900000 + }, + { + "durationMs": 1800000 + }, + { + "durationMs": 3600000 + }, + { + "durationMs": 14400000 + }, + { + "durationMs": 43200000 + }, + { + "durationMs": 86400000 + }, + { + "durationMs": 172800000 + }, + { + "durationMs": 259200000 + }, + { + "durationMs": 604800000 + }, + { + "durationMs": 1209600000 + }, + { + "durationMs": 2419200000 + }, + { + "durationMs": 2592000000 + }, + { + "durationMs": 5184000000 + }, + { + "durationMs": 7776000000 + } + ], + "allowCustom": true + }, + "timeContext": { + "durationMs": 86400000 + }, + "value": { + "durationMs": 86400000 + } + } + ], + "style": "pills", + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces" + }, + "customWidth": "50", + "name": "parameters - 21" + }, + { + "type": 1, + "content": { + "json": "# Access Logs\n---\n", + "style": "info" + }, + "name": "text - 2" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAccess\n| summarize Count = count() by tostring(status)", + "size": 1, + "title": "Summary of HTTP Status Code", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "piechart", + "chartSettings": { + "showMetrics": false, + "showLegend": true + } + }, + "customWidth": "33", + "name": "HTTP Status Code Overview" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAccess\n| summarize count() by method\n", + "size": 1, + "title": "Summary of HTTP Methods", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "piechart", + "chartSettings": { + "showMetrics": false, + "showLegend": true + } + }, + "customWidth": "33", + "name": "httpMethodSummary" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAccess\n| summarize Count = count() by src", + "size": 1, + "title": "Summary of Source", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "table", + "gridSettings": { + "formatters": [ + { + "columnMatch": "Count", + "formatter": 8, + "formatOptions": { + "palette": "blue" + } + } + ] + } + }, + "customWidth": "33", + "name": "httpMethodsSummary" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAccess\n| summarize Hits = count() by url\n| top 10 by Hits\n", + "size": 0, + "title": "Top Accessed API Endpoints", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "categoricalbar" + }, + "name": "Top Accessed API Endpoints" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAccess\n| extend statusCode = toint(status)\n| where statusCode >= 400\n| summarize ErrorCount = count() by tostring(statusCode)\n| sort by ErrorCount desc\n", + "size": 0, + "title": "HTTP Error Code Summary", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "barchart" + }, + "name": "HTTP Error Code Summary" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAccess\n| summarize AvgResponseTime = avg(response_time) by url\n| top 10 by AvgResponseTime\n\n", + "size": 0, + "title": "API Response Time Analysis", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "unstackedbar" + }, + "name": "API Response Time Analysis" + }, + { + "type": 1, + "content": { + "json": "# Audit Logs\n---\n", + "style": "info" + }, + "name": "text - 2 - Copy" + }, + { + "type": 12, + "content": { + "version": "NotebookGroup/1.0", + "groupType": "editable", + "items": [ + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAudit\n| summarize Count = count() by service\n", + "size": 1, + "title": "Summary of Services", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "gridSettings": { + "formatters": [ + { + "columnMatch": "Count", + "formatter": 8, + "formatOptions": { + "palette": "blue" + } + } + ] + } + }, + "customWidth": "50", + "name": "auditServiceSummaryTable" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAudit\n| summarize Count = count() by user\n| top 5 by Count\n", + "size": 1, + "title": "Top 5 Users by Audit Events", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "piechart", + "chartSettings": { + "showMetrics": false, + "showLegend": true + } + }, + "customWidth": "50", + "name": "Top 5 Users by Audit Events" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAudit\n| where event_time between ({TimeGenerated:start} .. {TimeGenerated:end})\n| summarize Count = count() by bin(event_time, {TimeGenerated:grain})\n", + "size": 0, + "title": "Requests Over Time", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "timechart" + }, + "name": "Requests Over Time" + } + ] + }, + "name": "auditLogsRequestsOverTimeGroup" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAudit\n| summarize Count = count() by action\n| order by Count desc\n", + "size": 0, + "title": "Most Performed Audit Actions", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "unstackedbar" + }, + "name": "Most Performed Audit Actions" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAudit\n| summarize UniqueUsers = dcount(user) by action\n| order by UniqueUsers desc\n", + "size": 0, + "title": "User Participation by Action Type", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "categoricalbar" + }, + "name": "User Participation by Action Type" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAudit\n| where event_time between (datetime({TimeGenerated:start}) .. datetime({TimeGenerated:end}))\n| summarize Count = count() by bin(event_time, 5m)\n| order by event_time asc\n", + "size": 0, + "title": "Audit Event Activity Over Time", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "timechart" + }, + "name": "Audit Event Activity Over Time" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblAudit\n| summarize Count = count() by service, action\n| order by service asc\n", + "size": 0, + "title": "Actions by Cribl Service Module", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "barchart" + }, + "name": "Actions by Cribl Service Module" + }, + { + "type": 1, + "content": { + "json": "# Internal Logs\n---\n", + "style": "info" + }, + "name": "text - 2 - Copy - Copy" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblInternal\n| summarize avg(cpuPerc) by service\n| order by avg_cpuPerc desc\n", + "size": 0, + "title": "Average CPU Usage per Cribl Component", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "unstackedbar" + }, + "name": "Average CPU Usage per Cribl Component" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblInternal\n| summarize avg(mem_rss) by service\n| order by avg_mem_rss desc\n", + "size": 0, + "title": "Average Memory (RSS) Usage by Component", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "categoricalbar" + }, + "name": "Average Memory (RSS) Usage by Component" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblInternal\n| where event_time between ({TimeGenerated:start} .. {TimeGenerated:end})\n| summarize avg(cpuPerc), avg(eluPerc) by bin(event_time, {TimeGenerated:grain})\n", + "size": 0, + "title": "CPU vs ELU Over Time", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "linechart" + }, + "name": "CPU vs ELU Over Time" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblInternal\n| summarize avg(mem_heap), avg(mem_heapTotal) by bin(event_time, 1m)\n", + "size": 0, + "title": "Heap vs Total Heap Memory Over Time", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "areachart" + }, + "name": "Heap vs Total Heap Memory Over Time" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblInternal\n| summarize avg(mem_rss) by instance\n| top 5 by avg_mem_rss\n", + "size": 0, + "title": "Top 5 Hosts by RSS Memory Usage", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "barchart" + }, + "name": "Top 5 Hosts by RSS Memory Usage" + }, + { + "type": 1, + "content": { + "json": "# UI Access Logs\n---\n", + "style": "info" + }, + "name": "text - 2 - Copy - Copy - Copy" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblUIAccess\n| summarize Count = count() by user\n| top 5 by Count\n", + "size": 1, + "title": "Top 5 Users Accessing Cribl UI", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "piechart", + "chartSettings": { + "showMetrics": false, + "showLegend": true + } + }, + "customWidth": "50", + "name": "Top 5 Users Accessing Cribl UI" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblUIAccess\n| summarize Count = count() by tenantId\n| top 5 by Count\n", + "size": 1, + "title": "Top 5 Tenants Accessing Cribl UI", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "piechart", + "chartSettings": { + "showMetrics": false, + "showLegend": true + } + }, + "customWidth": "50", + "name": "Top 5 Tenants Accessing Cribl UI" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblUIAccess\n| summarize Count = count() by url\n| order by Count desc\n", + "size": 0, + "title": "Most Accessed UI Pages", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "unstackedbar" + }, + "name": "Most Accessed UI Pages" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblUIAccess\n| where event_time between (datetime({TimeGenerated:start}) .. datetime({TimeGenerated:end}))\n| summarize AccessCount = count() by bin(event_time, 1m)\n| order by event_time asc\n", + "size": 0, + "title": "Cribl UI Access Trend", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "timechart" + }, + "name": "Cribl UI Access Trend" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblUIAccess\n| summarize AccessCount = count() by src\n| top 10 by AccessCount\n", + "size": 0, + "title": "Top Source IPs Accessing UI", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "barchart" + }, + "name": "Top Source IPs Accessing UI" + }, + { + "type": 3, + "content": { + "version": "KqlItem/1.0", + "query": "CriblUIAccess\n| summarize Count = count() by http_user_agent\n| top 5 by Count\n", + "size": 0, + "title": "Most Common Browsers & Tools", + "timeContextFromParameter": "TimeGenerated", + "showRefreshButton": true, + "showExportToExcel": true, + "queryType": 0, + "resourceType": "microsoft.operationalinsights/workspaces", + "visualization": "categoricalbar" + }, + "name": "Most Common Browsers & Tools" + } + ], + "fromTemplateId": "sentinel-CriblWorkbook", + "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json" +}