Szerkesztés

Megosztás a következőn keresztül:


Az Azure Functions és az Event Hubs monitorozása

Azure Event Hubs
Azure Functions
Azure Monitor

A monitorozás betekintést nyújt a rendszerek viselkedésébe és állapotába, és segít holisztikus képet alkotni a környezetről, a korábbi trendekről, korrelálni a különböző tényezőket, és mérni a teljesítmény, a fogyasztás vagy a hibaarány változásait.

Az Azure Functions beépített integrációt kínál az Application Insightsszal. Az Application Insightsból olyan információkat kaphat, mint a függvényalkalmazás-példányok száma, illetve egy függvény kérés- és függőségi telemetriai adatai. A Functions és az Event Hubs használatakor az Application Insights az eseményközpont felé irányuló kimenő függőségi telemetriákat is nyomon követheti, kiszámíthatja a feldolgozási időt, és megjelenítheti az Event Hubson keresztül csatlakoztatott rendszer végpontok közötti folyamatát.

Ez a szakasz olyan hasznos funkciókat és megállapításokat mutat be, amelyeket az Application Insightsból szerezhet be az Event Hubs és a Functions megoldáshoz.

Alkalmazástérkép

Az Alkalmazástérkép azt mutatja be, hogy a rendszer összetevői hogyan kommunikálnak egymással. Az Application Insights által biztosított függőségi telemetria miatt leképezi az Azure Functions és az Event Hubs közötti események áramlását, beleértve az egyes függvények végrehajtásának átlagát és egy esemény átlagos időtartamát az Event Hubsban, valamint megjeleníti a pirossal jelölt hibákat tartalmazó tranzakciókat.

Miután elküldte a várt terhelést a rendszernek, az Application Insightshoz léphet az Azure Portalon, és az oldalsávon válassza az Alkalmazástérkép lehetőséget. Íme egy térkép, amely három függvényt, három eseményközpontot és látszólagos hibákat mutat be egy alárendelt adatbázisba való íráskor:

Alkalmazástérkép

Végpontok közötti tranzakció részletei

A végpontok közötti tranzakciók részletei időrendi sorrendben mutatják be, hogy a rendszerösszetevők hogyan kommunikálnak egymással. Ez a nézet azt is megjeleníti, hogy mennyi időt töltött egy esemény feldolgozással. Ebből a nézetből az egyes összetevők telemetriai adataiba is behathat, így egyszerűbben háríthatja el az egyes összetevőket ugyanazon kérésen belül, amikor hiba történt.

Végpontok közötti tranzakció

Platformmetrikák és telemetria

Az Azure Monitor for Event Hubs és az Azure Functions platform által létrehozott metrikái a megoldás viselkedésének és állapotának általános monitorozásához használhatók:

  • Az Azure Event Hubs-metrikák az Azure Monitorban hasznosak az Event Hubs hasznos elemzéseinek rögzítéséhez (például a bejövő kérések, a kimenő kérelmek, a szabályozott kérelmek, a sikeres kérések, a bejövő üzenetek, a kimenő üzenetek, a rögzített üzenetek, a bejövő bájtok, a kimenő bájtok, a rögzített bájtok, a felhasználói hibák).

  • Az Azure Functions-metrikák a Azure-alkalmazás Szolgáltatás számos metrikájával osztoznak, a függvényvégrehajtási szám és a függvényvégrehajtási egységek hozzáadásával, amelyek a használati terv kihasználtságának és költségeinek megértéséhez használhatók. További érdekes metrikák a kapcsolatok, az adatbemenet, az adatkihasználtság, az átlagos memória-munkakészlet, a szálszám, a kérések és a válaszidő.

Az Azure Functions integrálható az Application Insights szolgáltatással, hogy fejlett és részletes telemetriát és elemzéseket biztosítson a Functions-gazdagépek és a függvényvégrehajtások számára. További információ: Azure Functions-telemetriai adatok elemzése az Application Insightsban. Ha az Application Insights használatával monitorozza a topológiát, számos konfiguráció érhető el. További információ: Az Azure Functions monitorozásának konfigurálása.

Az alábbiakban egy példa látható a traces táblában létrehozott Event Hubs által aktivált függvények további telemetriai adataira :

Trigger Details: PartionId: 6, Offset: 3985758552064-3985758624640, EnqueueTimeUtc: 2022-10-31T12:51:58.1750000+00:00-2022-10-31T12:52:03.8160000+00:00, SequenceNumber: 3712266-3712275, Count: 10

