Azure Metadata Service: Schemalagda händelser för virtuella Windows-datorer

Gäller för: ✔️ Virtuella Windows-datorer ✔️ – flexibla skalningsuppsättningar ✔️ Enhetliga skalningsuppsättningar

Schemalagda händelser är en Azure Metadata Service som ger ditt program tid att förbereda underhåll av virtuella datorer (VM). Den innehåller information om kommande underhållshändelser (till exempel omstart) så att ditt program kan förbereda sig och begränsa avbrott. Den är tillgänglig för alla typer av Azures virtuella datorer, inklusive PaaS och IaaS på både Windows och Linux.

Information om schemalagda händelser i Linux finns i Schemalagda händelser för virtuella Linux-datorer.

Anteckning

Schemalagda händelser är allmänt tillgängliga i alla Azure-regioner. Den senaste versionsinformationen finns i Tillgänglighet för version och region .

Varför ska jag använda schemalagda händelser?

Många program kan dra nytta av tiden att förbereda sig inför underhåll av virtuella datorer. Tiden kan användas för att utföra programspecifika uppgifter som förbättrar tillgänglighet, tillförlitlighet och användbarhet, till exempel:

  • Kontrollpunkt och återställning.
  • Anslutningstömning.
  • Primär replikeringsredundans.
  • Borttagning från en lastbalanseringspool.
  • Händelseloggning.
  • Korrekt avstängning.

Med schemalagda händelser kan ditt program identifiera när underhåll ska ske och utföra uppgifter för att begränsa dess påverkan.

Schemalagda händelser tillhandahåller händelser i följande användningsfall:

Grunderna

Metadata Service visar information om hur du kör virtuella datorer med hjälp av en REST-slutpunkt som är tillgänglig inifrån den virtuella datorn. Informationen är tillgänglig via en icke-utfällbar IP-adress så att den inte exponeras utanför den virtuella datorn.

Omfång

Schemalagda händelser levereras till:

  • Fristående virtuella datorer.
  • Alla virtuella datorer i en Azure-molntjänst (klassisk).
  • Alla virtuella datorer i en tillgänglighetsuppsättning.
  • Alla virtuella datorer i en tillgänglighetszon.
  • Alla virtuella datorer i en skalningsuppsättnings placeringsgrupp.

Anteckning

Schemalagda händelser för alla virtuella datorer i en klientorganisation för infrastrukturkontrollanter (FC) levereras till alla virtuella datorer i en FC-klientorganisation. FC-klientorganisationen motsvarar en fristående virtuell dator, en hel molntjänst, en hel tillgänglighetsuppsättning och en placeringsgrupp för en VM-skalningsuppsättning (VMSS) oavsett användning av tillgänglighetszon.

Därför kontrollerar du fältet Resources i händelsen för att identifiera vilka virtuella datorer som påverkas.

Slutpunktsidentifiering

För VNET-aktiverade virtuella datorer är Metadata Service tillgängligt från en statisk icke-utfällbar IP-adress, 169.254.169.254. Den fullständiga slutpunkten för den senaste versionen av Schemalagda händelser är:

http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01

Om den virtuella datorn inte skapas i ett virtuellt nätverk, standardfallen för molntjänster och klassiska virtuella datorer, krävs ytterligare logik för att identifiera IP-adressen som ska användas. Information om hur du identifierar värdslutpunkten finns i det här exemplet.

Tillgänglighet för version och region

Tjänsten Schemalagda händelser är versionshanterad. Versioner är obligatoriska. den aktuella versionen är 2020-07-01.

