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:
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.
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 Event Hubs Metrikák az Azure Monitorban hasznosak az Event Hubs hasznos elemzéseinek rögzítéséhez (például bejövő kérések összesítése, kimenő kérések, szabályozott kérések, sikeres kérések, bejövő üzenetek, kimenő üzenetek, rögzített üzenetek, bejövő bájtok, kimenő bájtok, rögzített bájtok, felhasználói hibák).
Azure Functions metrikák a Azure App Service számos metrikájában osztoznak, a használatalapú csomag kihasználtságának és költségeinek megértéséhez használható függvényvégrehajtási szám és függvényvégrehajtási egységek hozzáadásával. További érdekes metrikák a kapcsolatok, az adatok be- és lekérése, az átlagos memóriahasználati csoport, a szálak száma, a kérések és a válaszidő.
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.
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:
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.
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
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é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
Ü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
Ü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
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
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
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))
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ő:
- David Barkol | Fő megoldás – szakértő GBB
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:
- Kiszolgáló nélküli eseményfeldolgozás monitorozása
- Azure Functions telemetria elemzése az Application Insightsban
- Monitorozás konfigurálása Azure Functions
- Azure Functions telemetria elemzése az Application Insightsban
- Metrikák az Azure Monitorban – Azure Event Hubs
- Kusto Query Language
Kapcsolódó források (lehet, hogy a cikkek angol nyelvűek)
- A kiszolgáló nélküli eseményfeldolgozás monitorozása útmutatást nyújt a kiszolgáló nélküli eseményvezérelt architektúrák figyeléséhez.
- A kiszolgáló nélküli eseményfeldolgozás egy referenciaarchitektúra, amely egy ilyen típusú tipikus architektúrát részletez, kódmintákkal és a fontos szempontok megvitatásával.
- A kiszolgáló nélküli eseményfeldolgozásban az Event Hubs használatával végzett kötegelés és szűrés részletesebben ismerteti a referenciaarchitektúra ezen részeinek működését.