Ezekhez az információkhoz az Event Hubs 4.2.0-s vagy újabb verzióját kell használnia. Ezek az adatok nagyon hasznosak, mivel információkat tartalmaznak a függvény végrehajtását kiváltó üzenetről, és felhasználhatók lekérdezésekhez és elemzésekhez. A függvény minden egyes aktiválásakor a következő adatokat tartalmazza:

  • A partícióazonosító (6)
  • A partíció eltolási tartománya (3985758552064-3985758624640)
  • Az enqueue időtartomány (UTC) (2022-10-31T12:51:58.1750000+00:00-2022-10-31T12:52:03.8160000+00:00)
  • A sorszámtartomány 3712266-3712275
  • És az üzenetek száma (10)

A telemetriai adatok használatára vonatkozó példákért tekintse meg az Application Insights-példa lekérdezések szakaszát.

Egyéni telemetriai adatok is lehetségesek különböző nyelvekhez (C# osztálytár, C# izolált, C# szkript, JavaScript, Java, PowerShell és Python). Ez a naplózás megjelenik az Application Insights nyomkövetési táblájában. Létrehozhat saját bejegyzéseket az Application Insightsban, és hozzáadhat egyéni dimenziókat, amelyek felhasználhatók az adatok lekérdezéséhez és egyéni irányítópultok létrehozásához.

Végül, amikor a függvényalkalmazás kimeneti kötéssel csatlakozik egy eseményközponthoz, a rendszer az Application Insights Függőségek táblába is beírja a bejegyzéseket.

Függőségek tábla

Az Event Hubs esetében a korreláció az esemény hasznos adataiba kerül, és egy Diagnosztikai azonosító tulajdonság jelenik meg az eseményekben:

Diagnosztikai azonosító tulajdonság

Ez a W3C nyomkövetési környezet formátumát követi, amelyet a Functions által létrehozott telemetriai telemetriai műveletazonosítóként és műveleti hivatkozásként is használnak, így az Application Insights még akkor is létrehozhatja az eseményközpont eseményei és a függvényvégrehajtások közötti korrelációt, ha azok el vannak terjesztve.

Batch-események korrelációja

Példa Application Insights-lekérdezésekre

Az alábbi lista hasznos Application Insights-lekérdezéseket tartalmaz az Event Hubs és az Azure Functions monitorozása során. Ez a lekérdezés részletes információkat jelenít meg az Eseményközpont által aktivált függvényről az Event Hubs 4.2.0-s és újabb bővítménye által kibocsátott telemetriai adatok használatával.

Ha a mintavételezés engedélyezve van az Application Insightsban, rések lehetnek az adatokban.

Részletes eseményfeldolgozási információk

Az adatok csak a megfelelő formátumban lesznek kibocsátva, ha kötegelt küldést használnak. A Batch-küldés azt jelenti, hogy a függvény minden végrehajtáshoz több eseményt fogad el, ami a teljesítmény szempontjából ajánlott. Tartsa szem előtt az alábbi szempontokat:

  • Az dispatchTimeMilliseconds érték az eseménynek az eseményközpontba való írása és a függvényalkalmazás általi feldolgozásra való felvétének időtartama közötti időtartamot közelíti meg.
  • dispatchTimeMilliseconds negatív vagy egyéb pontatlan lehet az eseményközpont-kiszolgáló és a függvényalkalmazás közötti óraeltolódás miatt.
  • Az Event Hubs-partíciók feldolgozása egymás után történik. A rendszer nem küld üzenetet a függvénykódnak feldolgozás céljából, amíg az összes korábbi üzenetet fel nem dolgozták. Figyelje meg a függvények végrehajtási idejét, mivel a hosszabb végrehajtási idők kézbesítési késéseket okoznak.
  • A számítás a köteg első üzenetének enqueueTime értékét használja. Előfordulhat, hogy a köteg más üzeneteinél alacsonyabbak a küldési idők.
  • dispatchTimeMilliseconds az időponttól függ.
  • A sorszámok partíciónként vannak, és duplikált feldolgozás is előfordulhat, mert az Event Hubs nem garantálja az üzenetkézbesítés pontos egyszeri kézbesítését.
traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| project timestamp, cloud_RoleInstance, operation_Name, processId =
customDimensions.ProcessId, partitionId, messageCount, sequenceNumberStart,
sequenceNumberEnd, enqueueTimeStart, enqueueTimeEnd, dispatchTimeMilliseconds

Részletes eseményfeldolgozás

Küldési késés vizualizációja

Ez a lekérdezés egy adott eseményközpont által aktivált függvény 50. és 90. percentilis eseményküldési késését jeleníti meg. További részletekért és jegyzetekért tekintse meg a fenti lekérdezést.

traces
| where operation_Name == "<ENTER THE NAME OF YOUR FUNCTION HERE>"
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| summarize percentiles(dispatchTimeMilliseconds, 50, 90) by bin(timestamp, 5m)
| render timechart

Küldési késés vizualizációja

A kézbesítés késésének összegzése

Ez a lekérdezés hasonló a fentihez, de egy összefoglaló nézetet jelenít meg.

traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| summarize messageCount = sum(messageCount),
percentiles(dispatchTimeMilliseconds, 50, 90, 99, 99.9, 99.99) by operation_Name

Kézbesítés késésének összegzése

Üzenetterjesztés partíciók között

Ez a lekérdezés bemutatja, hogyan jelenítheti meg az üzenetek partíciók közötti eloszlását.

traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| summarize messageCount = sum(messageCount) by cloud_RoleInstance,
bin(timestamp, 5m)
| render areachart kind=stacked

Üzenetterjesztés partíciók között

Üzenetterjesztés példányok között

Ez a lekérdezés bemutatja, hogyan jelenítheti meg az üzenetek példányok közötti eloszlását.

traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| summarize messageCount = sum(messageCount) by cloud_RoleInstance,
bin(timestamp, 5m)
| render areachart kind=stacked

Üzenetterjesztés példányok között

Példányok és lefoglalt példányok végrehajtása

Ez a lekérdezés bemutatja, hogyan jelenítheti meg az Eseményközpontokból eseményeket feldolgozó Azure Functions-példányok számát, valamint a példányok teljes számát (a bérlet feldolgozását és várakozását). Legtöbbször ugyanazoknak kell lenniük.

traces
| where message startswith "Trigger Details: Parti"
| summarize type = "Executing Instances", Count = dcount(cloud_RoleInstance) by
bin(timestamp, 60s)
| union (
    traces
    | summarize type = "Allocated Instances", Count = dcount(cloud_RoleInstance) by
bin(timestamp, 60s)
)
| project timestamp, type, Count
| render timechart

Példányok és lefoglalt példányok végrehajtása

Egy adott függvény végrehajtásához tartozó összes telemetria

A operation_Id mező az Application Insights különböző tábláiban használható. Az Event Hubs által aktivált Azure Functions esetében az alábbi lekérdezés például az eseményindító adatait, a függvénykód naplóiból származó telemetriát, valamint függőségeket és kivételeket eredményez:

union isfuzzy=true requests, exceptions, traces, dependencies
| where * has "<ENTER THE OPERATION_ID OF YOUR FUNCTION EXECUTION HERE>"
| order by timestamp asc

Egy adott függvény végrehajtásához tartozó összes telemetria

Esemény végpontok közötti késése

Mivel az eseményindító részletes nyomkövetésében az EnqueueTimeUtc tulajdonság csak a függvény által feldolgozott egyes kötegek első eseményének lekérdezési idejét jeleníti meg, egy fejlettebb lekérdezéssel kiszámítható az események végpontok közötti késése két függvény között az Event Hubsszal. Ez a lekérdezés kibontja a második függvény kérésében szereplő műveleti hivatkozásokat (ha vannak ilyenek), és megfelelteti a befejezési idejét az első függvény kezdési időpontjának megfelelő műveletazonosítóhoz.

let start = view(){
requests
| where operation_Name == "FirstFunction"
| project start_t = timestamp, first_operation_Id = operation_Id
};
let link = view(){
requests
| where operation_Name == "SecondFunction"
| mv-expand ex = parse_json(tostring(customDimensions["_MS.links"]))
| extend parent = case(isnotempty(ex.operation_Id), ex.operation_Id, operation_Id )
| project first_operation_Id = parent, second_operation_Id = operation_Id
};
let finish = view(){
traces
| where customDimensions["EventName"] == "FunctionCompleted" and operation_Name
== "SecondFunction"
| project end_t = timestamp, second_operation_Id = operation_Id
};
start
| join kind=inner (
link
| join kind=inner finish on second_operation_Id
) on first_operation_Id
| project start_t, end_t, first_operation_Id, second_operation_Id
| summarize avg(datetime_diff('second', end_t, start_t))

Esemény végpontok közötti késése

Közreműködők

Ezt a cikket a Microsoft tartja karban. Eredetileg a következő közreműködők írták.

Fő szerző:

A nem nyilvános LinkedIn-profilok megtekintéséhez jelentkezzen be a LinkedInbe.

Következő lépések

További információkért tekintse át az alábbi kapcsolódó cikkeket: