Categories
Uncategorized

Introdurre dotnet monitor uno strumento sperimenta

Introdurre dotnet monitor, uno strumento sperimentale
Avatar
Sourabh

23 giugno 2020

dotnet-monitor è uno strumento sperimentale che rende più facile per ottenere l’accesso alle informazioni di diagnostica in un processo dotnet.





Cercate il Signore e la sua potenza, cercate sempre il suo volto.

Quando si esegue un differenze di applicazione dotnet in diversi ambienti locali e di produzione in grado di rendere la raccolta di diagnostica artefatti (ad esempio, log, tracce discariche processo) di sfida. obiettivi dotnet monitor per semplificare il processo esponendo un’API REST costante indipendentemente da dove viene eseguita l’applicazione.

Questo blog Dati pubblicare come per iniziare con dotnet-monitor e copre i seguenti:

Come configurare dotnet monitor
Cosa diagnostica manufatti potranno essere ritirati; e
Come raccogliere ciascuno dei manufatti
Giro di dotnet monitor
Setup dotnet monitor
dotnet monitor sarà resa disponibile attraverso due differenti meccanismo di distribuzione:

Come strumento globale .NET core; e
Come immagine contenitore disponibile tramite il contenitore del Registro di sistema di Microsoft (MCR)
Le istruzioni di installazione per dotnet monitor variano in base all’ambiente di destinazione. La sezione seguente riguarda alcuni ambienti comuni.

