<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Log Analytics on Brewed in the Cloud by Chris Hailes</title><link>https://blog.brewedinthecloud.com/tags/log-analytics/</link><description>Recent content in Log Analytics on Brewed in the Cloud by Chris Hailes</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 24 Sep 2026 00:00:00 +1000</lastBuildDate><atom:link href="https://blog.brewedinthecloud.com/tags/log-analytics/rss.xml" rel="self" type="application/rss+xml"/><item><title>Collecting Azure Resource Logs Without Creating Noise</title><link>https://blog.brewedinthecloud.com/p/azure-security-telemetry-diagnostic-settings/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +1000</pubDate><guid>https://blog.brewedinthecloud.com/p/azure-security-telemetry-diagnostic-settings/</guid><description>&lt;p&gt;Once the Azure control plane is visible, the next question is which resource-level signals deserve to be collected. This is where many telemetry programs become expensive and disappointing. Teams enable every diagnostic category they can find, send it all to one workspace, and then discover that most of the data is not tied to a detection, investigation, or assurance use case.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A good Azure telemetry design is selective by intent, not selective by accident.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Diagnostic settings are the bridge between Azure resources and operational destinations such as Log Analytics, Event Hubs, and storage accounts. They are powerful, but they need architecture. Collection should be driven by risk, investigation paths, and response ownership.&lt;/p&gt;
&lt;h2 id="the-mental-model"&gt;The Mental Model
&lt;/h2&gt;&lt;p&gt;Think of resource logs as evidence from the services that carry business risk. The control plane tells you that a resource changed. Resource logs tell you how that resource behaved. For security telemetry, the question is not &amp;ldquo;can this service emit logs?&amp;rdquo; The question is &amp;ldquo;which emitted events would change a detection, investigation, or governance decision?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;This shifts the conversation from log categories to decisions. For a key vault, useful questions include who accessed secrets, whether access was denied, whether purge protection matters, and whether administrative changes align with policy. For a firewall or application gateway, useful questions include what was allowed, what was denied, which rules matched, and whether traffic patterns changed. For storage, useful questions include access paths, authentication methods, network source, and data access patterns.&lt;/p&gt;
&lt;p&gt;The mental model is signal portfolio management. Some logs are high-value and low-volume. Some are high-value but expensive. Some are operationally useful but rarely security relevant. Some only matter during a major incident. Treating them all equally creates cost pressure and weakens analyst focus.&lt;/p&gt;
&lt;p&gt;An architecture-first approach classifies resource logs into tiers: mandatory security evidence, conditional investigation support, operational-only telemetry, and excluded noise. That classification should be visible in platform standards, not hidden in individual diagnostic settings.&lt;/p&gt;
&lt;h2 id="how-it-really-works"&gt;How It Really Works
&lt;/h2&gt;&lt;p&gt;Diagnostic settings define which log categories and metrics are collected from a resource and where they are sent. A single resource can have diagnostic settings that route data to destinations such as a Log Analytics workspace, an Event Hubs namespace, or a storage account. Each destination supports a different operating model.&lt;/p&gt;
&lt;div class="mermaid"&gt;flowchart TD
A[Azure Resource] --&gt; B[Diagnostic Setting]
B --&gt; C[Log Analytics Workspace]
B --&gt; D[Event Hubs]
B --&gt; E[Storage Account]
C --&gt; F[Sentinel Detections]
D --&gt; G[SIEM or Data Pipeline]
E --&gt; H[Archive and Retention]
&lt;/div&gt;
&lt;p&gt;Log Analytics is commonly used when teams need query, detection, workbook, and Microsoft Sentinel integration. Event Hubs is useful when telemetry must be streamed to another platform, a downstream security data lake, or a central enterprise pipeline. Storage can support archive and compliance retention patterns, although it is less convenient for active detection.&lt;/p&gt;
&lt;p&gt;The critical design choice is not only destination. It is category selection. Azure services expose different diagnostic categories, and not all categories have equal security value. A storage account, key vault, firewall, application gateway, Kubernetes service, or database service will each require a different collection decision. Copying the same diagnostic template everywhere is rarely correct.&lt;/p&gt;
&lt;p&gt;At scale, deployment matters. Azure Policy can deploy diagnostic settings for supported resources and can audit resources that are missing expected settings. Infrastructure as code can also define diagnostic settings alongside the resource. The most mature pattern is to combine both: templates create the expected configuration at deployment time, and policy detects drift or resources created outside the normal path.&lt;/p&gt;
&lt;p&gt;Cost management must be part of the design. Ingestion volume, retention, table plan choices, and query behavior all affect the operating cost. Security teams need enough telemetry to investigate and detect, while platform teams need predictable cost boundaries. That trade-off should be explicit.&lt;/p&gt;
&lt;h2 id="real-world-impact"&gt;Real-World Impact
&lt;/h2&gt;&lt;p&gt;Diagnostic setting design directly affects incident response. During a suspected data exposure, the team may need to know whether storage data access logs were collected, whether key vault access was visible, whether firewall traffic was retained, and whether the data is queryable in the same workspace as related identity and control-plane events.&lt;/p&gt;
&lt;p&gt;If the logs are missing, the investigation becomes a reconstruction exercise. If the logs exist but are split across disconnected destinations, response slows down. If the logs exist but are buried under unclassified noise, analysts spend time filtering rather than deciding. A deliberate collection design improves all three outcomes.&lt;/p&gt;
&lt;p&gt;There is also a governance impact. When diagnostic settings are standardized, security and platform leaders can measure telemetry coverage. They can report which subscriptions and resource classes meet the logging baseline, where exceptions exist, and whether those exceptions have owners. That is much stronger than a general statement that &amp;ldquo;logging is enabled.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;For detection engineering, resource logs unlock higher-fidelity analytics. A network rule change from Activity Log is useful. A rule change followed by unusual allowed traffic from a firewall is more useful. A key vault configuration change is useful. The same change followed by denied secret reads, successful reads from a new identity, or access from an unexpected network is more useful again.&lt;/p&gt;
&lt;p&gt;The impact is not just better alerting. It is better prioritization. Resource logs help teams decide which control-plane changes matter most because they show whether the affected service behaved differently afterwards.&lt;/p&gt;
&lt;h2 id="gotchas-and-edge-cases"&gt;Gotchas and Edge Cases
&lt;/h2&gt;&lt;p&gt;Diagnostic settings can fail as an operating model when ownership is unclear. Security may define the requirement, platform may own policy, application teams may own the resource, and operations may own the workspace. Without clear responsibility, gaps persist because everyone assumes another team is handling them.&lt;/p&gt;
&lt;p&gt;Another gotcha is over-collection. Sending every metric and log category to a central workspace can create cost and performance issues without improving detection. More data can actually reduce security value if analysts cannot tell which tables matter or if high-value events are buried under routine operational records.&lt;/p&gt;
&lt;p&gt;Service differences are also important. Azure services do not all expose the same diagnostic categories, and category names can evolve. A policy that works for one resource type may not apply to another. Treat resource classes individually and review high-risk services more often.&lt;/p&gt;
&lt;p&gt;Log size and limits matter. Some destinations and services impose practical limits, and large records or high-volume categories can behave differently than expected. Defender for Cloud continuous export, for example, notes that Log Analytics supports records up to a specific size limit. That kind of detail matters when designing downstream pipelines.&lt;/p&gt;
&lt;p&gt;Finally, do not forget the security of the telemetry path itself. A workspace, event hub, or storage account receiving security logs is a high-value target. If an attacker can modify diagnostic settings, delete data, or change routing, they can damage your evidence trail. Protect the collection pipeline with the same seriousness as production infrastructure.&lt;/p&gt;
&lt;h2 id="best-practices"&gt;Best Practices
&lt;/h2&gt;&lt;p&gt;Start by defining a resource telemetry baseline for high-risk Azure services. Key Vault, Storage, networking services, identity-adjacent services, Kubernetes, databases, and internet-facing services usually deserve early attention. For each resource class, document the mandatory categories, optional categories, destination, retention, and reason for collection.&lt;/p&gt;
&lt;p&gt;Use policy to audit and deploy diagnostic settings where supported. Pair that with infrastructure as code so new resources are born with the expected telemetry configuration. Review policy exemptions as security exceptions, not administrative clutter.&lt;/p&gt;
&lt;p&gt;Route telemetry based on use case. Send detection and investigation data to Log Analytics and Sentinel. Stream enterprise integration data to Event Hubs where needed. Use archive destinations for long-term retention requirements. Avoid one-size-fits-all routing.&lt;/p&gt;
&lt;p&gt;Create a cost feedback loop. Track ingestion by resource type, category, subscription, and owner. If a category is expensive, either prove its security value or redesign the route. Cost control should not mean blind deletion; it should mean evidence-based collection.&lt;/p&gt;
&lt;p&gt;Test the baseline with incident scenarios. Pick scenarios such as secret access, public exposure, firewall rule changes, and suspicious administrative updates. Confirm that the necessary logs are present, queryable, retained, and understandable by the teams who will use them.&lt;/p&gt;
&lt;h3 id="practical-tiered-diagnostic-settings-baseline"&gt;Practical tiered diagnostic-settings baseline
&lt;/h3&gt;&lt;p&gt;The implementation pattern I prefer is a resource-class baseline with two tiers: mandatory evidence that is always collected, and investigative telemetry that is enabled only where the service, risk, and cost model justify it. This Key Vault example uses the &lt;code&gt;Microsoft.Insights/diagnosticSettings@2021-05-01-preview&lt;/code&gt; Bicep resource, the Microsoft-documented &lt;code&gt;Audit&lt;/code&gt; category group for mandatory evidence, and &lt;code&gt;allLogs&lt;/code&gt; for the deeper tier.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bicep" data-lang="bicep"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;param&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;keyVaultName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;string&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="kd"&gt;param&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;logAnalyticsWorkspaceId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;string&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nf"&gt;allowed&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;mandatoryEvidence&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;investigative&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="kd"&gt;param&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;telemetryTier&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;mandatoryEvidence&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="kd"&gt;resource&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;keyVault&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Microsoft.KeyVault/vaults@2023-07-01&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;existing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;keyVaultName&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="kd"&gt;resource&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;diagnosticSetting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Microsoft.Insights/diagnosticSettings@2021-05-01-preview&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;set-by-platform-security-baseline&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;keyVault&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;workspaceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;logAnalyticsWorkspaceId&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;logAnalyticsDestinationType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Dedicated&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;telemetryTier&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;mandatoryEvidence&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;categoryGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Audit&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;categoryGroup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;allLogs&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;AllMetrics&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;At scale, wrap this decision in Azure Policy &lt;code&gt;DeployIfNotExists&lt;/code&gt; assignments and remediation tasks, but do not pretend one diagnostic setting fits every resource provider. Category groups are not universal, category names can differ by service, and &lt;code&gt;allLogs&lt;/code&gt; can change cost materially. The baseline should say which resource classes require audit evidence, which classes justify investigative categories, and which teams own exceptions.&lt;/p&gt;
&lt;div class="insight"&gt;
&lt;div class="insight-icon"&gt;🍺&lt;/div&gt;
&lt;div class="insight-content"&gt;
&lt;strong&gt;Brewed Insight:&lt;/strong&gt; Diagnostic settings aren&amp;rsquo;t a checkbox to tick during deployment. They&amp;rsquo;re the contract between Azure services and the security decisions your organization is going to need to make later - usually at 2am, during an incident, when it&amp;rsquo;s too late to go back and turn on the log you needed.
&lt;/div&gt;
&lt;/div&gt;
&lt;style&gt;
.insight {
display: flex;
align-items: center;
background-color: #0089e41c;
border-left: 10px solid #D69A2D;
padding: 10px;
margin: 20px 0;
border-radius: 4px;
}
.insight-icon {
font-size: 24px;
margin-right: 10px;
}
.insight-content {
flex: 1;
}
&lt;/style&gt;&lt;h2 id="learn-more"&gt;Learn More
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.brewedinthecloud.com/page/azure-security-telemetry-toolkit/" &gt;Azure Security Telemetry Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/azure/azure-monitor/essentials/diagnostic-settings" target="_blank" rel="noopener"
&gt;Diagnostic settings in Azure Monitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/azure/azure-monitor/logs/data-platform-logs" target="_blank" rel="noopener"
&gt;Azure Monitor Logs overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/azure/sentinel/connect-data-sources" target="_blank" rel="noopener"
&gt;Microsoft Sentinel data connectors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/azure/azure-monitor/service-limits" target="_blank" rel="noopener"
&gt;Azure Monitor service limits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>