{"id":"741926e1-1ace-4a3b-a8ce-3f24f7e07c87","shortId":"dRG7zc","kind":"skill","title":"azure-monitor-query-py","tagline":"Azure Monitor Query SDK for Python. Use for querying Log Analytics workspaces and Azure Monitor metrics.","description":"# Azure Monitor Query SDK for Python\n\nQuery logs and metrics from Azure Monitor and Log Analytics workspaces.\n\n## Installation\n\n```bash\npip install azure-monitor-query\n```\n\n## Environment Variables\n\n```bash\n# Log Analytics\nAZURE_LOG_ANALYTICS_WORKSPACE_ID=<workspace-id>\n\n# Metrics\nAZURE_METRICS_RESOURCE_URI=/subscriptions/<sub>/resourceGroups/<rg>/providers/<provider>/<type>/<name>\n```\n\n## Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\n\ncredential = DefaultAzureCredential()\n```\n\n## Logs Query Client\n\n### Basic Query\n\n```python\nfrom azure.monitor.query import LogsQueryClient\nfrom datetime import timedelta\n\nclient = LogsQueryClient(credential)\n\nquery = \"\"\"\nAppRequests\n| where TimeGenerated > ago(1h)\n| summarize count() by bin(TimeGenerated, 5m), ResultCode\n| order by TimeGenerated desc\n\"\"\"\n\nresponse = client.query_workspace(\n    workspace_id=os.environ[\"AZURE_LOG_ANALYTICS_WORKSPACE_ID\"],\n    query=query,\n    timespan=timedelta(hours=1)\n)\n\nfor table in response.tables:\n    for row in table.rows:\n        print(row)\n```\n\n### Query with Time Range\n\n```python\nfrom datetime import datetime, timezone\n\nresponse = client.query_workspace(\n    workspace_id=workspace_id,\n    query=\"AppRequests | take 10\",\n    timespan=(\n        datetime(2024, 1, 1, tzinfo=timezone.utc),\n        datetime(2024, 1, 2, tzinfo=timezone.utc)\n    )\n)\n```\n\n### Convert to DataFrame\n\n```python\nimport pandas as pd\n\nresponse = client.query_workspace(workspace_id, query, timespan=timedelta(hours=1))\n\nif response.tables:\n    table = response.tables[0]\n    df = pd.DataFrame(data=table.rows, columns=[col.name for col in table.columns])\n    print(df.head())\n```\n\n### Batch Query\n\n```python\nfrom azure.monitor.query import LogsBatchQuery\n\nqueries = [\n    LogsBatchQuery(workspace_id=workspace_id, query=\"AppRequests | take 5\", timespan=timedelta(hours=1)),\n    LogsBatchQuery(workspace_id=workspace_id, query=\"AppExceptions | take 5\", timespan=timedelta(hours=1))\n]\n\nresponses = client.query_batch(queries)\n\nfor response in responses:\n    if response.tables:\n        print(f\"Rows: {len(response.tables[0].rows)}\")\n```\n\n### Handle Partial Results\n\n```python\nfrom azure.monitor.query import LogsQueryStatus\n\nresponse = client.query_workspace(workspace_id, query, timespan=timedelta(hours=24))\n\nif response.status == LogsQueryStatus.PARTIAL:\n    print(f\"Partial results: {response.partial_error}\")\nelif response.status == LogsQueryStatus.FAILURE:\n    print(f\"Query failed: {response.partial_error}\")\n```\n\n## Metrics Query Client\n\n### Query Resource Metrics\n\n```python\nfrom azure.monitor.query import MetricsQueryClient\nfrom datetime import timedelta\n\nmetrics_client = MetricsQueryClient(credential)\n\nresponse = metrics_client.query_resource(\n    resource_uri=os.environ[\"AZURE_METRICS_RESOURCE_URI\"],\n    metric_names=[\"Percentage CPU\", \"Network In Total\"],\n    timespan=timedelta(hours=1),\n    granularity=timedelta(minutes=5)\n)\n\nfor metric in response.metrics:\n    print(f\"{metric.name}:\")\n    for time_series in metric.timeseries:\n        for data in time_series.data:\n            print(f\"  {data.timestamp}: {data.average}\")\n```\n\n### Aggregations\n\n```python\nfrom azure.monitor.query import MetricAggregationType\n\nresponse = metrics_client.query_resource(\n    resource_uri=resource_uri,\n    metric_names=[\"Requests\"],\n    timespan=timedelta(hours=1),\n    aggregations=[\n        MetricAggregationType.AVERAGE,\n        MetricAggregationType.MAXIMUM,\n        MetricAggregationType.MINIMUM,\n        MetricAggregationType.COUNT\n    ]\n)\n```\n\n### Filter by Dimension\n\n```python\nresponse = metrics_client.query_resource(\n    resource_uri=resource_uri,\n    metric_names=[\"Requests\"],\n    timespan=timedelta(hours=1),\n    filter=\"ApiName eq 'GetBlob'\"\n)\n```\n\n### List Metric Definitions\n\n```python\ndefinitions = metrics_client.list_metric_definitions(resource_uri)\nfor definition in definitions:\n    print(f\"{definition.name}: {definition.unit}\")\n```\n\n### List Metric Namespaces\n\n```python\nnamespaces = metrics_client.list_metric_namespaces(resource_uri)\nfor ns in namespaces:\n    print(ns.fully_qualified_namespace)\n```\n\n## Async Clients\n\n```python\nfrom azure.monitor.query.aio import LogsQueryClient, MetricsQueryClient\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def query_logs():\n    credential = DefaultAzureCredential()\n    client = LogsQueryClient(credential)\n    \n    response = await client.query_workspace(\n        workspace_id=workspace_id,\n        query=\"AppRequests | take 10\",\n        timespan=timedelta(hours=1)\n    )\n    \n    await client.close()\n    await credential.close()\n    return response\n```\n\n## Common Kusto Queries\n\n```kusto\n// Requests by status code\nAppRequests\n| summarize count() by ResultCode\n| order by count_ desc\n\n// Exceptions over time\nAppExceptions\n| summarize count() by bin(TimeGenerated, 1h)\n\n// Slow requests\nAppRequests\n| where DurationMs > 1000\n| project TimeGenerated, Name, DurationMs\n| order by DurationMs desc\n\n// Top errors\nAppExceptions\n| summarize count() by ExceptionType\n| top 10 by count_\n```\n\n## Client Types\n\n| Client | Purpose |\n|--------|---------|\n| `LogsQueryClient` | Query Log Analytics workspaces |\n| `MetricsQueryClient` | Query Azure Monitor metrics |\n\n## Best Practices\n\n1. **Use timedelta** for relative time ranges\n2. **Handle partial results** for large queries\n3. **Use batch queries** when running multiple queries\n4. **Set appropriate granularity** for metrics to reduce data points\n5. **Convert to DataFrame** for easier data analysis\n6. **Use aggregations** to summarize metric data\n7. **Filter by dimensions** to narrow metric results\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","monitor","query","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-azure-monitor-query-py","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-monitor-query-py","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (6,046 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:32.903Z","embedding":null,"createdAt":"2026-04-18T21:32:55.829Z","updatedAt":"2026-04-24T18:50:32.903Z","lastSeenAt":"2026-04-24T18:50:32.903Z","tsv":"'/providers':64 '/resourcegroups':63 '/subscriptions':62 '0':190,252 '1':123,158,159,164,185,223,236,329,373,396,473,548 '10':154,469,529 '1000':512 '1h':95,506 '2':165,555 '2024':157,163 '24':271 '3':562 '4':570 '5':219,232,333,580 '5m':101 '6':588 '7':595 'action':615 'aggreg':354,374,590 'ago':94 'analysi':587 'analyt':16,37,51,54,115,539 'apinam':398 'appexcept':230,500,523 'applic':609 'apprequest':91,152,217,467,488,509 'appropri':572 'ask':653 'async':437,449 'authent':65 'await':459,474,476 'azur':2,6,19,22,33,44,52,58,113,315,543 'azure-monitor-queri':43 'azure-monitor-query-pi':1 'azure.identity':68 'azure.identity.aio':446 'azure.monitor.query':80,207,259,298,357 'azure.monitor.query.aio':441 'bash':40,49 'basic':76 'batch':203,239,564 'best':546 'bin':99,504 'boundari':661 'clarif':655 'clear':628 'client':75,87,292,306,438,455,532,534 'client.close':475 'client.query':108,145,177,238,263,460 'code':487 'col':198 'col.name':196 'column':195 'common':480 'convert':168,581 'count':97,490,495,502,525,531 'cpu':322 'credenti':71,89,308,453,457 'credential.close':477 'criteria':664 'data':193,347,578,586,594 'data.average':353 'data.timestamp':352 'datafram':170,583 'datetim':84,140,142,156,162,302 'def':450 'defaultazurecredenti':70,72,448,454 'definit':403,405,408,412,414 'definition.name':417 'definition.unit':418 'desc':106,496,520 'describ':616,632 'df':191 'df.head':202 'dimens':381,598 'durationm':511,516,519 'easier':585 'elif':281 'environ':47,644 'environment-specif':643 'eq':399 'error':280,289,522 'except':497 'exceptiontyp':527 'execut':611 'expert':649 'f':248,276,285,339,351,416 'fail':287 'filter':379,397,596 'getblob':400 'granular':330,573 'handl':254,556 'hour':122,184,222,235,270,328,372,395,472 'id':56,111,117,148,150,180,213,215,226,228,266,463,465 'import':69,81,85,141,172,208,260,299,303,358,442,447 'input':658 'instal':39,42 'kusto':481,483 'larg':560 'len':250 'limit':620 'list':401,419 'log':15,29,36,50,53,73,114,452,538 'logsbatchqueri':209,211,224 'logsquerycli':82,88,443,456,536 'logsquerystatus':261 'logsquerystatus.failure':283 'logsquerystatus.partial':274 'match':629 'metric':21,31,57,59,290,295,305,316,319,335,367,390,402,407,420,425,545,575,593,601 'metric.name':340 'metric.timeseries':345 'metricaggregationtyp':359 'metricaggregationtype.average':375 'metricaggregationtype.count':378 'metricaggregationtype.maximum':376 'metricaggregationtype.minimum':377 'metrics_client.list':406,424 'metrics_client.query':310,361,384 'metricsquerycli':300,307,444,541 'minut':332 'miss':666 'monitor':3,7,20,23,34,45,544 'multipl':568 'name':320,368,391,515 'namespac':421,423,426,432,436 'narrow':600 'network':323 'ns':430 'ns.fully':434 'order':103,493,517 'os.environ':112,314 'output':638 'overview':619 'panda':173 'partial':255,277,557 'pd':175 'pd.dataframe':192 'percentag':321 'permiss':659 'pip':41 'point':579 'practic':547 'print':132,201,247,275,284,338,350,415,433 'project':513 'purpos':535 'py':5 'python':11,27,66,78,138,171,205,257,296,355,382,404,422,439 'qualifi':435 'queri':4,8,14,24,28,46,74,77,90,118,119,134,151,181,204,210,216,229,240,267,286,291,293,451,466,482,537,542,561,565,569 'rang':137,554 'reduc':577 'relat':552 'request':369,392,484,508 'requir':657 'resourc':60,294,311,312,317,362,363,365,385,386,388,409,427 'respons':107,144,176,237,242,244,262,309,360,383,458,479 'response.metrics':337 'response.partial':279,288 'response.status':273,282 'response.tables':127,187,189,246,251 'result':256,278,558,602 'resultcod':102,492 'return':478 'review':650 'row':129,133,249,253 'run':567 'safeti':660 'scope':631 'sdk':9,25 'seri':343 'set':571 'skill':607,623 'skill-azure-monitor-query-py' 'slow':507 'source-sickn33' 'specif':645 'status':486 'stop':651 'substitut':641 'success':663 'summar':96,489,501,524,592 'tabl':125,188 'table.columns':200 'table.rows':131,194 'take':153,218,231,468 'task':627 'test':647 'time':136,342,499,553 'time_series.data':349 'timedelta':86,121,183,221,234,269,304,327,331,371,394,471,550 'timegener':93,100,105,505,514 'timespan':120,155,182,220,233,268,326,370,393,470 'timezon':143 'timezone.utc':161,167 'top':521,528 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':325 'treat':636 'type':533 'tzinfo':160,166 'uri':61,313,318,364,366,387,389,410,428 'use':12,549,563,589,605,621 'valid':646 'variabl':48 'workflow':613 'workspac':17,38,55,109,110,116,146,147,149,178,179,212,214,225,227,264,265,461,462,464,540","prices":[{"id":"4b4a3f03-57cb-47ff-94f0-a29be7d215ca","listingId":"741926e1-1ace-4a3b-a8ce-3f24f7e07c87","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:32:55.829Z"}],"sources":[{"listingId":"741926e1-1ace-4a3b-a8ce-3f24f7e07c87","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-monitor-query-py","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-monitor-query-py","isPrimary":false,"firstSeenAt":"2026-04-18T21:32:55.829Z","lastSeenAt":"2026-04-24T18:50:32.903Z"}],"details":{"listingId":"741926e1-1ace-4a3b-a8ce-3f24f7e07c87","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-monitor-query-py","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"1c6af8afe642746bf70d82a34266467c0d52229b","skill_md_path":"skills/azure-monitor-query-py/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-monitor-query-py"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-monitor-query-py","description":"Azure Monitor Query SDK for Python. Use for querying Log Analytics workspaces and Azure Monitor metrics."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-monitor-query-py"},"updatedAt":"2026-04-24T18:50:32.903Z"}}