Etkilenen kaynaklar için Azure Kaynak Grafı örnek sorguları

Bu sayfa, Azure Hizmet Durumu Etkilenen kaynaklar için Azure Kaynak Grafı örnek sorgularından oluşan bir koleksiyondur.

Uyarı

Her sorgudan sonra, güncelleştirilmiş sonuçları genel olarak 5 dakika içinde görmeniz gerekir.

Genel Bakış

Bu sayfa, Azure Kaynak Grafı aracılığıyla Kusto Sorgu Dili'ni (KQL) kullanarak Azure hizmetlerinizin ve kaynaklarınızın durumunu izlemenize ve anlamanıza yardımcı olur.

Azure Hizmet Durumu için özel olarak örnek sorgular içerir.

Etkilenen kaynak örneği sorguları

Planlı bakımdan etkilenen onaylanmış kaynaklar

Genel Bakış Bu belgede, Planlı Bakımı Azure Hizmet Durumu verilerle ilişkilendirmek için Azure Kaynak Grafı (ARG) sorgularının nasıl kullanılacağı açıklanmaktadır. Birlikte, etkilenen kaynakları belirler, bakım durumunu belirler ve herhangi bir eylem gerekip gerekmediğini belirtir.


Sorgu 1 – Bakım güncelleştirmeleri ve etkilenen kaynaklar

Amaç

Bu sorgu belirli bir Planlı Bakım bildirim kimliğiyle ilişkili tüm kaynakları tanımlar.

Veri kaynakları

  • maintenanceresources (microsoft.maintenance/updates)
  • servicehealthresources (microsoft.resourcehealth/events/impactedresources)

Çıkış

Bakım durumlarını gösteren etkilenen kaynakların konsolide listesi.

maintenanceresources
| where type == 'microsoft.maintenance/updates'
| extend p = parse_json(properties)
| mv-expand d = p.value
| where tostring(d.notificationId) == 'PYN_-ZL8'
| extend
    targetResourceId = tolower(name),
    plannedMaintenanceId = tostring(d.notificationId),
    status = tostring(d.status),
    resourceGroup = tostring(
        split(split(id, '/resourceGroups/')[1], '/')[0]
    ),
    resourceType = strcat(
        tostring(split(split(id, '/providers/')[1], '/')[0]),
        '/',
        tostring(split(split(id, '/providers/')[1], '/')[1])
    )
| project targetResourceId, subscriptionId, resourceGroup, resourceType, plannedMaintenanceId, status, source = 'Maintenance'
| union (
servicehealthresources
| where type =~ 'microsoft.resourcehealth/events/impactedresources'
| where id contains 'PYN_-ZL8'
| extend p = parse_json(properties)
| extend
    targetResourceId = tolower(tostring(p.targetResourceId)),
    status = tostring(p.status),
    resourceGroup = tostring(split(split(tostring(p.targetResourceId), '/resourceGroups/')[1], '/')[0]),
    resourceType = strcat(
        tostring(split(split(tostring(p.targetResourceId), '/providers/')[1], '/')[0]),
        '/',
        tostring(split(split(tostring(p.targetResourceId), '/providers/')[1], '/')[1])
    )
| project targetResourceId, subscriptionId, resourceGroup, resourceType, status
)
| project subscriptionId, targetResourceId, resourceGroup, resourceType, plannedMaintenanceId, status


Sorgu 2 – Hizmet Durumu olayından kaynak çözümlemesine

Amaç

Hizmet Durumu olayından başlayarak, bakım altındaki konakları, VM'leri veya VMSS örneklerini tam olarak belirleyin ve müşteri düzeltmesi (Bakım Uzantısı) gerekip gerekmediğini belirleyin.

Veri kaynakları

  • servicehealthresources (events ve impactedresources)
  • maintenanceresources (microsoft.maintenance/updates)

Çıkış

Bakım durumunu ve gerekli kullanıcı eylemini gösteren kaynak tarafından çözümlenen bir görünüm.