Version Versionstyp Regioner Viktig information
2020-07-01 Allmän tillgänglighet Alla
  • Stöd har lagts till för händelsevaraktighet
  • 2019-08-01 Allmän tillgänglighet Alla
  • Stöd har lagts till för EventSource
  • 2019-04-01 Allmän tillgänglighet Alla
  • Stöd har lagts till för händelsebeskrivning
  • 2019-01-01 Allmän tillgänglighet Alla
  • Stöd har lagts till för VM-skalningsuppsättningar EventType "Avsluta"
  • 2017-11-01 Allmän tillgänglighet Alla
  • Stöd har lagts till för avlägsningshändelsetypen "Preempt" för vm med oanvänd kapacitet
  • 2017-08-01 Allmän tillgänglighet Alla
  • Borttagna understreck från resursnamn för virtuella IaaS-datorer har tagits bort
  • Krav på metadatahuvud framtvingas för alla begäranden
  • 2017-03-01 Förhandsgranskning Alla
  • Första utgåvan
  • Anteckning

    Tidigare förhandsversioner av schemalagda händelser hade stöd för {latest} som API-version. Det här formatet stöds inte längre och kommer att bli inaktuellt i framtiden.

    Aktivera och inaktivera schemalagda händelser

    Schemalagda händelser aktiveras för din tjänst första gången du begär händelser. Du bör förvänta dig ett fördröjt svar i ditt första anrop på upp till två minuter.

    Schemalagda händelser inaktiveras för din tjänst om den inte gör en begäran på 24 timmar.

    Användarinitierat underhåll

    Användarinitierat VM-underhåll via Azure-portalen, API, CLI eller PowerShell resulterar i en schemalagd händelse. Sedan kan du testa logiken för underhållsförberedelse i ditt program och programmet kan förbereda sig för användarinitierat underhåll.

    Om du startar om en virtuell dator schemaläggs en händelse med typen Reboot . Om du distribuerar om en virtuell dator schemaläggs en händelse med typen Redeploy . Vanligtvis kan händelser med en användarhändelsekälla godkännas omedelbart för att undvika en fördröjning vid användarinitierade åtgärder.

    Använda API:et

    Sidhuvuden

    När du frågar Metadata Service måste du ange huvudet Metadata:true för att säkerställa att begäran inte oavsiktligt omdirigerades. Huvudet Metadata:true krävs för alla begäranden om schemalagda händelser. Om du inte tar med huvudet i begäran resulterar det i ett "Felaktig begäran"-svar från metadatatjänsten.

    Fråga efter händelser

    Du kan fråga efter schemalagda händelser genom att göra följande anrop:

    Bash-exempel

    curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    PowerShell-exempel

    Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01" | ConvertTo-Json -Depth 64
    

    Python-exempel

    import json
    import requests
    
    metadata_url ="http://169.254.169.254/metadata/scheduledevents"
    header = {'Metadata' : 'true'}
    query_params = {'api-version':'2020-07-01'}
    
    def get_scheduled_events():           
        resp = requests.get(metadata_url, headers = header, params = query_params)
        data = resp.json()
        return data
    
    

    Ett svar innehåller en matris med schemalagda händelser. En tom matris innebär att inga händelser för närvarande är schemalagda. Om det finns schemalagda händelser innehåller svaret en matris med händelser.

    {
        "DocumentIncarnation": {IncarnationID},
        "Events": [
            {
                "EventId": {eventID},
                "EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt" | "Terminate",
                "ResourceType": "VirtualMachine",
                "Resources": [{resourceName}],
                "EventStatus": "Scheduled" | "Started",
                "NotBefore": {timeInUTC},       
                "Description": {eventDescription},
                "EventSource" : "Platform" | "User",
                "DurationInSeconds" : {timeInSeconds},
            }
        ]
    }
    

    Händelseegenskaper

    Egenskap Beskrivning
    Inkarnation av dokument Heltal som ökar när händelsematrisen ändras. Dokument med samma inkarnation innehåller samma händelseinformation och inkarnationen ökas när en händelse ändras.
    EventID Globalt unik identifierare för den här händelsen.

    Exempel:
    • 602d9444-d2cd-49c7-8624-8643e7171297
    Eventtype Påverka den här händelsens orsaker.

    Värden:
    • Freeze: Den virtuella datorn är schemalagd att pausa i några sekunder. Cpu- och nätverksanslutningen kan pausas, men det påverkar inte minnet eller öppna filer.
    • Reboot: Den virtuella datorn är schemalagd för omstart (icke-beständigt minne går förlorat).
    • Redeploy: Den virtuella datorn är schemalagd att flyttas till en annan nod (tillfälliga diskar går förlorade).
    • Preempt: Den virtuella datorn Spot tas bort (tillfälliga diskar går förlorade). Den här händelsen görs tillgänglig på bästa sätt
    • Terminate: Den virtuella datorn är schemalagd att tas bort.
    ResourceType Typ av resurs som den här händelsen påverkar.

    Värden:
    • VirtualMachine
    Resurser Lista över resurser som händelsen påverkar.

    Exempel:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatus Status för den här händelsen.

    Värden:
    • Scheduled: Den här händelsen är schemalagd att starta efter den tid som anges i NotBefore egenskapen.
    • Started: Den här händelsen har startat.
    Ingen Completed eller liknande status har någonsin angetts. Händelsen returneras inte längre när händelsen är klar.
    NotBefore Tid efter vilken den här händelsen kan starta. Händelsen kommer garanterat inte att starta innan den här gången. Kommer att vara tomt om händelsen redan har startats

    Exempel:
    • Mån, 19 sep 2016 18:29:47 GMT
    Description Beskrivning av den här händelsen.

    Exempel:
    • Värdservern underhålls.
    EventSource Initieraren av händelsen.

    Exempel:
    • Platform: Den här händelsen initieras av plattformen.
    • User: Den här händelsen initieras av användaren.
    DurationInSeconds Den förväntade varaktigheten för avbrottet som orsakas av händelsen.

    Exempel:
    • 9: Avbrottet som orsakas av händelsen varar i 9 sekunder.
    • 0: Händelsen avbryter inte den virtuella datorn eller påverkar dess tillgänglighet (t.ex. uppdatering av nätverket)
    • -1: Standardvärdet som används om varaktigheten för påverkan antingen är okänd eller inte tillämplig.

    Schemaläggning av händelser

    Varje händelse schemaläggs en minsta tid i framtiden baserat på händelsetypen. Den här gången återspeglas i en händelses NotBefore egenskap.

    Eventtype Minsta varsel
    Frysa 15 minuter
    Starta om 15 minuter
    Omdistribuera 10 minuter
    Föregripa 30 sekunder
    Terminate Användaren kan konfigureras: 5 till 15 minuter

    Anteckning

    I vissa fall kan Azure förutsäga värdfel på grund av försämrad maskinvara och försöker minimera störningar i tjänsten genom att schemalägga en migrering. Berörda virtuella datorer får en schemalagd händelse med en NotBefore som vanligtvis är några dagar i framtiden. Den faktiska tiden varierar beroende på den förväntade felriskbedömningen. Azure försöker ge 7 dagars förvarning när det är möjligt, men den faktiska tiden varierar och kan vara mindre om förutsägelsen är att det finns en stor chans att maskinvaran misslyckas inom kort. För att minimera risken för din tjänst om maskinvaran misslyckas innan den systeminitierade migreringen rekommenderar vi att du distribuerar om den virtuella datorn så snart som möjligt.

    Anteckning

    Om värdnoden drabbas av ett maskinvarufel kringgår Azure den minsta uppsägningstiden och påbörjar omedelbart återställningsprocessen för berörda virtuella datorer. Detta minskar återställningstiden om de berörda virtuella datorerna inte kan svara. Under återställningsprocessen skapas en händelse för alla berörda virtuella datorer med EventType = Reboot och EventStatus = Started.

    Avsökningsfrekvens

    Du kan avsöka slutpunkten efter uppdateringar så ofta eller sällan som du vill. Men ju längre tid mellan begäranden, desto mer tid kan du eventuellt förlora för att reagera på en kommande händelse. De flesta händelser har 5 till 15 minuters förvarning, men i vissa fall kan förvarning vara så lite som 30 sekunder. För att säkerställa att du har så mycket tid som möjligt för att vidta åtgärder rekommenderar vi att du avsöker tjänsten en gång per sekund.

    Starta en händelse

    När du har lärt dig om en kommande händelse och slutför logiken för en graciös avstängning kan du godkänna den utestående händelsen genom att göra ett POST anrop till Metadata Service med EventId. Det här anropet anger för Azure att det kan förkorta den minsta meddelandetiden (när det är möjligt). Händelsen kanske inte startar omedelbart efter godkännande, i vissa fall kräver Azure godkännande av alla virtuella datorer som finns på noden innan du fortsätter med händelsen.

    Följande JSON-exempel förväntas i begärandetexten POST . Begäran ska innehålla en lista med StartRequests. Var och StartRequest en innehåller EventId för den händelse som du vill påskynda:

    {
    	"StartRequests" : [
    		{
    			"EventId": {EventId}
    		}
    	]
    }
    

    Tjänsten returnerar alltid en 200-framgångskod om ett giltigt händelse-ID är giltigt, även om det redan har godkänts av en annan virtuell dator. En 400-felkod anger att begärandehuvudet eller nyttolasten var felaktigt formaterad.

    Bash-exempel

    curl -H Metadata:true -X POST -d '{"StartRequests": [{"EventId": "f020ba2e-3bc0-4c40-a10b-86575a9eabd5"}]}' http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    PowerShell-exempel

    Invoke-RestMethod -Headers @{"Metadata" = "true"} -Method POST -body '{"StartRequests": [{"EventId": "5DD55B64-45AD-49D3-BBC9-F57D4EA97BD7"}]}' -Uri http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01 | ConvertTo-Json -Depth 64
    

    Python-exempel

    import json
    import requests
    
    def confirm_scheduled_event(event_id):  
       # This payload confirms a single event with id event_id
       payload = json.dumps({"StartRequests": [{"EventId": event_id }]})
       response = requests.post("http://169.254.169.254/metadata/scheduledevents", 
                                headers =  {'Metadata' : 'true'}, 
                                params = {'api-version':'2020-07-01'}, 
                                data = payload)    
       return response.status_code
    

    Anteckning

    Genom att bekräfta en händelse kan händelsen fortsätta för alla Resources i händelsen, inte bara den virtuella dator som bekräftar händelsen. Därför kan du välja en ledare för att samordna bekräftelsen, vilket kan vara lika enkelt som den första datorn i Resources fältet.

    Exempelsvar

    Följande är ett exempel på en serie händelser som har setts av två virtuella datorer som har direktmigrerats till en annan nod.

    DocumentIncarnation ändras varje gång det finns ny information i Events. Ett godkännande av händelsen skulle göra det möjligt för frysningen att fortsätta för både WestNO_0 och WestNO_1. - DurationInSeconds 1 anger att plattformen inte vet hur lång tid åtgärden tar.

    {
        "DocumentIncarnation":  1,
        "Events":  [
                   ]
    }
    
    {
        "DocumentIncarnation":  2,
        "Events":  [
                       {
                           "EventId":  "C7061BAC-AFDC-4513-B24B-AA5F13A16123",
                           "EventStatus":  "Scheduled",
                           "EventType":  "Freeze",
                           "ResourceType":  "VirtualMachine",
                           "Resources":  [
                                             "WestNO_0",
                                             "WestNO_1"
                                         ],
                           "NotBefore":  "Mon, 11 Apr 2022 22:26:58 GMT",
                           "Description":  "Virtual machine is being paused because of a memory-preserving Live Migration operation.",
                           "EventSource":  "Platform",
                           "DurationInSeconds":  5
                       }
                   ]
    }
    
    {
        "DocumentIncarnation":  3,
        "Events":  [
                       {
                           "EventId":  "C7061BAC-AFDC-4513-B24B-AA5F13A16123",
                           "EventStatus":  "Started",
                           "EventType":  "Freeze",
                           "ResourceType":  "VirtualMachine",
                           "Resources":  [
                                             "WestNO_0",
                                             "WestNO_1"
                                         ],
                           "NotBefore":  "",
                           "Description":  "Virtual machine is being paused because of a memory-preserving Live Migration operation.",
                           "EventSource":  "Platform",
                           "DurationInSeconds":  5
                       }
                   ]
    }
    
    {
        "DocumentIncarnation":  4,
        "Events":  [
                   ]
    }
    
    

    Python-exempel

    Följande exempel frågar Metadata Service efter schemalagda händelser och godkänner varje utestående händelse:

    #!/usr/bin/python
    import json
    import requests
    from time import sleep
    
    # The URL to access the metadata service
    metadata_url ="http://169.254.169.254/metadata/scheduledevents"
    # This must be sent otherwise the request will be ignored
    header = {'Metadata' : 'true'}
    # Current version of the API
    query_params = {'api-version':'2020-07-01'}
    
    def get_scheduled_events():           
        resp = requests.get(metadata_url, headers = header, params = query_params)
        data = resp.json()
        return data
    
    def confirm_scheduled_event(event_id):  
        # This payload confirms a single event with id event_id
        # You can confirm multiple events in a single request if needed      
        payload = json.dumps({"StartRequests": [{"EventId": event_id }]})
        response = requests.post(metadata_url, 
                                headers= header,
                                params = query_params, 
                                data = payload)    
        return response.status_code
    
    def log(event): 
        # This is an optional placeholder for logging events to your system 
        print(event["Description"])
        return
    
    def advanced_sample(last_document_incarnation): 
        # Poll every second to see if there are new scheduled events to process
        # Since some events may have necessarily short warning periods, it is 
        # recommended to poll frequently
        found_document_incarnation = last_document_incarnation
        while (last_document_incarnation == found_document_incarnation):
            sleep(1)
            payload = get_scheduled_events()    
            found_document_incarnation = payload["DocumentIncarnation"]        
            
        # We recommend processing all events in a document together, 
        # even if you won't be actioning on them right away
        for event in payload["Events"]:
    
            # Events that have already started, logged for tracking
            if (event["EventStatus"] == "Started"):
                log(event)
                
            # Approve all user initiated events. These are typically created by an 
            # administrator and approving them immediately can help to avoid delays 
            # in admin actions
            elif (event["EventSource"] == "User"):
                confirm_scheduled_event(event["EventId"])            
                
            # For this application, freeze events less that 9 seconds are considered
            # no impact. This will immediately approve them
            elif (event["EventType"] == "Freeze" and 
                int(event["DurationInSeconds"]) >= 0  and 
                int(event["DurationInSeconds"]) < 9):
                confirm_scheduled_event(event["EventId"])
                
            # Events that may be impactful (eg. Reboot or redeploy) may need custom 
            # handling for your application
            else: 
                #TODO Custom handling for impactful events
                log(event)
        print("Processed events from document: " + str(found_document_incarnation))
        return found_document_incarnation
    
    def main():
        # This will track the last set of events seen 
        last_document_incarnation = "-1"
    
        input_text = "\
            Press 1 to poll for new events \n\
            Press 2 to exit \n "
        program_exit = False 
    
        while program_exit == False:
            user_input = input(input_text)    
            if (user_input == "1"):                        
                last_document_incarnation = advanced_sample(last_document_incarnation)
            elif (user_input == "2"):
                program_exit = True       
    
    if __name__ == '__main__':
        main()
    

    Nästa steg