Ir para o conteúdo
Trilha
Capítulos

Referência

Observabilidade

Config.Observability, endpoints de saúde, registro de métricas, variáveis de ambiente e o contrato de cada resposta.

Config.Observability#

CampoPadrãoO que faz
Health string/_trilha/healthcaminho base das sondas; trilha.Off remove
Metrics string"" (desligado)caminho da raspagem; vazio não registra endereço nem instrumenta requisições
Token stringTRILHA_OBS_TOKENautoriza detalhe e métricas; mínimo de 32 bytes, comparado em tempo constante
Trusted []stringCIDRs (ou IPs) que dispensam o token
Details stringautomáticotrilha.Off nunca revela detalhe, nem para quem tem token; vazio = aberto em dev, autorizado em prod
Timeout time.Duration2 sprazo de cada verificação; trilha.NoTimeout desliga
CacheFor time.Duration1 svalidade do resultado de prontidão; trilha.NoTimeout desliga o cache

Variáveis lidas por ConfigFromEnv: TRILHA_OBS_TOKEN, TRILHA_METRICS, TRILHA_OBS_TRUSTED (lista separada por vírgula).

Endpoints#

Método e caminhoRespostaStatus
GET /_trilha/health/liveapplication/health+jsonsempre 200
GET /_trilha/health/readyidem, roda as verificações200 ou 503 + Retry-After: 5
GET /_trilha/healthigual a ready200 ou 503
GET <Metrics>text/plain; version=0.0.4200, ou 401 sem autorização

Todas saem com Cache-Control: no-store, X-Robots-Tag: noindex e X-Content-Type-Options: nosniff. Outro método devolve 405 com Allow: GET, HEAD.

As sondas correm fora da cadeia de middleware: sem CSRF, sem layout, sem limite de taxa (uma sonda de vida que tomasse 429 mataria um processo saudável) e registradas em nível Debug, para não afogar o log de auditoria.

Verificações de prontidão#

func (a *App) Check(name string, fn func(context.Context) error)
func (a *App) HealthReport(ctx context.Context) HealthReport
type HealthReport struct {
	Status        string        // "pass" | "fail"
	Checks        []CheckResult
	UptimeSeconds float64
}

type CheckResult struct {
	Name       string
	Status     string
	DurationMS float64
	Error      string
}

HealthReport devolve tudo, sempre: é para o seu código (uma página de status interna, um portão de inicialização). Quem decide o que revelar é o endpoint.

Registro de métricas#

func (a *App) Metrics() *Metrics

func (m *Metrics) Counter(name, help string, labels ...string) *Counter
func (m *Metrics) Gauge(name, help string, labels ...string) *Gauge
func (m *Metrics) Histogram(name, help string, buckets []float64, labels ...string) *Histogram

MaxSeries (mil por padrão) é o teto de combinações de rótulo por métrica; o excedente cai numa série com todos os rótulos em other e um aviso no log, uma única vez.

TipoMétodos
*CounterInc(), Add(v), With(valores...)
*GaugeSet(v), Add(v), Inc(), Dec(), With(valores...)
*HistogramObserve(v), With(valores...)

Nome inválido (fora de [a-zA-Z_:][a-zA-Z0-9_:]*) ou número errado de valores de rótulo causam panic: é erro de programação, aparece na primeira execução e não corrompe a saída. Chamar Counter duas vezes com o mesmo nome devolve a mesma série.

Histogram com buckets nulo usa os padrões, em segundos: 0,001 0,005 0,01 0,025 0,05 0,1 0,25 0,5 1 2,5 5 10.

Métricas do framework#

MétricaTipoRótulos
trilha_requests_totalcontadormethod, route, status
trilha_request_duration_secondshistogramamethod, route
trilha_requests_in_flightmedidor
trilha_security_events_totalcontadorkind (csrf, auth, body, rate, panic)
trilha_panics_totalcontador
go_goroutines, go_memstats_alloc_bytes, go_memstats_sys_bytesmedidores
go_gc_cycles_totalcontador
trilha_uptime_secondsmedidor
trilha_build_infomedidor (sempre 1)version, go_version

route é o padrão registrado (/blog/{slug}). Estático, 404 e qualquer coisa fora do roteador entram como other.

Correlação#

func (c *Ctx) RequestID() string  // X-Request-ID do cliente, ou gerado
func (c *Ctx) TraceID() string    // W3C traceparent; "" quando ausente ou malformado
func (c *Ctx) Log() *slog.Logger  // logger com request_id e trace_id

Um traceparent fora do formato é descartado em silêncio: valor escolhido por terceiro não entra no log como se fosse traço legítimo.

O que a auditoria verifica#

trilha audit acrescenta três itens: token curto demais (crítico), métricas configuradas sem token nem rede confiável (crítico), 0.0.0.0/0 em Trusted (aviso) e ausência de qualquer a.Check( no projeto (aviso).