Team Cymru Scout: migrate playbooks from the HTTP Data Collector API to the Logs Ingestion API - #15101
Team Cymru Scout: migrate playbooks from the HTTP Data Collector API to the Logs Ingestion API#15101jstraney-tc wants to merge 5 commits into
Conversation
TeamCymruScoutEnrichIncident/azuredeploy.json was serialized by PowerShell's ConvertTo-Json (two spaces after the key separator, inline arrays), which makes any subsequent content change unreadable in a diff. Re-serialize both playbook templates as 4-space JSON with literal Unicode, matching the style TeamCymruScoutLiveInvestigation already used. No semantic change: both files parse to structures identical to their previous contents. Split out from the following commit so the Logs Ingestion API migration can be reviewed on its own. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Support for the HTTP Data Collector API ends 2026-09-14. The Azure Function data connector already ingests through a DCR, but the TeamCymruScoutLiveInvestigation and TeamCymruScoutEnrichIncident playbooks still posted to /api/logs through the azureloganalyticsdatacollector managed connector: 21 and 6 actions respectively. Each of those 27 actions now POSTs to a data collection rule stream, authenticated as the playbook's own system-assigned managed identity. Both templates provision what they write to -- a data collection endpoint, the destination tables, one DCR with a stream and transform per table, and a Monitoring Metrics Publisher role assignment scoped to that DCR -- so no manual wiring is left to the operator. The data collector connection resource, its ARM variable, its dependsOn entry and its $connections entry are all removed. Column names and types are unchanged, so the 17 parsers and the workbook that read these tables keep working. The transforms project the raw Scout API fields onto the existing _s/_d/_b/_g column names, including the nested paths the old API flattened with underscores (local.ip -> local_ip_s) and the ip/query/rank fields the playbooks graft on before ingesting. Tables created by the old API are classic tables and must be converted once per workspace before the migrated playbooks run. Both playbook READMEs and the post-deployment metadata document the az monitor log-analytics workspace table migrate command and note that the conversion is one-way. Solution version 3.1.1 -> 4.0.0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Note
Copilot was unable to run its full agentic suite in this review.
Pull request overview
Updates the Team Cymru Scout solution metadata and playbook documentation to support the migration from the retired HTTP Data Collector API to the Azure Monitor Logs Ingestion API, and bumps the solution version accordingly.
Changes:
- Bumped solution version to 4.0.0 and updated publish metadata.
- Added release note entry for the playbook ingestion migration.
- Updated both playbook READMEs with Logs Ingestion API guidance and classic-table migration instructions.
Reviewed changes
Copilot reviewed 5 out of 7 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| Solutions/Team Cymru Scout/SolutionMetadata.json | Updates last publish date metadata. |
| Solutions/Team Cymru Scout/ReleaseNotes.md | Adds 4.0.0 entry documenting the migration. |
| Solutions/Team Cymru Scout/Playbooks/TeamCymruScoutLiveInvestigation/README.md | Documents Logs Ingestion API behavior and classic-table migration steps. |
| Solutions/Team Cymru Scout/Playbooks/TeamCymruScoutEnrichIncident/README.md | Documents Logs Ingestion API behavior and classic-table migration steps. |
| Solutions/Team Cymru Scout/Data/Solution_TeamCymruScout.json | Bumps solution version to 4.0.0. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
@microsoft-github-policy-service agree [company="Team Cymru"] |
|
@microsoft-github-policy-service agree company="Team Cymru" |
|
Could you please verify the table migration examples in both README files? The placeholder --table-name "_CL" may cause users to append _CL twice if the table list command already returns the full table name. Clarifying the expected input would help avoid migration issues. |
The `table list` command returns the full table name including the _CL suffix, but the migrate example used a `<TableName>_CL` / `<Table>_CL` placeholder, leading users to append _CL twice (e.g. Communication_Data_CL_CL) and fail the migration. Use the name exactly as listed and note the _CL suffix is already included, in both playbook READMEs and their azuredeploy.json post-deployment metadata. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
v-skharode thanks for the review. Confirming the table names and the migration example:
Pushed in the latest commit. Let me know if you'd like any further wording changes. |
|
Thanks for the clarification and update. I verified the latest changes locally and confirmed the migration example now uses the correct table name returned by the table list command, avoiding the duplicate _CL suffix issue. The concern has been addressed. |
|
I have a couple of follow-up questions: The solution version has been updated from 3.1.1 to 4.0.0. Could you please clarify the reason for a major version bump rather than a patch/minor version update (for example, 3.1.2)? I am unable to locate the updated package file/artifact associated with this version change in the PR. Could you please confirm whether the package was regenerated and included as part of this update? |
|
Follow-up: |
Change the solution version from 4.0.0 to 3.1.2 (patch) per Microsoft review feedback, and regenerate the solution package with the V3 packaging tool so the migrated playbooks are reflected in the artifact: add Package/3.1.2.zip and update Package/mainTemplate.json. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Thanks for the follow-up. Responses to both:
Both are in the latest commit. Let me know if you'd like any other changes. |
|
Thanks for addressing the previous feedback. I noticed that the ARM-TTK validation is still failing on "apiVersions Should Be Recent In Reference Functions". The template appears to reference Microsoft.Logic/workflows API version 2017-07-01, which is being flagged as outdated by the validation. Could you please review the ARM-TTK failure and update accordingly? |
ARM-TTK's "apiVersions Should Be Recent In Reference Functions" test fails on the role-assignment principalId lookup in the two migrated playbooks, which referenced Microsoft.Logic/workflows with the outdated 2017-07-01 API version. Update the reference() calls and the workflow resources themselves to 2019-05-01, the latest stable version, in both TeamCymruScoutEnrichIncident and TeamCymruScoutLiveInvestigation, and regenerate the 3.1.2 package. The untouched CreateIncidentAndNotify playbook is left as is. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
v-skharode thanks for catching this. Fixed in the latest commit:
I ran |
|
I see there's a few checks that have failed, but I'm not certain it's anything from the open PR — the JSON File Syntax Validation and Playbook Validation jobs both appear to have hit a GitHub API rate limit (403) before validating any files. Could you please rerun the pipeline? Is there anything additional needed from my side? |
Change(s)
Migrates the two Team Cymru Scout playbooks that still ingest through the HTTP Data Collector API over to the Logs Ingestion API:
TeamCymruScoutLiveInvestigation— 21 ingestion actionsTeamCymruScoutEnrichIncident— 6 ingestion actionsEvery
ApiConnectionaction posting to/api/logsthrough theazureloganalyticsdatacollectormanaged connector is now anHttpaction posting to a data collection rule stream, authenticated with the playbook's system-assigned managed identity.Both templates now provision what they write to, so nothing is left for the operator to wire up by hand:
Microsoft.Insights/dataCollectionEndpointsMicrosoft.OperationalInsights/workspaces/tablesMicrosoft.Insights/dataCollectionRulesMicrosoft.Authorization/roleAssignments— Monitoring Metrics Publisher, scoped to the DCRThe data collector connection resource, its ARM variable, its
dependsOnentry and its$connectionsentry are removed.TeamCymruScoutCreateIncidentAndNotifywrites no logs and is unchanged.Two commits. The first is a formatting-only normalization of the two templates —
TeamCymruScoutEnrichIncident/azuredeploy.jsonhad been serialized by PowerShell'sConvertTo-Json, which made any content change unreadable in a diff. It is split out so the migration itself can be reviewed on its own, and is verified to be a semantic no-op: both files parse to structures identical to their previous contents.Reason for Change(s)
Support for the HTTP Data Collector API ends 2026-09-14 (migration guidance). This solution's Azure Function data connector was already moved to the Logs Ingestion API in an earlier release, but these two playbooks were not, and they account for all remaining Data Collector API usage in the solution.
Version Updated
Yes — solution
3.1.1→4.0.0, with aReleaseNotes.mdentry.Major rather than minor because existing workspaces need a one-way table conversion before the migrated playbooks can write.
Compatibility
Column names and types are unchanged, so the 17 parsers and the workbook that read these tables keep working without modification. The DCR transforms project the raw Scout API fields onto the existing
_s/_d/_b/_gcolumn names, reproducing the flattening the Data Collector API applied implicitly (local.ip→local_ip_s) along with theip/query/rankfields the playbooks graft on before ingesting.Tables created by the old API are classic tables and must be converted once per workspace before the migrated playbooks run. Both playbook READMEs and the post-deployment metadata document the
az monitor log-analytics workspace table migratecommand and state that the conversion cannot be undone.Testing Completed
No — opened as a draft pending deployment validation.
Verified statically:
azureloganalyticsdatacollector,Log-Typeor/api/logsreferences remain.script/playbooksValidator.ts—PlaybookNameparameter, single main workflow, resource-group location, mandatory metadata fields, valid entity types — pass for all three playbooksNot yet done, and the reason this is a draft:
The destination column names were derived from this solution's own parsers and from the playbooks'
ParseJsonschemas rather than from a live workspace, so confirming them against<Table>_CL | getschemais the main outstanding item. Will move this out of draft once that is done.Checked that the validations are passing
Partially. The repo's Node validators could not be run locally (
node_modulesnot installed), so theplaybooksValidatorrules were replicated and checked directly, as listed above.Package/has not been regenerated — PowerShell was unavailable — so/packagewill be needed.🤖 Generated with Claude Code