Szerkesztés

Share via


Azure Functions és 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, valamint mérni a teljesítmény, a fogyasztás vagy a hibaarány változásait.

Azure Functions beépített integrációt kínál az Application Insights szolgáltatással. Az Application Insightsból olyan információkat kaphat, mint a függvényalkalmazás-példányok száma vagy 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 az üzenetsorban töltött időt, és megjelenítheti az Event Hubson keresztül csatlakoztatott rendszer végpontok közötti folyamatát.

Ez a szakasz 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 telemetriai adatok miatt leképezi a Azure Functions és az Event Hubs közötti események áramlását, beleértve az egyes függvényvégrehajtások átlagát és az esemény átlagos időtartamát az Event Hubsban, valamint a pirossal jelölt hibákat tartalmazó tranzakciókat.

Miután elküldte a várt terhelést a rendszernek, lépjen az Application Insightsra a Azure Portal, majd 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 az alsóbb rétegbeli 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 azt mutatják be, hogy a rendszerösszetevők hogyan kommunikálnak egymással időrendi sorrendben. Ez a nézet azt is megmutatja, hogy mennyi időt töltött egy esemény az üzenetsorban. Ebből a nézetből az egyes összetevők telemetriáját is megvizsgálhatja, így egyszerűbben háríthatja el az egyes összetevők hibaelhárítását ugyanazon kérésen belül, amikor probléma merült fel.

Végpontok közötti tranzakció

Platformmetrikák és telemetria

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

Azure Functions integrálható az Application Insights szolgáltatással, hogy fejlett és részletes telemetriai adatokat és elemzéseket biztosítson a Functions-gazdagéphez és a függvényvégrehajtásokhoz. 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ó: Monitorozás konfigurálása Azure Functions számára.

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 telemetriáira :

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

Ehhez az információhoz 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 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 telemetria használatával kapcsolatos példákért tekintse meg az Application Insights-lekérdezések példáit ismertető szakaszt.

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

Végül, amikor a függvényalkalmazás egy kimeneti kötéssel csatlakozik egy eseményközponthoz, a bejegyzések az Application Insights Dependencies táblába is bekerülnek.

Dependencies tábla

Az Event Hubs esetében a rendszer beszúrja a korrelációt az esemény hasznos adataiba, és megjelenik egy Diagnostic-Id tulajdonság 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 adatokban műveletazonosítóként és műveleti hivatkozásokké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 osztva.

Batch-események korrelációja

Példa Application Insights-lekérdezésekre

Az alábbi lista hasznos Application Insights-lekérdezéseket tartalmaz, amikor Azure Functions figyeli az Event Hubsot. 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, az adatok között hézagok lehetnek.

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

Az adatok csak a megfelelő formátumban lesznek kibocsátva, ha kötegelt kézbesítést használnak. A Batch dispatch 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 szekvenciálisan történik. A rendszer nem küld üzenetet a függvénykódnak feldolgozásra, amíg az összes korábbi üzenetet fel nem dolgozták. Figyelje 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ézbesítési idők.
  • dispatchTimeMilliseconds az időponttól függ.
  • A sorszámok partíciónként vannak megadva, és duplikált feldolgozás történhet, mert az Event Hubs nem garantálja a pontosan egyszeri üzenetkézbesítést.
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ézbesíté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. percentilises eseményküldési késését jeleníti meg. További részletekért és megjegyzéseké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ézbesítési késés vizualizációja

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

Ez a lekérdezés hasonló a fentihez, de egy összegző 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

Üzeneteloszlá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

Üzeneteloszlá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 Event Hubs eseményeit 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 a következő 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ó a két függvény és az Event Hubs közötti események végpontok közötti késése. Ez a lekérdezés kibontja a művelethivatkozásokat (ha vannak ilyenek) a második függvény kérésében, és megfelelteti a befejezési idejét az első függvény kezdési időpontjának megfelelő műveletazonosítónak.

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óért tekintse át az alábbi kapcsolódó cikkeket: