An Azure platform for running a service on AKS with Terraform, Argo CD, CI, observability and incident handling.
View the Project on GitHub Franklindot04/production-platform-Azure
ADR 0019 chose traces from the sample service through an OpenTelemetry Collector to Application Insights. ADR 0025 changed the Collector to the contrib image with the azure_monitor exporter and a connection string. The Collector runs in the namespace observability and accepts OTLP on 4317 (gRPC) and 4318 (HTTP) at opentelemetry-collector.observability.svc.cluster.local. The network policies already allow egress from apps to the Collector on both ports. The service is written in Go (ADR 0014), and the Azure Monitor distro does not list Go (ADR 0019). The metrics wrapper instrument counts /healthz, /readyz and /work (ADR 0023).
otlptracehttp exporter and a batch span processor. Modules: go.opentelemetry.io/otel, otel/sdk, otel/trace and otel/exporters/otlp/otlptrace/otlptracehttp, all v1.47.0.OTEL_EXPORTER_OTLP_ENDPOINT is unset. Nothing is installed and the shutdown function does nothing. When it is set, the exporter sends to <endpoint>/v1/traces.service.name comes from OTEL_SERVICE_NAME and defaults to sample-service. The chart sets it to the release name.traceparent header becomes the parent of the span.GET /work creates a span, one server span per request. /healthz and /readyz are not traced, because kubelet probes would fill the trace backend. Metrics keep counting all three routes.http.request.method, http.route and http.response.status_code. A status of 500 or more marks the span as an error. A request that the client abandons before the response is recorded with status 499 and is not marked as an error.tracing.enabled (default false) and tracing.endpoint. Rendering fails if it is enabled and the endpoint is empty. The dev values enable it with the endpoint http://opentelemetry-collector.observability.svc.cluster.local:4318.go.sum. The Dockerfile copies go.sum and runs go mod download before the build.dev values enable it.AppRequests table./work request is exported. Cost and volume are not estimated.