Логирање & посматрање
Све три услуге (Web, MCP, CtraderCliNode) дневник преко Serilog као компактна JSON на stdout — контејнер времена извршавања и дневник колектори (Loki, ELK, CloudWatch, Azure Log Analytics, Datadog) унесе структурирано догађаје директно, нема слободно-текст обраду.
Цевовод
- Потопљивање 1 — Конзола (компактна JSON).
RenderedCompactJsonFormatter; сваки ferdinand носи потпуна OpenTelemetry ресурса идентичност —service.name(cmind-web/cmind-mcp/cmind-node-agent/cmind-copy-agent),service.version,service.namespace(cmind),deployment.environment— плусtrace_id/span_idод опходаActivity(ActivityEnricher) иLogContextопсега. Трагови ID-е дозволи CloudWatch Logs Insights и Azure Log Analytics непокретност дневник↔трагови чак без колектор развоја. - Потопљивање 2 — OTLP (опционално). Када
OTEL_EXPORTER_OTLP_ENDPOINTпоставити, дневници такође извоз преко OTLP са исти ресурса атрибути, поред OpenTelemetry метрике и трагови (ASP.NET Core, HttpClient, рантајм инструментирање) одAddAppTelemetry. - Потопљивање 3 — Azure Monitor (опционално). Када
APPLICATIONINSIGHTS_CONNECTION_STRINGпоставити, трагови и метрике извоз домаће於Application Insights (AddAzureMonitorTraceExporter/AddAzureMonitorMetricExporter) — нема колектор. Видити облак-домаће сечење доле. - Извор-генерисано поруке. Апп дневници користе јако-типизирано
LogMessagesекстензије (Core/Logging/LogMessages.cs) са стабилнаEventId-e — никад ад-хокILogger.LogInformation. - Захтева логирање.
UseSerilogRequestLogging()емитирања једна структурирано резиме по HTTP захтева (метода, пута, статус, протекао ms).
Конфигурација
Нивоа подешавања по услугу преко Serilog сечење у appsettings.json (читати кроз
ReadFrom.Configuration), нпр.:
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": { "Microsoft.AspNetCore": "Warning", "Microsoft.EntityFrameworkCore": "Warning" }
}
}
}
Преписи у време извршавања са окружење променљивих, нпр. Serilog__MinimumLevel__Default=Debug.
Отправљање колектору
Поставити једна окружење променљиво по услугу, упутите на OTLP крајњу тачку:
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
- Helm:
--set observability.otlpEndpoint=http://otel-collector:4317. - Compose / облак: додај окружење променљиво у сваку услугу.
Од колектор, вентилатор резултат позадина (Tempo/Jaeger трагови, Prometheus метрике, Loki дневници) са трагови↔дневник корелација интактна.
Облак-домаће позадина (не додатно колектор)
Обе управљана развоја жица за домаће посматрање стек од кутије — не OTLP колектор потребна.
Azure — Application Insights + Log Analytics
deploy/azure/main.bicep провизионирају радни простор-базирано Application Insights компонента, прослеђивање њена
везни низ у Web и MCP као APPLICATIONINSIGHTS_CONNECTION_STRING. Резултат:
- Трагови + метрике проток домаће у App Insights (Application Map, живо метрике, крај-до-крај
трансакција поиск), корелиран од
trace_id. - Дневници (компактна JSON на stdout) земља у исти Log Analytics радни простор преко Container Apps
appLogsConfiguration, такоAppTraces/ContainerAppConsoleLogs_CLспајај на трагови ID. - Поставити опционално
otlpEndpointBicep параметар до такође вентилатор резултат колектору.
Упит дневници у Log Analytics (JSON линију у Log_s):
ContainerAppConsoleLogs_CL
| extend log = parse_json(Log_s)
| where log.["service.name"] == "cmind-web"
| project TimeGenerated, level = log["@l"], msg = log["@m"], trace_id = log.trace_id
AWS — X-Ray + CloudWatch (ADOT боковни)
deploy/aws/main.tf трче AWS Distro за OpenTelemetry (ADOT) колектор као боковни у сваки
Fargate задатак. Апп извоз OTLP до http://localhost:4317; боковни кораби:
- трагови → AWS X-Ray (
awsxrayизвоз), - метрике → CloudWatch (
awsemf, простор именаcmind, дневна група/ecs/<prefix>/metrics). - Дневници остану на
awslogsвозач као компактна JSON; CloudWatch Logs Insights аутоматско-открива JSON поља, тако могуfilter/statsнаtrace_id,service.name,@l, итд.
Задатак улога (aws_iam_role.task) носи AWSXRayDaemonWriteAccess + CloudWatchAgentServerPolicy.
Упит дневници у CloudWatch Logs Insights:
fields @timestamp, @message, @l, service.name, trace_id
| filter service.name = "cmind-web"
| sort @timestamp desc
| limit 100