Jak zawsze teoria jest jasna. W tym blogu łączymy teorię z praktyką i pokazujemy kiedy jest… inaczej:) Jak się okazuje, czasem bez Support’u nie poradzisz.
Wyzwanie:
- Korzystasz z App Service Enviroment.
- Chcesz monitorować swoje środowisko ASE z narzędzia, które dane o stanie usługi może pobrać tylko przez REST API. (np. PRTG albo Twoje własne narzędzie)
- Udało Ci się dotrzeć do artykułu o tym jak monitorować usługi w Azure dzięki REST API. Napisałeś skrypt, stworzyłeś w Azure AD aplikację, napisałeś kod. Jeśli będziesz miał z tym problem, napisz, dam Ci swój skrypt który to wszystko robi naraz.
- I teraz wydaje się, że jesteśmy już u celu…bo w przypadku App Service (czyli nie ASE) wszystko działa idealnie. Przykład z mojego środowiska.
- Kiedy jednak to sam podejście zastosujcie do ASE, skrypt zadziała ale wynik Was nieco zaskoczy – same 0.0 niezależnie o jaki parametr zapytacie.
Gdzie tkwi problem? Odpowiedź inżyniera mnie nieco zaskoczyła. Otóż wszystkiemu winne jest API, o które poprosiliśmy a dokładnie ‚provider’: microsoft.insights/metrics.
https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$resourceName/providers/microsoft.insights/metrics
W przypadku AppService jest on zaimplementowany, w przypadku ASE nie i trzeba skorzystać z nieco starszego dostawcy (aka ‚providera’ ;)) a mianowicie wprost zapytać o wybraną metrykę jak poniżej.
Teraz wszystkie parametry zostaną idealnie pobrane.
$startTime = "2016-12-29" $endTime = "2016-12-31" $apiVersion = "2014-04-01" $filterValue = "(name.value eq 'CpuTime') and startTime eq $startTime and endTime eq $endTime and timeGrain eq duration'PT1H'" $request = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$resourceName/metrics?api-version=$apiVersion&`$filter=$filterValue" (Invoke-RestMethod -Uri $request -Headers $authHeader -Method Get -Verbose).Value | ConvertTo-Json
Powodzenia!