feat(telemetry): Phase 3 — cluster resolve/ignore, audit logging, webhook alerts, metrics endpoint, Cosmos indexes
This commit is contained in:
parent
80a4459f81
commit
056f3236b6
159
scripts/cosmos-telemetry-indexes.sh
Executable file
159
scripts/cosmos-telemetry-indexes.sh
Executable file
@ -0,0 +1,159 @@
|
||||
#!/usr/bin/env bash
|
||||
# ──────────────────────────────────────────────────────────────────
|
||||
# Cosmos DB — Telemetry Container Indexing Policies
|
||||
#
|
||||
# Run once to apply composite indexes optimized for the query patterns
|
||||
# used by the telemetry module (events, clusters, policies).
|
||||
#
|
||||
# Prerequisites:
|
||||
# - Azure CLI installed and authenticated
|
||||
# - COSMOS_ACCOUNT_NAME and COSMOS_RESOURCE_GROUP env vars set
|
||||
# - Database name: lysnrai (or set COSMOS_DATABASE)
|
||||
# ──────────────────────────────────────────────────────────────────
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ACCOUNT="${COSMOS_ACCOUNT_NAME:?Set COSMOS_ACCOUNT_NAME}"
|
||||
RG="${COSMOS_RESOURCE_GROUP:?Set COSMOS_RESOURCE_GROUP}"
|
||||
DB="${COSMOS_DATABASE:-lysnrai}"
|
||||
|
||||
echo "🔧 Applying telemetry indexing policies..."
|
||||
echo " Account: $ACCOUNT | Database: $DB | Resource Group: $RG"
|
||||
|
||||
# ── telemetry_events ─────────────────────────────────────────────
|
||||
# Query patterns:
|
||||
# - WHERE productId = X AND occurredAt >= Y ORDER BY occurredAt DESC
|
||||
# - + userId, platform, channel, eventType, module filters
|
||||
echo "📦 telemetry_events..."
|
||||
az cosmosdb sql container update \
|
||||
--account-name "$ACCOUNT" \
|
||||
--resource-group "$RG" \
|
||||
--database-name "$DB" \
|
||||
--name telemetry_events \
|
||||
--idx '{
|
||||
"indexingMode": "consistent",
|
||||
"automatic": true,
|
||||
"includedPaths": [
|
||||
{ "path": "/productId/?" },
|
||||
{ "path": "/pk/?" },
|
||||
{ "path": "/userId/?" },
|
||||
{ "path": "/anonymousInstallId/?" },
|
||||
{ "path": "/platform/?" },
|
||||
{ "path": "/channel/?" },
|
||||
{ "path": "/eventType/?" },
|
||||
{ "path": "/module/?" },
|
||||
{ "path": "/eventName/?" },
|
||||
{ "path": "/occurredAt/?" },
|
||||
{ "path": "/receivedAt/?" },
|
||||
{ "path": "/osFamily/?" },
|
||||
{ "path": "/appVersion/?" },
|
||||
{ "path": "/buildNumber/?" }
|
||||
],
|
||||
"excludedPaths": [
|
||||
{ "path": "/message/?" },
|
||||
{ "path": "/stackTrace/?" },
|
||||
{ "path": "/tags/*" },
|
||||
{ "path": "/metrics/*" },
|
||||
{ "path": "/context/*" },
|
||||
{ "path": "/*" }
|
||||
],
|
||||
"compositeIndexes": [
|
||||
[
|
||||
{ "path": "/productId", "order": "ascending" },
|
||||
{ "path": "/occurredAt", "order": "descending" }
|
||||
],
|
||||
[
|
||||
{ "path": "/productId", "order": "ascending" },
|
||||
{ "path": "/platform", "order": "ascending" },
|
||||
{ "path": "/occurredAt", "order": "descending" }
|
||||
],
|
||||
[
|
||||
{ "path": "/productId", "order": "ascending" },
|
||||
{ "path": "/eventType", "order": "ascending" },
|
||||
{ "path": "/occurredAt", "order": "descending" }
|
||||
],
|
||||
[
|
||||
{ "path": "/productId", "order": "ascending" },
|
||||
{ "path": "/userId", "order": "ascending" },
|
||||
{ "path": "/occurredAt", "order": "descending" }
|
||||
]
|
||||
]
|
||||
}' \
|
||||
--output none
|
||||
|
||||
# ── telemetry_error_clusters ─────────────────────────────────────
|
||||
# Query patterns:
|
||||
# - WHERE productId = X ORDER BY totalCount DESC
|
||||
# - + platform, module, lastSeenAt filters
|
||||
echo "📦 telemetry_error_clusters..."
|
||||
az cosmosdb sql container update \
|
||||
--account-name "$ACCOUNT" \
|
||||
--resource-group "$RG" \
|
||||
--database-name "$DB" \
|
||||
--name telemetry_error_clusters \
|
||||
--idx '{
|
||||
"indexingMode": "consistent",
|
||||
"automatic": true,
|
||||
"includedPaths": [
|
||||
{ "path": "/productId/?" },
|
||||
{ "path": "/pk/?" },
|
||||
{ "path": "/platform/?" },
|
||||
{ "path": "/module/?" },
|
||||
{ "path": "/severity/?" },
|
||||
{ "path": "/status/?" },
|
||||
{ "path": "/totalCount/?" },
|
||||
{ "path": "/lastSeenAt/?" },
|
||||
{ "path": "/firstSeenAt/?" }
|
||||
],
|
||||
"excludedPaths": [
|
||||
{ "path": "/affectedVersions/*" },
|
||||
{ "path": "/affectedUserIds/*" },
|
||||
{ "path": "/affectedInstallIds/*" },
|
||||
{ "path": "/affectedOsFamilies/*" },
|
||||
{ "path": "/*" }
|
||||
],
|
||||
"compositeIndexes": [
|
||||
[
|
||||
{ "path": "/productId", "order": "ascending" },
|
||||
{ "path": "/totalCount", "order": "descending" }
|
||||
],
|
||||
[
|
||||
{ "path": "/productId", "order": "ascending" },
|
||||
{ "path": "/status", "order": "ascending" },
|
||||
{ "path": "/totalCount", "order": "descending" }
|
||||
]
|
||||
]
|
||||
}' \
|
||||
--output none
|
||||
|
||||
# ── telemetry_collection_policies ────────────────────────────────
|
||||
# Query patterns:
|
||||
# - WHERE productId = X ORDER BY priority DESC
|
||||
echo "📦 telemetry_collection_policies..."
|
||||
az cosmosdb sql container update \
|
||||
--account-name "$ACCOUNT" \
|
||||
--resource-group "$RG" \
|
||||
--database-name "$DB" \
|
||||
--name telemetry_collection_policies \
|
||||
--idx '{
|
||||
"indexingMode": "consistent",
|
||||
"automatic": true,
|
||||
"includedPaths": [
|
||||
{ "path": "/productId/?" },
|
||||
{ "path": "/priority/?" },
|
||||
{ "path": "/enabled/?" }
|
||||
],
|
||||
"excludedPaths": [
|
||||
{ "path": "/targeting/*" },
|
||||
{ "path": "/*" }
|
||||
],
|
||||
"compositeIndexes": [
|
||||
[
|
||||
{ "path": "/productId", "order": "ascending" },
|
||||
{ "path": "/priority", "order": "descending" }
|
||||
]
|
||||
]
|
||||
}' \
|
||||
--output none
|
||||
|
||||
echo "✅ Telemetry indexing policies applied successfully."
|
||||
Loading…
Reference in New Issue
Block a user