Log Horizon 0.9.0
Remediation release from a full code and data review, verified against a live Microsoft Sentinel workspace at every step.
Install-Module LogHorizon -RequiredVersion 0.9.0
# or
Update-Module LogHorizonUpgrading from 0.8.x
Az.Resourcesis no longer required;Az.AccountsandPwshSpectreConsole2.6.3+ are the only dependencies.Microsoft.Graph.Authenticationstays optional for-IncludeDefenderXDRas a signed-in user.- Data collection is cached by default under
%LOCALAPPDATA%\LogHorizon\cachefor 60 minutes. Use-NoCacheto opt out,-RefreshCacheto force a fresh collection,-CacheMaxAgeMinutesand-CachePathto tune it. The README describes what the cache holds. -OutputPathwithout an extension is now a file name (the format extension is appended); an existing directory or a trailing separator still produces a timestamped file.- Licence is GPL-3.0.
What changed
Cost and value scoring
- Every table is priced by the plan observed in
Usage.Plan(Analytics, Basic, Data Lake rates via-PricePerGB,-BasicPricePerGB,-LakePricePerGB), free status comes fromUsage.IsBillable, volumes use billing GB (1000 MB). - Non-KQL rule kinds (Threat Intelligence matching, Fusion, UEBA, Microsoft incident creation) count as coverage for the tables they consume; platform tables Sentinel writes for itself get a
Platformassessment and are never flagged as missing coverage. - New recommendations:
PlanUsage,DeprecatedSource,RetentionInteractiveBelowBaseline. TheDataLakerecommendation only proposes the Auxiliary plan for tables that support it and falls back to a Basic plan suggestion otherwise. Savings are current cost minus the same volume at the target rate. One canonical sort order everywhere.
Detection Analyzer
- Auto-close attribution uses only enabled close-incident or playbook automation rules, matches on analytic rule id, title and severity conditions (ANDed like Sentinel), and buckets incidents by rule id so duplicate names score separately.
- Scores need at least 3 rules with incidents; below that they show N/A with a stated reason.
Transforms and split KQL
- DCR discovery runs at subscription scope filtered on the destination workspace, plus the workspace transformation DCR and workspace associations. Missing permissions produce a visible warning and a
DiscoveryStatusblock instead of silently reporting no transforms. - Workspace and multi-stage transforms are parsed, compound operations are labelled (
Filter+Projection). - Split and tuning KQL is intersected with the live table schema; fields and predicates on joined tables or
letvariables are dropped and reported.
Classification database
- 345 -> 481 tables: 80+ first-party tables (Sentinel, Entra, Defender XDR, Purview, Power Platform, Azure services, AWS, GCP, ASIM) and 35 successor tables for codeless connectors.
- New optional keys:
status(deprecated/legacy),replacedBy,xdrStreamable,platform. Connector label andisFreecorrections. basic-plan-tables.jsonregenerated andauxiliary-plan-tables.jsonadded from the Azure Monitor table feature matrix.
Platform and APIs
- ARM, Log Analytics and Graph endpoints follow the signed-in Azure environment (public, US Government, China).
- SecurityInsights
2025-09-01, OperationalInsights2025-07-01, recommendations2025-10-01-preview. - REST retries on transport errors, Location-style async completion, workspace resolved over REST.
TUI and exports
- Dictionary menu with every term the tool uses, kept in step with the README by tests.
- All Tables view with a per-table detail panel; Back is always the first choice; the Export menu asks for a path; rendering follows the current window size after a resize; lifecycle badges on deprecated and legacy tables.
- Escaped TUI and Markdown output, CSP meta in the HTML report, exports return the written path.
Privacy
- No tokens, incident owners, rule authors or assigned-owner identities are stored in the cache or written to exports.
Verification
- 437 Pester tests (up from 203), PSScriptAnalyzer clean.
- Live runs against a test workspace after every change, plus a manual test plan covering the CLI, cache, exports, every TUI menu, the retention command and the data files.
Full version history: https://github.com/lnfernux/log-horizon#version-history