[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-57a5c72a-4236-4a5a-b8d8-7d54e7476535":3,"$fjf8mcgA0gl674JyvnYAnIaAcXT8f0OJBohIoh6I9L14":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"57a5c72a-4236-4a5a-b8d8-7d54e7476535","azure-monitor-query-py","Azure Monitor 查询 SDK for Python。用于查询日志分析工作区和 Azure Monitor 指标。","cat_coding_devops","mod_coding","sickn33,coding","---\nname: azure-monitor-query-py\ndescription: Azure Monitor Query SDK for Python. Use for querying Log Analytics workspaces and Azure Monitor metrics.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# 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=\u003Cworkspace-id>\n\n# Metrics\nAZURE_METRICS_RESOURCE_URI=\u002Fsubscriptions\u002F\u003Csub>\u002FresourceGroups\u002F\u003Crg>\u002Fproviders\u002F\u003Cprovider>\u002F\u003Ctype>\u002F\u003Cname>\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\u002F\u002F Requests by status code\nAppRequests\n| summarize count() by ResultCode\n| order by count_ desc\n\n\u002F\u002F Exceptions over time\nAppExceptions\n| summarize count() by bin(TimeGenerated, 1h)\n\n\u002F\u002F Slow requests\nAppRequests\n| where DurationMs > 1000\n| project TimeGenerated, Name, DurationMs\n| order by DurationMs desc\n\n\u002F\u002F 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.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,74,1513,"2026-05-16 13:07:20",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"编程开发","coding","mdi-code-braces","代码生成、调试、审查，提升开发效率",2,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"DevOps","devops","mdi-cog-outline","CI\u002FCD、容器化、部署运维",3,162,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"9807674a-8f24-4228-b6ea-be61780d3283","1.0.0","azure-monitor-query-py.zip",2183,"uploads\u002Fskills\u002F57a5c72a-4236-4a5a-b8d8-7d54e7476535\u002Fazure-monitor-query-py.zip","b45d38d5f680671384ea800399dfd3e155f5dfa7117f134432d32fd391d46bf7","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":6260}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]