- name
- asim-parser-filter-validator
- description
- Validates ASIM parser filtering parameters by running filter tests against a Log Analytics workspace. Pure PowerShell using az CLI for authentication — no Python or Azure SDK packages required. Use this skill after creating or modifying an ASIM parser to verify that its filtering parameters work correctly.
- requiredSkills
- ["az-cli-command-runner"]
# ASIM Parser Filter Validator
Validates that an ASIM parser's filtering parameters (e.g. `disabled`, `starttime`, `endtime`, `srcipaddr_has_any_prefix`, etc.) behave correctly by running queries against a Log Analytics workspace.
This skill is a **pure PowerShell** implementation that uses `az CLI` for authentication. No Python, Azure SDK packages, or YAML modules are required.
- **PowerShell 7+**
- **Azure CLI** (logged in via `az login`)
## What it tests
For every filtering parameter declared in the parser's KQL function signature:
| Parameter type | Tests performed |
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `disabled` | `disabled=true` returns 0 rows; `disabled=false` returns rows |
| `datetime` (`starttime` / `endtime`) | Filtering by the midpoint timestamp returns fewer rows than unfiltered |
| Scalar (`string`, `int`) | Filtering by a real value returns exactly that value; filtering by a fictitious value returns 0 rows |
| `dynamic` (`*_has_any`, `*_has_all`, `*_has_any_prefix`) | Filtering by one/two real values returns fewer rows; fictitious value returns 0 rows; substring / prefix variants tested where applicable |
## Supported schemas
AgentEvent, AlertEvent, AssetEntity, AuditEvent, Authentication, DhcpEvent, Dns, FileEvent, NetworkSession, ProcessEvent, RegistryEvent, UserManagement, WebSession.
## Inputs
| Input | Required | Description |
| --------------- | -------- | ----------------------------------------------------------------- |
| Parser KQL path | Yes | Path to the ASIM parser `.kql` file to test |
| Schema name | Yes | ASIM schema name (e.g. `Dns`, `Authentication`, `NetworkSession`) |
| Workspace ID | Yes | Log Analytics workspace GUID to run queries against |
## How to run
```powershell
.\scripts\asimFilterTest.ps1 -ParserFile "{PathToFilterParserKQL}" -SchemaName "{SchemaName}" -WorkspaceId "{your-workspace-guid}"
```
## Prerequisites
1. **Azure CLI authenticated** — run `az login` if not already logged in. If you get an authentication error, use the `az-cli-command-runner` skill to verify login status.
2. The workspace must contain data for the tables referenced by the parser.
## Interpreting results
- **Green** — test passed.
- **FAIL** — the filtering parameter did not behave as expected. The failure message indicates which parameter failed and what was expected.
- **Known partial validations** — AuditEvent (`EventResult`), Authentication (`EventType`), and Dns (`EventType`) have known single-failure scenarios that are automatically ignored.
### Known acceptable failure reasons (can be ignored)
When analyzing filter-validation failures, a failure can be **ignored** if it matches one of these inherent-limitation categories:
1. **Documented schema known exception** — The schema defines a known exception for a parameter (e.g. a multi-value test that cannot succeed because the value combinations do not co-exist in that schema's data). Check whether the ASIM schema documentation lists the parameter as a known exception.
2. **Constant or single-value field by design** — The parser maps the filtered field to a single constant value, so multi-value or reduction-based filtering cannot reduce rows further. This is expected when the source provides only one possible value for that field.
3. **Insufficient distinct values in the test window** — The 2-day query window does not contain enough distinct values for the field to exercise multi-value filtering. This is a data-availability limitation, not a parser bug.
When reviewing filter-validation output, analyze each failure message against these categories. If **all other parameters pass** and every failure maps to one of the reasons above, the parser's filtering implementation is considered correct.
## Troubleshooting
| Symptom | Fix |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `Failed to acquire access token via az CLI` | Run `az login` |
| `No data in the provided workspace` | Ensure the workspace has ingested data for the relevant tables within the last 2 days |
| `Schema: X - Not supported` | The schema name is not in the supported list — update the `$AllSchemasParameters` hashtable in `asimFilterTest.ps1` |
Ver no GitHub