[{"content":"I am Mohammed Abdessetar Elyagoubi (abdessattar23). I work on Java and backend systems, with a focus on OpenTelemetry and production observability.\nThis site is my public engineering notebook: how I instrument services, how I read traces, and what I learn while contributing to OpenTelemetry Java.\nWhat I work on # Java / backend engineering — services, APIs, and the operational questions that show up after they ship. OpenTelemetry and observability — traces, metrics, and logs that operators can actually use. Open source — contributions around OpenTelemetry Java. Speaking — the Devoxx Morocco speaker track. Talk titles and materials will be listed on Projects/Talks as they are ready. This blog # Posts stay technical and personal. The first sample article walks through a small OpenTelemetry Java instrumentation example so the Markdown, code highlighting, and theme layout can be checked end to end.\nElsewhere # GitHub: abdessattar23 ","date":"15 September 2026","externalUrl":null,"permalink":"/about/","section":"Mohammed’s professional tech blog","summary":"I am Mohammed Abdessetar Elyagoubi (abdessattar23). I work on Java and backend systems, with a focus on OpenTelemetry and production observability.\nThis site is my public engineering notebook: how I instrument services, how I read traces, and what I learn while contributing to OpenTelemetry Java.\n","title":"About","type":"page"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/posts/","section":"Blog","summary":"","title":"Blog","type":"posts"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"Most Java services already have some telemetry — access logs, a /health endpoint, maybe a JVM metrics scrape. That is rarely enough when a request crosses three processes and fails in the third. OpenTelemetry gives you a vendor-neutral way to emit traces, metrics, and logs from the same mental model.\nThis post is a small, self-contained example using the OpenTelemetry Java API. It is the kind of snippet I reach for when the auto-instrumentation agent already covers HTTP, but a domain operation still looks like a blank gap in the trace.\nWhat you want from a span # A useful span answers three questions:\nWhat work happened? The span name should be stable and readable (OrderService.placeOrder, not POST /api/v2/o). Which instance of that work? Attributes such as order.id or customer.tier let you filter in the backend. Did it succeed, and if not, why? Status and recorded exceptions turn a red trace into a diagnosis. Keep high-cardinality identifiers as attributes, not as span names. Span names become time series; attributes stay queryable.\nA minimal custom span # The API is intentionally small. You ask the global tracer provider for a tracer, start a span, put work inside a scope, and end the span in finally.\nimport io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Scope; public final class OrderService { private static final Tracer TRACER = GlobalOpenTelemetry.getTracer(\u0026#34;com.example.orders\u0026#34;, \u0026#34;1.0.0\u0026#34;); private final PaymentClient payments; public OrderService(PaymentClient payments) { this.payments = payments; } public Order placeOrder(OrderRequest request) { Span span = TRACER.spanBuilder(\u0026#34;OrderService.placeOrder\u0026#34;) .setAttribute(\u0026#34;order.id\u0026#34;, request.orderId()) .setAttribute(\u0026#34;order.items\u0026#34;, request.itemCount()) .startSpan(); try (Scope ignored = span.makeCurrent()) { Order order = persist(request); payments.charge(order); span.setStatus(StatusCode.OK); return order; } catch (RuntimeException exception) { span.recordException(exception); span.setStatus(StatusCode.ERROR, exception.getMessage()); throw exception; } finally { span.end(); } } private Order persist(OrderRequest request) { return new Order(request.orderId()); } } makeCurrent() matters. Anything you call while the Scope is open — including the HTTP client the Java agent already instruments — should become a child of OrderService.placeOrder. Without the scope, you get a floating sibling span and the waterfall stops making sense.\nAgent, SDK, or both # For most production Java services I start with the OpenTelemetry Java agent. It covers incoming HTTP, JDBC, commonly used clients, and a lot of framework glue. Custom spans like the one above sit on top of that: you add domain language the agent cannot invent.\nUse the SDK directly when you are writing a library, a non-HTTP worker, or a test that needs an in-memory exporter. The API you call (spanBuilder, setAttribute, recordException) stays the same. The difference is who installs the TracerProvider.\nWhat I leave out on purpose # Do not put secrets, tokens, or raw payloads on spans. Treat attributes as something an on-call engineer will read in a shared backend. Do not create a span per loop iteration on a tight path. Batch work, or use events on a parent span. Do name tracers after the instrumentation scope (com.example.orders), not after the process hostname. If you want a next step, export to a local collector with OTLP and open the same request in your trace UI. If the custom span is the parent of the auto-instrumented client call, the setup is doing its job.\nMore notes on talks and related projects will land on the Projects/Talks page.\n","date":"15 September 2026","externalUrl":null,"permalink":"/posts/instrumenting-java-with-opentelemetry/","section":"Blog","summary":"How to create a useful span in Java with the OpenTelemetry API, attach attributes operators can query, and keep context across an outgoing call.","title":"Instrumenting a Java service with OpenTelemetry","type":"posts"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/tags/java/","section":"Tags","summary":"","title":"Java","type":"tags"},{"content":"Notes from a Java and backend engineer who spends most of his time on OpenTelemetry, production observability, and OpenTelemetry Java open source. Conference talks from the Devoxx Morocco speaker track will land under Projects/Talks.\n","date":"15 September 2026","externalUrl":null,"permalink":"/","section":"Mohammed’s professional tech blog","summary":"Notes from a Java and backend engineer who spends most of his time on OpenTelemetry, production observability, and OpenTelemetry Java open source. Conference talks from the Devoxx Morocco speaker track will land under Projects/Talks.\n","title":"Mohammed’s professional tech blog","type":"page"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/categories/observability/","section":"Categories","summary":"","title":"Observability","type":"categories"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/tags/observability/","section":"Tags","summary":"","title":"Observability","type":"tags"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/tags/opentelemetry/","section":"Tags","summary":"","title":"Opentelemetry","type":"tags"},{"content":"Public write-ups for projects and conference talks will live here. This page is a stub so the site navigation is complete while content is prepared.\nTalks # Devoxx Morocco — speaker track\nTalk title, abstract, slides, and recording links will be added here once they are public. No unpublished abstracts or private event details belong on this page.\nProjects # Open-source and personal engineering projects will be listed here. Until then, the public trail is on GitHub: abdessattar23.\nSuggested entries later:\nOpenTelemetry Java related work (issues, PRs, notes) Sample services or demos used in talks Longer write-ups that do not fit a single blog post ","date":"15 September 2026","externalUrl":null,"permalink":"/projects/","section":"Mohammed’s professional tech blog","summary":"Public write-ups for projects and conference talks will live here. This page is a stub so the site navigation is complete while content is prepared.\nTalks # Devoxx Morocco — speaker track\n","title":"Projects / Talks","type":"page"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]