blob: d821787af212225a4ce51763f9a57bbb2dd62856 [file] [view]
# Tracing
The agent creates SkyWalking trace segments and sends them to OAP over gRPC. Supported plugins
create spans around HTTP, framework, database, cache, messaging, and AWS SDK calls.
## How tracing starts
Start the agent before the modules that it must patch. See
[Start and stop the agent](../setup/startup-and-shutdown.md).
For an incoming HTTP request, the HTTP plugin reads the SkyWalking `sw8` trace header. A valid
header links the new span to its parent. When the header is absent, the plugin starts a new trace.
A malformed `sw8` header is not recorded as a new trace. For an outgoing HTTP request, the plugin
writes the `sw8` header.
The HTTP operation name normally contains the method and path. An HTTP status code of 400 or higher
marks the span as an error. Plugins can add more tags, logs, component IDs, and peer information.
## Filter HTTP traces
Use these settings to avoid recording requests that do not help you:
- `SW_IGNORE_SUFFIX` filters a request path by suffix.
- `SW_TRACE_IGNORE_PATH` filters an operation name by a pattern.
- `SW_HTTP_IGNORE_METHOD` filters a request by HTTP method.
Incoming HTTP and Express operation names use `METHOD:/path`, such as `GET:/orders`. Outgoing HTTP
operation names use `/path`. `SW_TRACE_IGNORE_PATH` accepts comma-separated patterns:
| Pattern | Meaning | Example match |
| --- | --- | --- |
| `?` | One character except `/` | `GET:/user/?` matches `GET:/user/1`. |
| `*` | Zero or more characters except `/` | `GET:/assets/*` matches `GET:/assets/a.js`. |
| `**` | Zero or more characters across path parts | `**/internal/**` matches incoming and outgoing nested paths. |
Example:
```bash
export SW_TRACE_IGNORE_PATH='**/health,**/internal,**/internal/**'
export SW_HTTP_IGNORE_METHOD='OPTIONS,HEAD'
```
An ignored trace sends ignored state to supported downstream services. This prevents a later
service from recording a partial trace without its parent.
## Buffer and timeout
Finished segments wait in memory until the reporter sends them. `SW_AGENT_MAX_BUFFER_SIZE` controls
the number of finished segments that can wait. When this buffer is full, the oldest finished
segment is removed.
The same value limits active trace segments. When the active limit is reached, new work uses an
ignored context until the reporter resets the limit. This ignored state is sent to supported
downstream services.
`SW_AGENT_TRACE_TIMEOUT` sets the gRPC request deadline in milliseconds. It applies to trace and
meter reports and to service registration and heartbeat requests. Reporting errors do not stop
application requests. The agent limits repeated connection error logs to avoid a log storm.
## Database statements and parameters
Database plugins can record a statement or command. SQL and MongoDB parameter values are disabled
by default. Enable them only when their data is safe to send to OAP:
```bash
export SW_SQL_TRACE_PARAMETERS=true
export SW_SQL_PARAMETERS_MAX_LENGTH=512
export SW_MONGO_TRACE_PARAMETERS=true
export SW_MONGO_PARAMETERS_MAX_LENGTH=512
```
These values may include secrets or personal data. The length settings limit text size but do not
remove private values.
## Cold start tag
The first span made by the process gets the tag `coldStart=true`. Set `SW_COLD_ENDPOINT=true` to
also add `<cold>` to that operation name.
## Manual instrumentation status
The package exports `ContextManager` and `config`, and some applications use `ContextManager` to
create manual spans. This use is not documented as a stable manual instrumentation API and is not
covered by compatibility guarantees. Use the built-in plugins when possible.
The package does not provide a public API for custom business metrics. For business metrics,
consider the
[SkyWalking OpenTelemetry receiver](https://skywalking.apache.org/docs/main/next/en/setup/backend/opentelemetry-receiver/).