Nella configurazione di default dotnet monitor lega a due differenti gruppi di URL. Gli URL controllati tramite il –urls parametri (il valore predefinito è http: // localhost: 52323) esporre tutti gli endpoint di raccolta. Gli URL controllati tramite il parametro –metricUrls (default a http: // localhost: 52325) espongono solo la / le metriche endpoint. Dal momento che di diagnostica manufatti come tronchi, discariche, e le tracce possono trapelare informazioni sensibili circa l’applicazione, si consiglia vivamente di non esporre pubblicamente questi endpoint.

macchina locale
Per iniziare con dotnet monitor a livello locale, è necessario disporre di .NET core installato sul computer. È quindi possibile installdotnet-monitor come uno strumento globale utilizzando il seguente comando:

strumento dotnet installare -g dotnet monitor –add-source dnceng.pkgs.visualstudio.com/public/_packaging/dotnet5-transport/nuget/v3/index.json –version 5.0.0-preview.1 . *
Una volta installato è possibile eseguire dotnet-monitor tramite il seguente comando:

Monitor dotnet collect
Esecuzione in Docker
Quando si consumano dotnet monitor come immagine contenitore, può essere rimossa dalla MCR utilizzando il seguente comando:

finestra mobile tirare mcr.microsoft.com/dotnet/nightly/monitor:5.0.0-preview.1
Una volta che avete l’immagine tirato a livello locale, è necessario condividere montaggio di un volume tra il contenitore di applicazioni e dotnet-monitor utilizzando i seguenti comandi:

volume di finestra mobile creare diagnosticserver
corsa finestra mobile -d –rm -p 8000: 80 -v diagnosticsserver: mcr.microsoft.com/dotnet/core/samples:aspnetapp / tmp
finestra mobile corsa -è –rm -p 52323: 52323 -v diagnosticsserver: / tmp mcr.microsoft.com/dotnet/nightly/monitor:5.0.0-preview.1 –urls http: // *: 52323
L’esecuzione in un cluster kubernetes
Quando viene eseguito in un cluster, si consiglia di eseguire il contenitore dotnet-monitor come un sidecar accanto al vostro contenitore di applicazioni nello stesso baccello. Il campione kubernetes manifesta sotto mostra come configurare la distribuzione per includere un contenitore sidecar.

apiVersion: apps / v1
genere: Distribuzione
metadati:
Nome: dotnet-ciao-mondo
spec:
repliche: 1
selettore:
matchLabels:
app: dotnet-ciao-mondo
modello:
metadati:
etichette:
app: dotnet-ciao-mondo
spec:
volumi:
– Nome: diagnostica
emptyDir: {}
contenitori:
– Nome: Server
immagine: mcr.microsoft.com/dotnet/core/samples:aspnetapp
porti:
– containerPort: 80
volumeMounts:
– MountPath: / tmp
Nome: diagnostica
– Nome: sidecar
immagine: mcr.microsoft.com/dotnet/nightly/monitor:5.0.0-preview.1
porti:
– containerPort: 52325
# args: [ “–urls”, “http: // *: 52323”, “–metricUrls”, “http: // *: 52325”]
volumeMounts:
– Nome: diagnostica
MountPath: / tmp
A differenza di altri ambienti di destinazione, questa configurazione non rende la diagnostica endpoint disponibili sulla rete host. Sarà necessario inoltrare il traffico portuale dal tuo host al cluster di destinazione.

Per fare questo, è necessario ottenere il nome del contenitore che si desidera inoltrare il traffico a utilizzare il comando kubectl:

$ Kubectl get pod -l app = dotnet-ciao-mondo
NOME PRONTO STATO RIPARTE AGE
dotnet-ciao-mondo-dc6f67566-t2dzd 2/2 Esecuzione 0 37m
Una volta ottenuto il nome di destinazione pod, inoltrare il traffico utilizzando il comando di porta-forward kubectl:

In PowerShell,

PS> $ job = Start-Job -ScriptBlock {baccelli kubectl port-forward / dotnet-ciao-mondo-dc6f67566-t2dzd 52323: 52323}
In bash,

$ Kubectl port-forward baccelli / dotnet-ciao-mondo-dc6f67566-t2dzd 52323: 52323> / dev / null &
Una volta avviato il traffico di inoltro dalla rete locale per il baccello desiderato, è possibile effettuare la chiamata API desiderata. A titolo di esempio, è possibile eseguire il seguente comando:

In PowerShell,

PS> Invoke-RestMethod http: // localhost: 52323 / processi
In bash,

$ Ricciolo -s http: // localhost: 52323 / processi | JQ
Dopo aver completato la raccolta dei manufatti di diagnostica desiderati, è possibile interrompere l’inoltro del traffico nel contenitore utilizzando il seguente comando:

In PowerShell,

PS> Stop-Job $ job
PS> Remove-Job $ job
In bash,

$ Pkill kubectl
endpoint
L’API REST esposto da dotnet monitor espone i seguenti endpoint:

/processi
/ Scarico / {pid?}
/ Gcdump / {pid?}
/ Trace / {pid?}
/ Logs / {pid?}
/metrica
Nelle sezioni che seguono, vedremo la funzionalità esposte da ciascuno di questi endpoint e utilizzare questi punti finali per raccogliere gli artefatti di diagnostica.

Processi
I processi / endpoint restituisce un elenco di processi bersaglio accessibile a dotnet-monitor.

Per ottenere un elenco dei processi disponibili, eseguire il seguente comando:

In PowerShell,

PS> Invoke-RestMethod http: // localhost: 52323 / processi

pid

1
In bash,

$ Ricciolo -s http: // localhost: 52323 / processi | JQ
[
{
“PID”: 1
}
]
Per comodità, quando v’è un solo processo accessibile, dotnet monitor non richiede di specificare un ID di processo per i restanti punti finali di diagnostica.

Problema noto: quando si esegue localmente gli strumenti dotnet-monitor stesso liste come uno dei processi di destinazione.

cumulo di rifiuti
L’endpoint / discarica restituisce un dump del processo del processo di destinazione.

Per raccogliere un dump di processo, eseguire il seguente comando:

In PowerShell,

PS> Inizio-Process http: // localhost: 52323 / discarica
In bash,

$ Wget –content-disposition http: // localhost: 52323 / discarica
Un manufatto discarica non può essere analizzato su una macchina di un diverso sistema operativo / Architettura quello in cui è stato catturato. Quando si raccolgono una discarica da un cluster kubernetes con Linux, il core dump risultante non può essere analizzata su un Windows o un computer MacOS. È tuttavia possibile utilizzare lo strumento dotnet-discarica esistente per analizzare il dump generato in un contenitore Docker utilizzando i seguenti comandi:

corsa finestra mobile –rm -E -v C: / dumpfiles: / dumpfiles mcr.microsoft.com/dotnet/sdk / bin / sh

# Ora nel contesto del contenitore finestra mobile
strumento dotnet installare -g dotnet-dump
/root/.dotnet/tools/dotnet-dump analizzare / dumpfiles / core_20200618_083349
GC Dump
L’endpoint gcdump / restituisce una discarica GC del processo di destinazione.

Per raccogliere un dump GC, eseguire il seguente comando:

In PowerShell,

PS> Inizio-Process http: // localhost: 52323 / gcdump
In bash,

$ Wget –content-disposition http: // localhost: 52323 / gcdump
A differenza di un dump del processo, una discarica GC è un formato portatile che può essere analizzato da Visual Studio e perfview indipendentemente dalla piattaforma sono stati raccolti su. Per ulteriori informazioni su quando per raccogliere GC discariche e come analizzarli, dare un’occhiata al nostro post sul blog in precedenza.

tracce
L’endpoint / trace restituisce una traccia del processo di destinazione. Il profilo tracciato predefinito include campionati stack CPU, HTTP richiesta di avvio / arresto eventi, e le metriche per una durata di 30 secondi.

La durata della raccolta può essere personalizzato con il parametro i durationSeconds QueryString. I dati presenti diagnostico nella traccia può essere personalizzato tramite il parametro querystring profilo includere qualsiasi combinazione dei profili predefiniti:

CPU (profiler CPU),
Http (richiesta di avvio / arresto eventi da ASP.NET core),
Registri (registrazione dal EventSourceLogger dalla libreria Microsoft.Extensions.Logging); e
Metrics (Runtime e ASP.NET core EventCounters).
Ad esempio, una richiesta di / trace? Profilo = CPU, i registri consentirà la raccolta del profiler CPU e tronchi.

Oltre al punto finale GET, c’è la versione POST dell’endpoint che consente di specificare quali fornitori EventSource per consentire attraverso il corpo della richiesta.

Per raccogliere una traccia del processo di destinazione, eseguire il seguente comando:

In PowerShell,

PS> Inizio-Process http: // localhost: 52323 / trace
In bash,

$ Wget –content-disposition http: // localhost: 52323 / trace
Il file .nettrace risultante può essere analizzato sia con Visual Studio e PerfView.

logs
Il log endpoint / affluiranno i log del processo di destinazione per una durata di 30 secondi.

La durata della raccolta può essere personalizzato con il parametro i durationSeconds QueryString. I registri endpoint è in grado di restituire o di nuova riga delimitati JSON (application / x-ndjson) o il formato di flusso di eventi (text / evento-stream) in base alla specificato Accetta intestazione nella richiesta HTTP.

Per avviare lo streaming registri dal processo di destinazione, eseguire il seguente comando:

In PowerShell,

PS> Inizio-Process http: // localhost: 52323 / logs
In bash,

$ Ricciolo -H “Accept: application / x-ndjson” http: // localhost: 52323 / logs –no-buffer

{ “LogLevel”: “Informazioni”, “EventId”: “1”, “Categoria”: “Microsoft.AspNetCore.Hosting.Diagnostics”, “messaggio”: “Richiesta di partenza HTTP / 1.1 GET http: // localhost: 7001 / “, “Scopes”: { “IDRichiesta”: “0HM0N9ARKHVJK: 00000002”, “RequestPath”: “/”, “SpanId”: “| 88c401de-4df03365b379aaa4”, “traceid.”: “88c401de-4df03365b379aaa4”, “ParentId” : “”}, “Argomenti”: { “protocollo”: “HTTP / 1.1”, “Metodo”: “GET”, “ContentType”: null, “ContentLength”: null, “Schema”: “http”, “Host “:” localhost: 7001″ , “PathBase”: “”, “Path”: “/”, “QueryString”: “”}}
{ “LogLevel”: “Informazioni”, “EventId”: “ExecutingEndpoint”, “Categoria”: “Microsoft.AspNetCore.Routing.EndpointMiddleware”, “messaggio”: “Esecuzione endpoint \ u0027 / Indice \ u0027”, “Scopes”: { “IDRichiesta”: “0HM0N9ARKHVJK: 00000002”, “RequestPath”: “/”, “SpanId”: “|. 88c401de-4df03365b379aaa4”, “traceid”: “88c401de-4df03365b379aaa4”, “ParentId”: “”},” argomenti “: {” endpointname “:” / Indice”, “{} OriginalFormat”: “Esecuzione endpoint \ u0027 {endpointname} \ u0027”}}
Metrica
L’endpoint / metriche restituirà un’istantanea di metriche di runtime e ASP.NET core nel formato prometheus esposizione. A differenza degli altri endpoint di diagnostica, l’endpoint metriche non sarà disponibile se rileva dotnet-traccia processo più di un bersaglio. Oltre ad essere accessibili tramite gli URL configurati con i parametri –urls, la metrica endpoint è accessibile anche da URL configurati tramite i –metricUrls. Durante l’esecuzione in kubernetes, può essere adatto per esporre l’URL metriche ad altri servizi in cluster per consentire loro di metriche raschiare.

Quando si distribuisce in-cluster, un modello comune di metriche raccogliere è quello di utilizzare Prometeo o di un altro strumento di monitoraggio per raschiare le metriche endpoint esposti dall’applicazione. A titolo di esempio, durante l’esecuzione in Azure kubernetes Services (AKS), è possibile configurare Azure Monitor per raschiare metriche Prometheus esposti dal dotnet-monitor. Seguendo le istruzioni riportate nel documento collegato, è possibile attivare Azure Monitor per consentire baccelli di monitoraggio che sono stati annotati.

Come nel caso degli altri endpoint di diagnostica, è anche possibile visualizzare una fotografia di metriche attuali eseguendo il comando seguente:

In PowerShell,

PS> Invoke-RestMethod http: // localhost: 52323 / metriche
In bash,

$ Ricciolo -S http: // localhost: 52323 / metriche

# Systemruntime_alloc_rate_bytes AIUTO Allocazione Tasso
# Calibro TIPO systemruntime_alloc_rate_bytes
systemruntime_alloc_rate_bytes 96784 1.592.899,673335 millions
systemruntime_alloc_rate_bytes 96784 1.592.899,683336 millions
systemruntime_alloc_rate_bytes 96784 1.592.899,693336 millions
# AIUTO systemruntime_assembly_count Numero di assembly caricati
# Calibro systemruntime_assembly_count TIPO
systemruntime_assembly_count 136 1.592.899,673335 millions
systemruntime_assembly_count 136 1.592.899,683336 millions
systemruntime_assembly_count 136 1.592.899,693336 millions
# AIUTO systemruntime_active_timer_count Numero di timer attivi
# Calibro systemruntime_active_timer_count TIPO
systemruntime_active_timer_count 1 1592899673335
systemruntime_active_timer_count 1 1592899683336
systemruntime_active_timer_count 1 1592899693336
# …
# (Output troncato)
Mentre raccolta metriche è abilitato per impostazione predefinita quando dotnet-monitor rileva esattamente un processo di destinazione, esso può essere configurato per disabilitare la raccolta dello metriche interamente attraverso il parametro –metrics. Nell’esempio che segue, le metriche di raccolta non verrà attivato.

Monitor dotnet raccogliere –metrics falso
Roadmap
Mentre siamo entusiasti della promessa dotnet monitor tiene, si tratta di un progetto sperimentale e non un prodotto impegnato. Durante questa fase sperimentale ci aspettiamo di impegnarsi a fondo con chiunque provare dotnet-monitor per ascoltare commenti e suggerimenti.

dotnet-monitor è attualmente impegnato come un esperimento fino .NET 5 navi. A quel punto saremo valutando quello che abbiamo e tutto ciò che abbiamo imparato a decidere cosa dobbiamo fare in futuro.

Conclusione
Siamo entusiasti di presentare la prima preview di dotnet-monitor e vogliamo il tuo feedback. Fateci sapere cosa possiamo fare per rendere più facile diagnosticare cosa c’è di sbagliato con l’applicazione dotnet. Ci piacerebbe per voi di provarlo e farci sapere cosa ne pensate.

È possibile creare problemi o semplicemente seguire insieme l’avanzamento del progetto sul nostro repository GitHub.

Introducing dotnet-monitor, an experimental tool