scryops
menu
01
Guide 8 min read

OpenTelemetry: What It Is and How It Fits Together

OpenTelemetry is a single instrumentation layer that produces traces, metrics, and logs in a vendor-neutral format. This guide explains what each signal is for, how the SDK and Collector relate, and where to go next.
02
How-to 8 min read

How to Wire Trace IDs Into Your Logs

Logs and traces live in separate worlds until you connect them. Put the trace ID on every log line in .NET, Java, Go or Python, check where each runtime actually writes it, and make the field name a contract your backend can use.
03
Guide 12 min read

Log Levels: When to Whisper, Speak, or Shout

Log levels are the emotional register of your system's voice. How to use ERROR, WARN, INFO, DEBUG and TRACE consistently, how they map onto OpenTelemetry's severity numbers, and what each one costs you.
04
Guide 9 min read

Logging Foundations

What logging is for, how it fits next to metrics and traces, and what to log, where and how. The mental model to have before touching a logging framework, and the starting point for the rest of the logging guides.
05
Guide 8 min read

Structured Logging: Teaching Machines to Read

Logs were designed for humans grepping text files at 2am. Now they also have to feed query engines, correlation and anomaly detection. Here's what that changes about what you write, and which field names to use.
06
Q&A 4 min read

Why are my structured logs still unstructured strings?

Three patterns that look like structured logging but aren't, in C#, Java, Go and Python, and what to write instead.
07
How-to 9 min read

Enrich Logs with Business Context in .NET

A log line that says 'payment failed' tells you something broke. One that says 'payment failed, enterprise customer, checkout-v2 experiment' tells you what to do about it. Here's how to add that context to every log event in a .NET service, safely, with Serilog.
08
How-to 10 min read

Scrub PII from Application Logs in .NET

Keep personal data out of your .NET logs before they leave the process: classify fields so the logger erases or pseudonymises them, scrub free text and exception messages in an OpenTelemetry processor, and prove nothing leaks.
09
Guide 11 min read

Async Logging: Keeping Your Application Threads Free

A synchronous log write makes the request thread wait on disk or network I/O. Async logging hands that work to a background thread, and quietly adds a queue that can fill up, drop records and lose them at shutdown. How to size it, watch it and flush it, with Serilog, the OpenTelemetry SDK and Python.
10
Guide 9 min read

Common Logging Pitfalls and How to Avoid Them

The same logging mistakes turn up in every team and every stack: inconsistent field names, values buried in message strings, missing trace context, personal data and secrets in error logs, and loops that log the same thing ten thousand times. Here is where to look and what to fix.
11
Guide 8 min read

Log Context Enrichment: Adding Meaning to Your Events

Enrichment turns isolated log records into connected business events. Here is the architecture that makes it work — static resource attributes, background-refreshed caches, and per-request scopes — without taxing the request path.
12
Guide 8 min read

Implementing Audit Trails with OpenTelemetry

An audit trail is not a log. It's a tamper-evident, time-ordered record of who did what, when, and why. Most teams build this wrong. Here is how to do it correctly using OpenTelemetry and append-only storage.
13
Guide 11 min read

Log-Based Monitoring: Alerting on the Evidence

Logs carry operational state at a resolution metrics can't match. Most teams only open them after something breaks. This guide covers how to query them continuously, turn them into metrics, and alert on what they surface without blowing up cardinality or cost.
14
How-to 8 min read

Set Up Log-Based Alerting with Loki and Grafana

Turn a LogQL query into a Grafana-managed alert rule that fires on error volume, a specific error type or a failing dependency. Covers the query, the rule settings that trip people up, routing to PagerDuty and Slack, and an end-to-end test.
15
Guide 10 min read

Distributed Logging: Ten Services, One Story

When a request crosses ten services, you get ten log streams that share nothing but a timestamp you can't trust. How to collect them on every node, carry the trace ID through, ship them through the OpenTelemetry Collector, and notice when lines go missing.
16
Guide 9 min read

High-Throughput Logging: Keeping the Hot Path Fast

At hundreds of thousands of requests per second, the logging call itself becomes the bottleneck. Async channels, pooling, batching, and circuit breakers keep log I/O off the request thread.
17
Guide 11 min read

High-Throughput Logging: Sampling, Collectors, and the Wire

At 1.5 million log events per second you cannot keep, batch, or ship everything the way you did at moderate scale. Content-aware sampling, OTel exporter tuning, Collector-side batching, and cheaper bytes on the wire.
18
How-to 6 min read

How to Benchmark Synchronous vs Channel Logging

Async logging is supposed to take I/O off the request thread. Measure it: a sync-vs-channel benchmark under concurrent producers, in .NET, Go, or Python, and how to read the result.