Skip to content

Commit

Permalink
adding query fix for nodepool
Browse files Browse the repository at this point in the history
taken from #1023
  • Loading branch information
austonli committed Apr 14, 2021
1 parent c70ff50 commit 3327e16
Showing 1 changed file with 4 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@
"showAnalytics": true,
"title": "Cluster Status Summary",
"timeContext": {
"durationMs": 0
"durationMs": 1800000
},
"timeContextFromParameter": "timeRange",
"queryType": 0,
Expand Down Expand Up @@ -1341,14 +1341,14 @@
"type": 3,
"content": {
"version": "KqlItem/1.0",
"query": "let trendBinSize=1m;\r\nlet precision = 2;\r\nlet KPI = KubeNodeInventory\r\n| where isnotempty(Labels)\r\n| extend LabelsJSON = parse_json(Labels)[0]\r\n| extend NodePool = iff (isnotempty(LabelsJSON.agentpool), tostring(LabelsJSON.agentpool), \"Unknown\")\r\n| extend OS = iff(isnotempty(LabelsJSON.[\"beta.kubernetes.io/os\"]), tostring(LabelsJSON.[\"beta.kubernetes.io/os\"]), \"Unknown\")\r\n| project TimeGenerated, _ResourceId, NodePool, Computer, OS\r\n| summarize arg_max(TimeGenerated, *) by _ResourceId, NodePool, Computer, OS\r\n| project-away TimeGenerated;\r\nlet PerfTable = Perf\r\n| where ObjectName == \"K8SNode\"\r\n| where CounterName in (\"cpuUsageNanoCores\", \"cpuCapacityNanoCores\", \"memoryWorkingSetBytes\", \"memoryCapacityBytes\")\r\n| project TimeGenerated, _ResourceId, Computer, ObjectName, CounterName, CounterValue ;\r\nlet ExtendedPerfTable = PerfTable | join kind=leftouter KPI on _ResourceId, Computer | project-away Computer1, _ResourceId1; \r\nlet calculateUtilization = (usageCounterName: string, capacityCounterName: string, usageObject: string)\r\n{\r\nlet filterMetric = (counterName: string, objectName: string) { \r\n ExtendedPerfTable\r\n | where ObjectName == objectName and CounterName == counterName\r\n | summarize CounterValue = avg(CounterValue) by _ResourceId, NodePool, OS, bin(TimeGenerated, trendBinSize) \r\n };\r\n filterMetric(usageCounterName, usageObject)\r\n| project-rename Usage = CounterValue\r\n| join kind=leftouter\r\n(\r\n filterMetric(capacityCounterName, usageObject)\r\n | project-rename Available = CounterValue\r\n) on _ResourceId, NodePool, OS, TimeGenerated\r\n| project _ResourceId, NodePool, OS, TimeGenerated, pct = iff(isempty(Available) or isnull(Available), 0.0, round((100 * Usage)/Available, precision)) \r\n| summarize percentiles(pct, 50, 90, 95, 99), Max = max(pct) by _ResourceId, NodePool, OS\r\n};\r\nlet utilizationTable = calculateUtilization('cpuUsageNanoCores', 'cpuCapacityNanoCores', 'K8SNode')\r\n| project-rename ['CPU P50'] = percentile_pct_50, ['CPU P90'] = percentile_pct_90, ['CPU P95'] = percentile_pct_95, ['CPU P99'] = percentile_pct_99, ['CPU Max'] = Max\r\n| join\r\n( calculateUtilization('memoryWorkingSetBytes', 'memoryCapacityBytes','K8SNode')\r\n | project-rename ['Memory P50'] = percentile_pct_50, ['Memory P90'] = percentile_pct_90, ['Memory P95'] = percentile_pct_95, ['Memory P99'] = percentile_pct_99, ['Memory Max'] = Max\r\n)\r\non _ResourceId, OS;\r\nutilizationTable\r\n| project-away _ResourceId1, OS1, NodePool1\r\n| project-rename Cluster=_ResourceId\r\n| extend OSType = iif(OS =~'linux','🐧 ','🖥️')\r\n| project Cluster, NodePool, OSType, ['CPU P50'],['CPU P90'],['CPU P95'], ['CPU P99'], ['CPU Max'], ['Memory P50'],['Memory P90'],['Memory P95'], ['Memory P99'], ['Memory Max'], OS\r\n| extend Name = tostring(split(Cluster, \"/\")[-1])\r\n| extend DisplayValue = ['Memory P50']\r\n| sort by Name asc , NodePool asc\r\n ",
"query": "let trendBinSize=1m;\r\nlet precision = 2;\r\nlet KPI = KubeNodeInventory\r\n| where isnotempty(Labels)\r\n| extend LabelsJSON = parse_json(Labels)[0]\r\n| extend NodePool = iff (isnotempty(LabelsJSON.agentpool), tostring(LabelsJSON.agentpool), \"Unknown\")\r\n| extend OS = iff(isnotempty(LabelsJSON.[\"beta.kubernetes.io/os\"]), tostring(LabelsJSON.[\"beta.kubernetes.io/os\"]), \"Unknown\")\r\n| project TimeGenerated, _ResourceId, NodePool, Computer, OS\r\n| summarize arg_max(TimeGenerated, *) by _ResourceId, NodePool, Computer, OS\r\n| project-away TimeGenerated;\r\nlet PerfTable = Perf\r\n| where ObjectName == \"K8SNode\"\r\n| where CounterName in (\"cpuUsageNanoCores\", \"cpuCapacityNanoCores\", \"memoryWorkingSetBytes\", \"memoryCapacityBytes\")\r\n| project TimeGenerated, _ResourceId, Computer, ObjectName, CounterName, CounterValue ;\r\nlet ExtendedPerfTable = PerfTable | join kind=leftouter KPI on _ResourceId, Computer | project-away Computer1, _ResourceId1; \r\nlet calculateUtilization = (usageCounterName: string, capacityCounterName: string, usageObject: string)\r\n{\r\nlet filterMetric = (counterName: string, objectName: string) { \r\n ExtendedPerfTable\r\n | where ObjectName == objectName and CounterName == counterName\r\n | summarize CounterValue = avg(CounterValue) by _ResourceId, NodePool, OS, bin(TimeGenerated, trendBinSize) \r\n };\r\n filterMetric(usageCounterName, usageObject)\r\n| project-rename Usage = CounterValue\r\n| join kind=leftouter\r\n(\r\n filterMetric(capacityCounterName, usageObject)\r\n | project-rename Available = CounterValue\r\n) on _ResourceId, NodePool, OS, TimeGenerated\r\n| project _ResourceId, NodePool, OS, TimeGenerated, pct = iff(isempty(Available) or isnull(Available), 0.0, round((100 * Usage)/Available, precision)) \r\n| summarize percentiles(pct, 50, 90, 95, 99), Max = max(pct) by _ResourceId, NodePool, OS\r\n};\r\nlet utilizationTable = calculateUtilization('cpuUsageNanoCores', 'cpuCapacityNanoCores', 'K8SNode')\r\n| project-rename ['CPU P50'] = percentile_pct_50, ['CPU P90'] = percentile_pct_90, ['CPU P95'] = percentile_pct_95, ['CPU P99'] = percentile_pct_99, ['CPU Max'] = Max\r\n| join\r\n( calculateUtilization('memoryWorkingSetBytes', 'memoryCapacityBytes','K8SNode')\r\n | project-rename ['Memory P50'] = percentile_pct_50, ['Memory P90'] = percentile_pct_90, ['Memory P95'] = percentile_pct_95, ['Memory P99'] = percentile_pct_99, ['Memory Max'] = Max\r\n)\r\non _ResourceId, OS, NodePool;\r\nutilizationTable\r\n| project-away _ResourceId1, OS1, NodePool1\r\n| project-rename Cluster=_ResourceId\r\n| extend OSType = iif(OS =~'linux','🐧 ','🖥️')\r\n| project Cluster, NodePool, OSType, ['CPU P50'],['CPU P90'],['CPU P95'], ['CPU P99'], ['CPU Max'], ['Memory P50'],['Memory P90'],['Memory P95'], ['Memory P99'], ['Memory Max'], OS\r\n| extend Name = tostring(split(Cluster, \"/\")[-1])\r\n| extend DisplayValue = ['Memory P50']\r\n| sort by Name asc , NodePool asc\r\n ",
"size": 0,
"aggregation": 3,
"showAnnotations": true,
"showAnalytics": true,
"title": "Average Cluster {metricName} Utilization % By NodePool",
"timeContext": {
"durationMs": 1800000
"durationMs": 0
},
"timeContextFromParameter": "timeRange",
"queryType": 0,
Expand Down Expand Up @@ -1426,7 +1426,7 @@
"showAnalytics": true,
"title": "Average Cluster CPU Utilization% - Select a node to see more details",
"timeContext": {
"durationMs": 0
"durationMs": 1800000
},
"timeContextFromParameter": "timeRange",
"exportedParameters": [
Expand Down

0 comments on commit 3327e16

Please sign in to comment.