servicehealthresources
| where type =~ 'microsoft.resourcehealth/events'
| where name contains '1J14-8LG'
| project plannedMaintenanceID = tostring(properties.ExternalIncidentId)
| join kind=inner (
maintenanceresources
| where ['type'] == 'microsoft.maintenance/updates'
| extend prop = parse_json(properties)
| mv-expand Value = prop.value
| where tostring(Value.maintenanceScope) == 'Host'
| extend plannedMaintenanceID = tostring(Value.properties.plannedMaintenanceId)
| extend name = tolower(name)
| extend controlledMaintenanceEndTime = tostring(Value.endTimeUtc)
| extend status = tostring(Value.properties.plannedMaintenanceStatus)
| extend isVmssInstance = name has '/virtualmachinescalesets/'
| extend isHost = name has '/hostgroups/hosts/'
| extend vmssName = extract(@'/virtualmachinescalesets/([^/]+)/', 1, name)
| extend vmssInstance = extract(@'/virtualmachines/([^/]+)$', 1, name)
| extend vmName = extract(@'/virtualmachines/([^/]+)$', 1, name)
| extend hostName = extract(@'/hosts/([^/]+)$', 1, name)
| extend targetResourceName =
    iff(isHost, hostName,
        iff(isVmssInstance, strcat(vmssName, '_', vmssInstance), vmName))
| extend targetResourceType =
    iff(isVmssInstance,
        'microsoft.compute/virtualmachinescalesets/virtualmachines',
        iff(isHost,
            'microsoft.compute/hostgroups/hosts',
            'microsoft.compute/virtualmachines'))
| extend needsMaintenanceExtension =
    not(status in ('InProgress', 'RetryLater', 'NoUpdatesPending', 'Completed'))
| extend targetExtensionName =
    iff(needsMaintenanceExtension, 'Microsoft_Azure_Maintenance', '')
| extend targetBladeName =
    iff(needsMaintenanceExtension, 'PlannedMaintenance.ReactView', '')
| extend targetParameters =
    iff(needsMaintenanceExtension,
        strcat('{\"id\":\"', name, '\"}'),
        '')
) on plannedMaintenanceID
| project
    targetResourceId = name,
    targetResourceType,
    targetRegion = location,
    targetResourceGroup = resourceGroup,
    subscriptionId,
    plannedMaintenanceID,
    targetResourceName ,
    controlledMaintenanceEndTime,
    status,
    targetExtensionName =
        iff(
            status in ('InProgress','RetryLater','NoUpdatesPending','Completed'),
            '',
            'Microsoft_Azure_Maintenance'
        ),
    targetBladeName =
        iff(
            status in ('InProgress','RetryLater','NoUpdatesPending','Completed'),
            '',
            'PlannedMaintenance.ReactView'
        ),
    targetParameters =
        iff(
            status in ('InProgress','RetryLater','NoUpdatesPending','Completed'),
            '',
            targetParameters
        )
| union (
    servicehealthresources
    | where type =~ 'microsoft.resourcehealth/events/impactedresources'
    | where id contains '1J14-8LG'
    | extend p = parse_json(properties)
    | project  targetResourceId = tostring(p.targetResourceId),targetResourceType = tostring(p.targetResourceType), targetResourceName=tostring(p.resourceName),targetRegion=tostring(p.targetRegion), subscriptionId)
| project targetResourceId, targetResourceType, targetResourceName, targetRegion,subscriptionId,plannedMaintenanceID,status

Diğer olay türleri için onaylanan etkilenen kaynaklar

Bu sorgu, erişilen tüm aboneliklerde hizmet sorunlarından (kesintiler) ve Hizmet Durumu olaylarından etkilenen tüm kaynakların listesini bulur ve döndürür.

ServiceHealthResources
| where type == "microsoft.resourcehealth/events/impactedresources"
| extend TrackingId = split(split(id, "/events/", 1)[0], "/impactedResources", 0)[0]
| extend p = parse_json(properties)
| project subscriptionId, TrackingId, resourceName= p.resourceName, resourceGroup=p.resourceGroup, resourceType=p.targetResourceType, details = p, id
az graph query -q "ServiceHealthResources | where type == 'microsoft.resourcehealth/events/impactedresources' | extend TrackingId = split(split(id, '/events/', 1)[0], '/impactedResources', 0)[0] | extend p = parse_json(properties) | project subscriptionId, TrackingId, resourceName= p.resourceName, resourceGroup=p.resourceGroup, resourceType=p.targetResourceType, details = p, id"

Daha fazla ayrıntı içeren onaylanmış etkilenen kaynaklar

Bu sorgu, eriştiğiniz aboneliklerin tümünde kesintiler gibi Service Health sorunlarından etkilenen tüm kaynakları getirir. Ayrıca tablodan resources ek ayrıntılar da içerir.

servicehealthresources
| where type == "microsoft.resourcehealth/events/impactedresources"
| extend TrackingId = split(split(id, "/events/", 1)[0], "/impactedResources", 0)[0]
| extend p = parse_json(properties)
| project subscriptionId, TrackingId, targetResourceId= tostring(p.targetResourceId), details = p
| join kind=inner (
    resources
    )
    on $left.targetResourceId == $right.id
az graph query -q "ServiceHealthResources | where type == 'microsoft.resourcehealth/events/impactedresources' | extend TrackingId = split(split(id, '/events/', 1)[0], '/impactedResources', 0)[0] | extend p =  parse_json(properties) | project subscriptionId, TrackingId, targetResourceId = tostring(p.targetResourceId), details = p | join kind=inner (resources) on $left.targetResourceId == $right.id"

Sonraki Adımlar