Les dues lliçons anteriors et van donar la vista de la infraestructura: quanta CPU consumeix el VMSS, quants errors 5xx retorna el web, quins registres ha escrit cada recurs. Això respon a «està sa, el sistema?», però no a «què li va passar al passatger del localitzador XR7742?». Entre totes dues preguntes hi ha un salt: la infraestructura pot estar perfecta i el passatger continuar sense la seva targeta d'embarcament.
Application Insights cobreix aquest buit. És la part d'Azure Monitor que observa l'aplicació des de dins: cada petició amb la seva durada i el seu resultat, cada crida a la base de dades, cada excepció amb la seva pila, i —el que és decisiu— el fil que uneix tot això a través dels sis components pels quals passa una reserva. Aquesta lliçó t'ensenya a instrumentar-lo, a correlacionar-lo, a no arruïnar-te amb el volum i a extreure'n dades de negoci, no només tècniques.
Contingut
- Què afegeix sobre les mètriques d'infraestructura
- El model de telemetria
- Instrumentació: automàtica, SDK i recurs basat en àrea de treball
- Correlació distribuïda: el fil que uneix la reserva
- Mapa de l'aplicació, transaccions i cerca en directe
- Rendiment, dependències i errors
- Mostreig: imprescindible i traïdor
- Telemetria personalitzada, inicialitzadors i processadors
- Proves de disponibilitat
- Detecció intel·ligent i alertes d'aplicació
- Consultar la telemetria amb KQL i controlar el cost
- Errors Comuns i Consells
- Exercicis
- Conclusió
- Què afegeix sobre les mètriques d'infraestructura
| Pregunta | La respon |
|---|---|
| Està saturada la màquina? | Mètriques de plataforma (07-01) |
| Què va escriure el servei al seu registre? | Registres de recurs i KQL (07-02) |
| Quina operació de la meva API és lenta i per què? | Application Insights |
| Quina dependència externa està frenant la petició? | Application Insights |
| Quants passatgers diferents han patit aquest error? | Application Insights |
| Per on es va trencar el flux d'aquesta reserva concreta? | Application Insights |
La diferència de fons és el subjecte de la mesura. Les mètriques de plataforma mesuren recursos; Application Insights mesura operacions de negoci i usuaris. Per això pot dir «el 3,2 % dels intents de compra falla al pas d'emissió de targeta, i afecta 148 passatgers diferents en l'última hora», una frase que cap mètrica de CPU no pot formular.
- El model de telemetria
Tot el que Application Insights recull encaixa en uns pocs tipus. Conèixer-los és imprescindible perquè cadascun té la seva taula a log-contoso-pro, el seu cost i el seu paper en la investigació.
| Tipus | Què representa | Taula | Exemple a Contoso |
|---|---|---|---|
| Petició (request) | Feina que l'app fa per encàrrec d'algú | AppRequests |
POST /api/reservas; execució de GenerarTarjetaEmbarque |
| Dependència | Crida sortint a un altre sistema | AppDependencies |
Consulta a sql-contoso-reservas-pro, escriptura a cola-emision-tarjetas |
| Excepció | Error no controlat, amb pila de crides | AppExceptions |
KeyVaultAccessDeniedException |
| Traça | Missatge de registre del codi | AppTraces |
«Tarifa recalculada per a XR7742» |
| Esdeveniment personalitzat | Un fet de negoci que tu emets | AppEvents |
ReservaConfirmada, CheckInCompletado |
| Mètrica personalitzada | Un número agregable que tu emets | AppMetrics |
Import mitjà, seients lliures |
| Visualització de pàgina | Càrrega d'una pàgina al navegador | AppPageViews |
Portada de Contoso Reserves |
| Disponibilitat | Resultat d'una prova sintètica | AppAvailabilityResults |
Sondeig de /salud |
La distinció clau, i la que més es confon: una petició és feina entrant, una dependència és feina sortint. La mateixa crida HTTP entre el web i l'API apareix dues vegades: com a dependència al web i com a petició a l'API. Correlacionar-les totes dues és el que permet veure el recorregut complet.
- Instrumentació: automàtica, SDK i recurs basat en àrea de treball
Hi ha dues maneres d'instrumentar, i no són excloents:
| Automàtica (sense codi) | SDK al codi | |
|---|---|---|
| Com s'activa | Un ajust al servei | Paquet NuGet i configuració |
| Què recull | Peticions, dependències, excepcions, rendiment | Tot l'anterior més el que tu emetis |
| Reimplantació | No cal tocar el codi | Requereix desplegar |
| Esdeveniments de negoci | No | Sí |
| On encaixa a Contoso | Punt de partida en tots els serveis | app-contoso-reservas-pro i func-contoso-tarjetas-pro |
La recomanació pràctica és començar per l'automàtica a tot arreu, i afegir l'SDK només on necessitis telemetria de negoci o control fi.
Abans de res, el recurs. Contoso fa servir un recurs basat en àrea de treball, que envia tota la telemetria a log-contoso-pro. És el que va fer possible l'apartat 7 de la lliçó anterior: les taules App* conviuen amb AzureDiagnostics i AzureActivity, i es poden creuar en una consulta. Els recursos clàssics, no basats en àrea, guardaven les dades a part i estan retirats.
az monitor app-insights component create \
--app ai-insights-contoso-pro \
--resource-group rg-contoso-seguridad-pro \
--location westeurope \
--workspace "/subscriptions/<id>/resourceGroups/rg-contoso-seguridad-pro/providers/Microsoft.OperationalInsights/workspaces/log-contoso-pro" \
--application-type web \
--tags entorno=produccion proyecto=contoso-reservas centro-coste=CC-1042 propietario=marta.rios
# Activacio sense codi a App Service (extensio de l entorn d execucio)
CONN=$(az monitor app-insights component show --app ai-insights-contoso-pro \
--resource-group rg-contoso-seguridad-pro --query connectionString -o tsv)
az webapp config appsettings set \
--name app-contoso-reservas-pro --resource-group rg-contoso-reservas-pro \
--settings APPLICATIONINSIGHTS_CONNECTION_STRING="$CONN" \
ApplicationInsightsAgent_EXTENSION_VERSION="~3" \
XDT_MicrosoftApplicationInsights_Mode="recommended"Sobre la cadena de connexió: substitueix l'antiga clau d'instrumentació i no és opcional, perquè a més de l'identificador porta els punts de connexió regionals d'ingesta. Conté un identificador, no una credencial d'accés a dades, però continua sent un valor de configuració: a Contoso viu a kv-contoso-pro i arriba a l'aplicació per referència de Key Vault, com qualsevol altre ajust (mòdul 4).
Els altres dos casos de Contoso:
# Funcio: mateix ajust, mes el mostreig de l amfitrio configurat a host.json
az functionapp config appsettings set \
--name func-contoso-tarjetas-pro --resource-group rg-contoso-reservas-pro \
--settings APPLICATIONINSIGHTS_CONNECTION_STRING="$CONN"
# Contenidors: s injecta com a variable d entorn de l aplicacio
az containerapp update --name ca-motor-disponibilidad \
--resource-group rg-contoso-reservas-pro \
--set-env-vars APPLICATIONINSIGHTS_CONNECTION_STRING="$CONN"A cae-contoso-pro convé distingir dues coses que se superposen: l'entorn de Container Apps ja envia registres i mètriques del sistema a log-contoso-pro, mentre que Application Insights aporta les peticions, dependències i correlació de l'aplicació. Es complementen i tots dos són necessaris per seguir la reserva de punta a punta.
- Correlació distribuïda: el fil que uneix la reserva
Aquest és el cor de la lliçó i la resposta al problema que va obrir el mòdul. Quan un passatger compra, hi intervenen sis components. Sense correlació, cadascun genera telemetria aïllada i no hi ha manera de saber què pertany a quina compra.
La solució és el context de traça del W3C, un estàndard que Azure implementa: cada crida sortint porta una capçalera traceparent amb el format 00-<trace-id>-<span-id>-<flags>. El receptor la llegeix, la propaga a les seves pròpies crides i etiqueta amb ella tota la seva telemetria. A les taules de Log Analytics això apareix com tres columnes:
OperationId: identifica l'operació completa de negoci. És el mateix valor als sis components.Id: identifica el tram concret, únic per component.ParentId: apunta al tram que el va provocar, i és el que construeix l'arbre.
sequenceDiagram participant N as Navegador participant W as app-contoso-reservas-pro participant A as app-contoso-api-disponibilidad-pro participant S as sql-contoso-reservas-pro participant Q as cola-emision-tarjetas participant F as func-contoso-tarjetas-pro N->>W: POST /reservas (traceparent nou) W->>A: GET /api/disponibilidad (mateix OperationId) A->>S: SELECT ... (dependencia) W->>Q: Encuar missatge (traceparent a la propietat del missatge) Q-->>F: Desencadenador F->>F: GenerarTarjetaEmbarque (mateix OperationId)
El pas fràgil és el de la cua. HTTP propaga traceparent tot sol; els missatges no, llevat que l'emissor l'escrigui com a propietat del missatge i el consumidor el llegeixi. Els SDK moderns de Service Bus ho fan automàticament, però una cua d'Azure Storage com cola-emision-tarjetas requereix fer-ho a mà. Si el rastre es talla a la cua, el mapa es parteix en dos i tornes a la situació de partida. Comprovar-ho és el primer pas de qualsevol implantació:
AppRequests
| where TimeGenerated > ago(1h) and AppRoleName == "func-contoso-tarjetas-pro"
| summarize Total = count(), SensePare = countif(isempty(ParentId))
| extend PercentatgeOrfes = round(100.0 * SensePare / Total, 1)Un percentatge alt d'execucions sense ParentId significa exactament això: correlació trencada al salt asíncron.
- Mapa de l'aplicació, transaccions i cerca en directe
Sobre aquesta correlació es construeixen tres eines que es fan servir cada dia:
- Mapa de l'aplicació: un graf generat automàticament amb tots els components, les seves crides, el volum, la latència mitjana i el percentatge d'error de cada aresta. Revela tres coses que ningú no havia dibuixat: dependències que no sabies que existien, la que realment va lenta, i components que ja no crida ningú. A Contoso va destapar que el web consultava
cosmos-contoso-tarifas-produes vegades per reserva per una fallada de memòria cau. - Transaccions d'extrem a extrem: en clicar una petició concreta, la línia de temps en cascada de tot el que va passar, amb la durada de cada tram. Una petició de 4,2 segons es descompon en 120 ms del web, 3,8 s esperant
sql-contoso-reservas-proi 280 ms de serialització: el culpable queda a la vista sense conjectures. - Cerca en directe (Live Metrics): telemetria amb latència d'un segon i sense mostreig, que a més no s'emmagatzema i per tant no es factura com a ingesta. És l'eina del desplegament: en Diego publica a la ranura
preproduccion, intercanvia, i observa en directe peticions, errors i dependències durant els dos minuts crítics. Si alguna cosa es dispara, reverteix abans que una alerta arribi a avaluar-se.
- Rendiment, dependències i errors
El tauler de rendiment ordena les operacions per durada i permet veure la distribució completa, no només la mitjana. La lectura correcta és sempre per percentils: si la p50 és de 180 ms i la p95 de 3.400 ms, no tens un problema de rendiment general, tens un problema amb un subconjunt de peticions —normalment, les d'un cas d'ús concret o les que topen amb un bloqueig.
El desglossament de dependències és on sol ser la resposta. La regla empírica: en aplicacions de negoci, el 80 % de la latència és fora del teu codi, a la base de dades o en un servei extern. El tauler d'errors complementa amb els codis de resposta fallits, les excepcions més freqüents i les dependències que fallen.
- Mostreig: imprescindible i traïdor
Una aplicació amb trànsit real genera un volum de telemetria que no té sentit emmagatzemar íntegre. El mostreig conserva una fracció dels elements i anota quants en representa cadascun.
| Tipus | On passa | Ajust | Cost que estalvia |
|---|---|---|---|
| Adaptatiu | A l'SDK, abans d'enviar | Automàtic, per objectiu d'elements/segon | Ingesta i amplada de banda |
| Fix | A l'SDK, percentatge constant | Tu fixes el percentatge | Ingesta i amplada de banda |
| D'ingesta | Al servei, en rebre | Percentatge al recurs | Només emmagatzematge |
Dues propietats que cal entendre bé. Primera: el mostreig és coherent per operació. Si es conserva una petició, es conserven també les seves dependències, traces i excepcions; mai no veuràs una traça òrfena. Segona, i aquí hi ha el parany: cada element conservat porta un camp ItemCount amb el nombre d'elements que representa. Les vistes del portal l'apliquen soles, però les teves consultes KQL no:
// INCORRECTE amb mostreig: infravalora el recompte real
AppRequests | where TimeGenerated > ago(1h) | summarize count()
// CORRECTE: pondera pel factor de mostreig
AppRequests | where TimeGenerated > ago(1h) | summarize Estimat = sum(ItemCount)Amb un mostreig del 20 %, la primera consulta retorna 2.000 i la realitat són 10.000. Aquesta discrepància entre el tauler i una consulta pròpia és una de les confusions més habituals, i es resol amb sum(ItemCount). A Contoso, el mostreig adaptatiu està actiu al web amb un objectiu de cinc elements per segon, i desactivat a func-contoso-tarjetas-pro, perquè el seu volum és baix i cada execució importa individualment. Les excepcions s'exclouen sempre del mostreig.
- Telemetria personalitzada, inicialitzadors i processadors
Aquí és on Application Insights deixa de ser una eina tècnica i comença a respondre preguntes de negoci. L'esdeveniment ReservaConfirmada que vas fer servir a KQL surt d'aquí:
public class ServeiReserves
{
private readonly TelemetryClient _telemetria;
public ServeiReserves(TelemetryClient telemetria) => _telemetria = telemetria;
public async Task<Reserva> ConfirmarAsync(PeticioReserva peticio)
{
var reserva = await _repositori.CrearAsync(peticio);
// Esdeveniment de negoci: propietats per filtrar i agrupar, metriques per agregar
_telemetria.TrackEvent("ReservaConfirmada",
properties: new Dictionary<string, string>
{
["localizador"] = reserva.Localitzador, // permet SeguirLocalizador() de 07-02
["canal"] = peticio.Canal, // web, mobil, taulell
["ruta"] = $"{reserva.Origen}-{reserva.Desti}",
["clase"] = reserva.Classe,
["entorno"] = "produccion"
},
metrics: new Dictionary<string, double>
{
["importe"] = (double)reserva.Import,
["pasajeros"] = reserva.Passatgers.Count,
["diasAntelacion"] = (reserva.Sortida - DateTime.UtcNow).TotalDays
});
return reserva;
}
}Tres decisions deliberades en aquest codi. Les propietats són cadenes i serveixen per filtrar i agrupar (by canal); les mètriques són números i serveixen per agregar (avg(importe)). El localizador s'inclou perquè és la clau de la investigació, i no és una dada personal: identifica una reserva, no una persona. I no hi apareix ni el nom del passatger, ni el seu correu, ni el seu document d'identitat; això és intencionat i ho reforça el bloc següent.
Els inicialitzadors de telemetria afegeixen context a tot el que s'envia; els processadors filtren o modifiquen abans de l'enviament:
// Inicialitzador: enriqueix cada element amb context comu
public class InicialitzadorContoso : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
telemetry.Context.Cloud.RoleName = "app-contoso-reservas-pro";
if (telemetry is ISupportProperties props)
{
props.Properties["centroCoste"] = "CC-1042";
props.Properties["version"] = Environment.GetEnvironmentVariable("BUILD_ID");
}
}
}
// Processador: descarta soroll i elimina dades personals abans que surtin del proces
public class ProcessadorContoso : ITelemetryProcessor
{
private readonly ITelemetryProcessor _seguent;
private static readonly Regex Correu = new(@"[\w\.\-]+@[\w\.\-]+\.\w+", RegexOptions.Compiled);
public ProcessadorContoso(ITelemetryProcessor seguent) => _seguent = seguent;
public void Process(ITelemetry item)
{
// 1. No emmagatzemar els sondejos d estat: son la meitat del volum i no aporten res
if (item is RequestTelemetry r && r.Url?.AbsolutePath == "/salud") return;
// 2. Emmascarar correus que s hagin colat en missatges o consultes
if (item is TraceTelemetry t)
t.Message = Correu.Replace(t.Message, "[correu-eliminat]");
if (item is DependencyTelemetry d && d.Data is not null)
d.Data = Correu.Replace(d.Data, "[correu-eliminat]");
_seguent.Process(item);
}
}Aquest processador fa dues feines diferents i totes dues importen. La primera és de cost: descartar els sondejos a /salud, que a Contoso eren el 46 % de les peticions registrades. La segona és de compliment, i convé dir-ho sense embuts: la telemetria d'aplicació és una destinació habitual de fuites de dades personals, perquè una consulta SQL registrada o un missatge d'excepció poden portar a dins un correu o un document d'identitat. Sota el RGPD, això converteix log-contoso-pro en un magatzem de dades personals, amb les seves obligacions de base legal, minimització, termini de conservació i dret de supressió —i esborrar selectivament a Log Analytics és lent i limitat—. La regla de Contoso és taxativa: les dades personals s'eliminen abans de sortir del procés, al processador, mai després. Identificadors de negoci com el localitzador, sí; identitats de persones, no.
- Proves de disponibilitat
Les proves de disponibilitat són sondejos sintètics llançats des de diverses regions. Alimenten la primera alerta de la taula de 07-01 i detecten el que cap registre no pot: que l'aplicació està bé però el DNS, el certificat o l'encaminament de fd-contoso-global no.
| Tipus | Què fa | Ús a Contoso |
|---|---|---|
| Comprovació d'URL estàndard | Una petició HTTP, amb validació de codi, contingut i certificat | /salud de l'API, des de 5 ubicacions |
| Personalitzada amb TrackAvailability | Qualsevol lògica que tu programis i publiquis com a resultat | Comprovar que es pot emetre una targeta de prova d'extrem a extrem |
Tres regles de disseny. Fes servir almenys cinc ubicacions i exigeix que en fallin tres abans d'alertar: amb una sola ubicació, un problema de xarxa local genera falses alarmes. Comprova el contingut, no només el codi 200 —una pàgina d'error personalitzada retorna 200 perfectament—. I valida la caducitat del certificat, que és exactament el cas que va causar l'incident de la targeta no emesa.
- Detecció intel·ligent i alertes d'aplicació
La detecció intel·ligent analitza la telemetria automàticament i avisa d'anomalies sense configurar llindars: augment anormal de la taxa d'errors, degradació de latència respecte a la línia base, fuites de memòria, o un patró d'excepcions que comença just després d'un desplegament. És útil pel que descobreix sense que ningú ho hagués demanat, però no substitueix les alertes explícites: no coneix els teus SLO ni la teva criticitat de negoci. Tracta-la com una segona opinió i dirigeix-la al grup ag-equipo-contoso, no al de guàrdia.
Les alertes explícites d'aplicació de Contoso, sobre les mètriques d'Application Insights: latència p95 de l'API per sobre de 800 ms, taxa de peticions fallides superior al 2 %, temps de resposta de la dependència sql-contoso-reservas-pro per sobre d'1 segon, i la disponibilitat de /salud. Totes construïdes amb el que has après a 07-01 i apuntant als grups d'accions ja definits.
- Consultar la telemetria amb KQL i controlar el cost
Com que el recurs està basat en àrea de treball, tot l'anterior es consulta amb KQL a log-contoso-pro. Un exemple que combina el que has après:
// Impacte real de negoci de les fallades, per canal de venda
let finestra = 24h;
AppEvents
| where TimeGenerated > ago(finestra) and Name == "ReservaConfirmada"
| extend Canal = tostring(Properties["canal"]),
Import = todouble(Measurements["importe"])
| summarize Confirmades = sum(ItemCount), Ingres = sum(Import * ItemCount) by Canal
| join kind=leftouter (
AppRequests
| where TimeGenerated > ago(finestra) and Name == "POST /api/reservas" and Success == false
| extend Canal = tostring(Properties["canal"])
| summarize Fallides = sum(ItemCount) by Canal
) on Canal
| extend TaxaFallada = round(100.0 * Fallides / (Confirmades + Fallides), 2)
| project Canal, Confirmades, Fallides, TaxaFallada, IngresEuros = round(Ingres, 0)
| order by Fallides descFixa't en l'ús sistemàtic de sum(ItemCount) en lloc de count() pel mostreig, en Measurements per a les mètriques de l'esdeveniment davant de Properties per a les cadenes, i en el join kind=leftouter explícit. El resultat és una taula que la Nuria Peña entén: quantes reserves i quants euros per canal, i quin percentatge s'està perdent.
Sobre el cost, l'advertència de 07-02 s'aplica íntegra, perquè la telemetria es factura com qualsevol altra ingesta a Log Analytics. Les palanques específiques d'Application Insights, en ordre d'impacte: mostreig adaptatiu actiu als serveis de gran volum; filtratge de sondejos d'estat i peticions a recursos estàtics al processador; desactivar les traces de nivell de depuració en producció, que és l'error més car i més freqüent; i retenció per taula, amb AppTraces a 30 dies i AppEvents a més temps pel seu valor de negoci. Amb aquestes quatre mesures Contoso va reduir el volum un 60 % sense perdre capacitat d'investigació.
Errors Comuns i Consells
- Comptar sense
ItemCount. Amb mostreig actiu,count()infravalora sistemàticament. Fes servirsum(ItemCount). - Correlació trencada a la cua. Si el
traceparentno viatja al missatge, el rastre es parteix. Comprova-ho amb el percentatge de peticions senseParentId. - Registrar dades personals. Correus i documents acaben a les traces i a les consultes registrades. Filtra'ls al processador, abans de l'enviament.
- Deixar el nivell de depuració en producció. La causa número u de factures de telemetria desbocades.
- Prova de disponibilitat des d'una sola ubicació. Genera falses alarmes; fes-ne servir cinc i exigeix que en fallin tres.
- Confiar només en la detecció intel·ligent. No coneix els teus SLO; complementa, no substitueix.
- Consell: fixa
Cloud.RoleNameen un inicialitzador. Sense això, el mapa de l'aplicació mostra noms genèrics i deixa de ser llegible. - Consell: emet esdeveniments de negoci des del primer dia. Instrumentar el que és tècnic es pot afegir després; reconstruir un històric de negoci que no es va capturar, no.
- Consell: fes servir la cerca en directe a cada desplegament. És gratuïta, no es mostreja i dona dos minuts d'avantatge sobre qualsevol alerta.
Exercicis
Exercici 1. El web mostra al mapa de l'aplicació una latència mitjana de 2,3 s cap a sql-contoso-reservas-pro, però el tauler de mètriques de la base de dades indica un ús de DTU del 35 % i cap consulta lenta registrada. Explica les causes possibles i com distingir-les amb les eines d'aquesta lliçó.
Exercici 2. En Diego ha instrumentat func-contoso-tarjetas-pro i en veu les execucions, però en fer servir SeguirLocalizador("XR7742") de 07-02 la funció no apareix a la línia de temps. Diagnostica el problema i descriu-ne la solució.
Exercici 3. L'equip de Contoso Millas (centro-coste=CC-2077) vol mesurar quants socis bescanvien punts, l'import mitjà del bescanvi i quin percentatge abandona a mitja tramitació. Dissenya la instrumentació completa, incloent-hi la consulta KQL i les precaucions de privacitat i cost.
Solucions
Solució 1: hi ha tres causes possibles i es distingeixen bé. (a) El temps no és a la base de dades sinó a arribar-hi: esgotament del grup de connexions, resolució DNS o latència de xarxa. S'identifica perquè a les transaccions d'extrem a extrem la dependència dura molt però la consulta executada és trivial, i perquè AppDependencies mostra durada alta amb Success == true. (b) Bloquejos i esperes: la consulta és ràpida però espera una altra transacció; l'ús de DTU és baix precisament perquè ningú no treballa, tots esperen. Es confirma amb els registres de Deadlocks i Timeouts de la configuració de diagnòstic de SQL (07-01). (c) Una mitjana enganyosa: unes poques consultes molt lentes eleven la mitjana del mapa. Es descarta consultant AppDependencies amb percentile(DurationMs, 50) i percentile(DurationMs, 95) agrupat per Data: si la p50 és baixa i la p95 altíssima, el problema afecta una consulta concreta i no el conjunt. L'ordre d'investigació és sempre aquest: primer percentils, després transaccions d'extrem a extrem d'un cas lent concret, i només llavors mirar la base de dades.
Solució 2: la correlació s'ha trencat al salt asíncron. El web escriu a cola-emision-tarjetas, que és una cua d'Azure Storage i no propaga automàticament el context de traça del W3C, a diferència d'HTTP o de Service Bus. La funció engega, per tant, una operació nova, amb el seu propi OperationId, i SeguirLocalizador —que filtra per OperationId == op— no la troba. Diagnòstic: la consulta de peticions sense ParentId de l'apartat 4 retornarà a prop del 100 % per a aquesta funció. Solució: incloure el traceparent com a propietat del missatge en encuar i, a la funció, iniciar l'activitat amb aquest context com a pare abans d'emetre telemetria. Comprovació: després del canvi, el mapa de l'aplicació ha de mostrar l'aresta de la cua cap a la funció, i la línia de temps d'extrem a extrem ha d'arribar fins a GenerarTarjetaEmbarque. Com a xarxa de seguretat mentrestant, afegir el localizador com a propietat a tota la telemetria de la funció permet localitzar-la per aquest camp encara que la correlació falli.
Solució 3: instrumentació amb tres esdeveniments personalitzats —CanjeIniciado, CanjeConfirmado i CanjeAbandonado—, tots amb les propietats idCanje (un identificador propi, no el número de soci), tipoPremio, paso i entorno, i les mètriques puntos i importeEquivalente. L'embut es calcula amb AppEvents | where Name startswith "Canje" | summarize Total = sum(ItemCount) by Name, i l'abandonament com 1 - Confirmados/Iniciados; l'import mitjà, amb summarize avg(todouble(Measurements["importeEquivalente"])) sobre els confirmats, ponderant sempre per ItemCount. Privacitat: no s'emet el número de soci, ni el seu nom, ni el seu correu; es fa servir un identificador de bescanvi sense significat extern, i el processador de telemetria emmascara qualsevol correu que es coli en traces o dependències, segons el RGPD i la política de la lliçó. Cost: mostreig adaptatiu desactivat si el volum de bescanvis és baix —convé conservar cada esdeveniment—, però traces de depuració desactivades i sondejos d'estat filtrats; retenció d'AppEvents àmplia pel seu valor de negoci i AppTraces a 30 dies. Etiquetes del recurs: entorno, proyecto=contoso-millas, centro-coste=CC-2077 i propietario.
Conclusió
Ja saps què afegeix Application Insights sobre les mètriques d'infraestructura: canvia el subjecte de la mesura, de recursos a operacions de negoci i usuaris. Coneixes el seu model de telemetria —petició, dependència, excepció, traça, esdeveniment personalitzat, mètrica personalitzada, visualització de pàgina i disponibilitat—, cadascun amb la seva taula, i la distinció que més es confon: petició és feina entrant, dependència és feina sortint. Saps instrumentar sense codi i amb SDK, i per què Contoso fa servir un recurs basat en àrea de treball que envia tot a log-contoso-pro, unificant aquesta lliçó amb l'anterior; l'has activat a app-contoso-reservas-pro, a func-contoso-tarjetas-pro i als contenidors de cae-contoso-pro, amb la cadena de connexió guardada a kv-contoso-pro.
El centre de la lliçó era la correlació distribuïda: el context de traça del W3C, OperationId, Id i ParentId, i el punt fràgil del salt asíncron per la cua, que és exactament on es partia el rastre de la reserva que va obrir el mòdul. Sobre aquesta correlació has vist el mapa de l'aplicació, les transaccions d'extrem a extrem que descomponen una petició lenta tram a tram, i la cerca en directe per vigilar un desplegament en viu i sense cost. Domines el mostreig —adaptatiu, fix i d'ingesta—, per què és imprescindible i el parany d'ItemCount que fa que les teves consultes comptin de menys. Has emès telemetria personalitzada de negoci en C#, i has escrit un inicialitzador que enriqueix i un processador que filtra sondejos i elimina dades personals abans que surtin del procés, amb l'advertència del RGPD que això comporta. I tanques amb proves de disponibilitat des de diverses ubicacions, detecció intel·ligent com a segona opinió, les alertes d'aplicació i el control del cost amb les quatre palanques que van reduir el volum de Contoso un 60 %.
Amb això, la plataforma de Contoso és per fi observable: una queixa es converteix en una consulta, i una consulta en una causa arrel. Però observar no és operar. Cada matí algú encén els entorns de desenvolupament i cada nit algú els hauria d'apagar; hi ha instantànies velles que ningú no neteja, credencials per rotar, informes per generar i servidors per apedaçar, i tot això continua consumint les hores de l'equip de la Marta Ríos. La lliçó 07-04, Azure Automation i runbooks, s'ocupa d'aquesta feina repetitiva: comptes d'Automation amb identitat administrada, runbooks en PowerShell amb les seves programacions i els seus actius, Hybrid Runbook Worker per actuar sobre l'oficina de Barcelona, disparar un runbook des d'una alerta d'Azure Monitor —tancant el cercle amb 07-01— i Azure Update Manager per a l'apedaçament.
Curs d'Azure
Mòdul 1: Introducció a Azure
- Què és Azure?
- Models de servei, regions i zones de disponibilitat
- Crear i configurar el teu compte d'Azure
- Recorregut pel portal d'Azure
- Azure Resource Manager: subscripcions, grups de recursos i etiquetes
- Azure CLI, PowerShell i Cloud Shell
Mòdul 2: Serveis principals d'Azure
- Màquines virtuals d'Azure
- Escalat i alta disponibilitat del còmput
- Azure App Service
- Azure Storage: blobs, fitxers, cues i taules
- Xarxes a Azure: xarxes virtuals, subxarxes i NSG
- Connectivitat híbrida i lliurament global
Mòdul 3: Bases de dades d'Azure
- Triar el servei de dades adequat
- Azure SQL Database
- Azure Cosmos DB
- Azure Database for MySQL
- Azure Database for PostgreSQL
- Analítica de dades: Data Lake, Data Factory i Synapse
Mòdul 4: Seguretat a Azure
- Microsoft Entra ID i gestió d'identitats
- RBAC i identitats administrades
- Azure Key Vault
- Protecció DDoS i tallafoc d'aplicacions web
- Microsoft Defender for Cloud
- Governança i compliment amb Azure Policy
Mòdul 5: Azure DevOps
- Introducció a Azure DevOps
- Azure Repos
- Azure Pipelines: integració contínua
- Desplegament continu amb entorns i aprovacions
- Azure Artifacts
- Infraestructura com a codi amb Bicep
Mòdul 6: Serveis avançats d'Azure
- Contenidors a Azure: Container Registry i Container Apps
- Azure Kubernetes Service (AKS)
- Azure Functions
- Azure Logic Apps
- Missatgeria i esdeveniments: Service Bus, Event Grid i Event Hubs
- Serveis d'IA d'Azure
Mòdul 7: Monitoratge i gestió
- Azure Monitor: mètriques, alertes i taulers
- Log Analytics i consultes KQL
- Application Insights
- Azure Automation i runbooks
- Còpies de seguretat i recuperació davant desastres
Mòdul 8: Gestió i optimització de costos
- Calculadora de preus i estimació de costos
- Azure Cost Management: anàlisi, pressupostos i alertes
- Reserves, plans d'estalvi i Azure Hybrid Benefit
- Azure Advisor
- Estratègies d'optimització i cultura FinOps
