dotnet monitor实践

生成key

docker run --rm mcr.microsoft.com/dotnet/monitor:latest generatekey

Generated ApiKey for dotnet-monitor; use the following header for authorization:

Authorization: Bearer eyJhbGciOiJFUzM4NCIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL2dpdGh1Yi5jb20vZG90bmV0L2RvdG5ldC1tb25pdG9yIiwiZXhwIjoiMTc4MDg4NDY3MSIsImlzcyI6Imh0dHBzOi8vZ2l0aHViLmNvbS9kb3RuZXQvZG90bmV0LW1vbml0b3IvZ2VuZXJhdGVrZXkrTW9uaXRvckFwaUtleSIsInN1YiI6IjgyNTE3MmFhLTVmMjAtNDcxOS1iZDFlLWE3N2UxMmEyMjBhNSJ9.j2jM0gzySd_eZMTGKGzKvaRT-wqELnt3gl4e7hSF6yT-7ewjnYnJh31jNAO5bXHxdQh6CjFfHlVLrkLegiUw5Pin9hfCBbFwwNY_gMH5GxxZPV4yLzFNrBiMGXcIJGNl

Settings in Json format:
{
  "Authentication": {
    "MonitorApiKey": {
      "PublicKey": "eyJjcnYiOiJQLTM4NCIsImtleV9vcHMiOltdLCJrdHkiOiJFQyIsIm90aCI6W10sIngiOiJ4Z1F6SHRMcmFlUWROUjZXZ0FYNnJhcnF5VTctOGlybjFFaWhnQXZyVFlIbUFFUGZqQzlKWm5DSlNYSzQ1YmVZIiwieDVjIjpbXSwieSI6IkJXNHpITm9qbkw2TnBIdHg2cndtanpqdlJDTW5reXM4SUJmQ0xLSFhRVF9XMTA5UXMwS0hvU0x5QUxSMlEwYjUifQ",
      "Subject": "825172aa-5f20-4719-bd1e-a77e12a220a5"
    }
  }
}

Docker compose

services:
  dotnet-monitor:
    image: mcr.microsoft.com/dotnet/monitor:latest
    user: root
    ports:
      - "52323:52323"
      - "52325:52325"
    volumes:
      - diag-vol:/diag
      - tmp-vol:/tmp
    environment:
      - DOTNETMONITOR_DiagnosticPort__ConnectionMode=Listen
      - DOTNETMONITOR_DiagnosticPort__EndpointName=/diag/port.sock
      - DOTNETMONITOR_Authentication__MonitorApiKey__Subject=825172aa-5f20-4719-bd1e-a77e12a220a5
      - DOTNETMONITOR_Authentication__MonitorApiKey__PublicKey=eyJjcnYiOiJQLTM4NCIsImtleV9vcHMiOltdLCJrdHkiOiJFQyIsIm90aCI6W10sIngiOiJ4Z1F6SHRMcmFlUWROUjZXZ0FYNnJhcnF5VTctOGlybjFFaWhnQXZyVFlIbUFFUGZqQzlKWm5DSlNYSzQ1YmVZIiwieDVjIjpbXSwieSI6IkJXNHpITm9qbkw2TnBIdHg2cndtanpqdlJDTW5reXM4SUJmQ0xLSFhRVF9XMTA5UXMwS0hvU0x5QUxSMlEwYjUifQ
      - DOTNETMONITOR_Urls=http://+:52323
      - DOTNETMONITOR_Metrics__Urls=http://+:52325
    networks:
      - monitor-net
    cap_add:
      - SYS_PTRACE

  app:
    image: myapp:latest
    ports:
      - "9876:9876"
    environment:
      - DOTNET_DiagnosticPorts=/diag/port.sock,suspend=n,connect
      - DOTNET_DefaultDiagnosticPortSuspend=0
    volumes:
      - diag-vol:/diag
      - tmp-vol:/tmp
    networks:
      - monitor-net
    depends_on:
      - dotnet-monitor
    cap_add:
      - SYS_PTRACE

volumes:
  diag-vol:
  tmp-vol:

networks:
  monitor-net:

通过Monitor API访问

$token = "Bearer eyJhbGciOiJFUzM4NCIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL2dpdGh1Yi5jb20vZG90bmV0L2RvdG5ldC1tb25pdG9yIiwiZXhwIjoiMTc4MDg4NDY3MSIsImlzcyI6Imh0dHBzOi8vZ2l0aHViLmNvbS9kb3RuZXQvZG90bmV0LW1vbml0b3IvZ2VuZXJhdGVrZXkrTW9uaXRvckFwaUtleSIsInN1YiI6IjgyNTE3MmFhLTVmMjAtNDcxOS1iZDFlLWE3N2UxMmEyMjBhNSJ9.j2jM0gzySd_eZMTGKGzKvaRT-wqELnt3gl4e7hSF6yT-7ewjnYnJh31jNAO5bXHxdQh6CjFfHlVLrkLegiUw5Pin9hfCBbFwwNY_gMH5GxxZPV4yLzFNrBiMGXcIJGNl"
$url = "http://192.168.10.200:52323/dump?type=Full"
$output = "C:\temp\app_$(Get-Date -Format 'yyyyMMdd_HHmmss').dmp"

# 创建目录
New-Item -ItemType Directory -Force -Path "C:\temp" | Out-Null

Write-Host "开始下载 dump,请耐心等待(可能需要几分钟)..."

$client = [System.Net.WebClient]::new()
$client.Headers.Add("Authorization", $token)
$client.DownloadFile($url, $output)

Write-Host "完成!文件保存在: $output"
Write-Host "文件大小: $([math]::Round((Get-Item $output).Length / 1MB, 2)) MB"
posted @ 2026-06-01 13:22  talentzemin  阅读(1)  评论(0)    收藏  举报