agentsclimarketplace

Skills

Skill sematext/sematext-otel-onboarding/skills

OpenTelemetry onboarding for Sematext Cloud — reference examples shipping traces, metrics, and logs across multiple languages, an end-to-end multi-service tracing demo, and an open-source AI skill that walks engineers through the setup.

Install
npx -y skills add sematext/sematext-otel-onboarding --skill skills

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Wire a service's OpenTelemetry (OTel) output to Sematext Cloud for observability and monitoring. Walks through region, App-type, instrumentation flow (managed OTLP endpoint vs Sematext Agent), and signal selection (traces/metrics/logs), then produces the exact env-var block and points at a runnable reference example in this repo. Invoke when instrumenting a new app for Sematext or sending telemetry to Sematext.

SKILL.md

11.4 KB, ~2.7k tokens by cl100k_base, as published. Nobody here has run it

Sematext OTel onboarding

Use this skill to wire a service that emits OpenTelemetry data into Sematext Cloud. It is parameter-driven; work through these in order:

  1. Triage: ask the six questions below to fix region, Apps, flow, protocol, language/env, and instrumentation style.
  2. Assemble: build the env-var block from Flow A (managed OTLP) or Flow B (Sematext Agent), placeholders intact.
  3. Point: send the user to the matching reference example in this repo.
  4. Verify: confirm data lands within 60s, looping through Troubleshooting until it does.

Agent constraints

Two hard rules when running this skill:

Never handle real token values. Do not ask the user to paste an App token, and do not accept one if offered. Every env-var block you produce keeps the literal placeholders (<tracing-app-token>, etc.); the user substitutes real values themselves, outside the conversation. A token that appears in chat is in conversation history and agent context for good, and must be rotated in Sematext Cloud. If a user pastes one anyway, tell them to rotate it and continue with placeholders.

Never run the privileged commands. The sudo st-agent otel enable commands in Flow B are for the user to run in their own shell. Print them for the user to copy; do not execute them, and do not offer to.

Triage

Ask the user, in order:

  1. Which Sematext region? US or EU.
  2. Which App types are you wiring up? Tracing, Logs, Monitoring — any combination. Each App has its own token; the user must have created the App(s) already in Sematext Cloud.
  3. Which flow?
    • Managed OTLP endpoint — service ships directly to otlp-receiver.sematext.com (or EU). Simpler. Default for new users.
    • Sematext Agent — service ships to a local Sematext Agent which forwards. Required if the agent is already deployed for infra monitoring and you want one collector for everything.
  4. HTTP or gRPC? Default HTTP (http/protobuf). gRPC only if the user has a specific reason.
  5. Language and deployment env? Pick from the supported matrix below. Determines which reference example to point at and which instrumentation style (auto vs manual) to recommend.
  6. Auto or manual instrumentation? Auto = traces + metrics, zero code changes. Manual = traces + metrics + logs, requires SDK init code. OTel logs only ship via manual instrumentation. If the user wants Logs App data and is reaching for auto, flag this tradeoff.

Sematext fundamentals

  • One token per App. Each Tracing / Logs / Monitoring App has its own token, wired as a separate signal-specific header. Signals with no header are skipped.
  • Custom auth header. Sematext uses X-API-TOKEN=<token>, not Authorization: Bearer …. Hand-coded exporters that assume Bearer need overriding; the env-var path below works uniformly across SDKs.
  • Region-bound tokens. US and EU have different endpoint hostnames, and a token belongs to one region. A US token against the EU endpoint drops data silently, with no error.

Flow A — Managed OTLP endpoint

Endpoint matrix

RegionProtocolOTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_OTLP_PROTOCOL
USHTTP (default)https://otlp-receiver.sematext.comhttp/protobuf
USgRPChttps://otlp-receiver-grpc.sematext.com:443grpc
EUHTTP (default)https://otlp-receiver.eu.sematext.comhttp/protobuf
EUgRPChttps://otlp-receiver-grpc.eu.sematext.com:443grpc

Env-var block

Set the headers only for the signals the user is wiring up. Each <token> is the token of the corresponding Sematext App.

Emit this block with the placeholders intact; the user fills in real tokens themselves. See Agent constraints above. Point the user at their platform's secret store rather than a literal export: --env-file for Docker (never ENV in a Dockerfile, since it persists in the image layer), a Secret for Kubernetes, encrypted variables in CI. A plain export also writes the token to shell history.

# Endpoint + protocol — pick one row from the matrix above
export OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp-receiver.sematext.com
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf

# Per-signal token. Omit a line if the user doesn't have that App type.
export OTEL_EXPORTER_OTLP_TRACES_HEADERS=X-API-TOKEN=<tracing-app-token>
export OTEL_EXPORTER_OTLP_LOGS_HEADERS=X-API-TOKEN=<logs-app-token>
export OTEL_EXPORTER_OTLP_METRICS_HEADERS=X-API-TOKEN=<monitoring-app-token>

# Resource attributes — service.name is what shows up in the UI
export OTEL_SERVICE_NAME=my-service
export OTEL_SERVICE_VERSION=1.0.0

If the user is on auto-instrumentation, this env block plus the SDK's auto-instrumentation hook is all they need. If manual, they additionally need the SDK init code from the reference example.

Flow B — Sematext Agent

The service ships to the locally-running Sematext Agent, which forwards to Sematext Cloud. No token in the service config — the agent already has one.

Default ports

SignalPort
Traces4338
Metrics4318
Logs4328 (manual instrumentation only)

These are signal-specific, so the umbrella OTEL_EXPORTER_OTLP_ENDPOINT is not used here — the per-signal OTEL_EXPORTER_OTLP_*_ENDPOINT env vars are.

Env-var block

export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4338
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://localhost:4318
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://localhost:4328   # manual only

export OTEL_SERVICE_NAME=my-service
export OTEL_SERVICE_VERSION=1.0.0

For the user to run, once per signal type they want. These reconfigure a system service and need root, so the user runs them in their own shell. Present them for copying and do not execute them:

sudo /opt/spm/spm-monitor/bin/st-agent otel enable --type traces
sudo /opt/spm/spm-monitor/bin/st-agent otel enable --type metrics
sudo /opt/spm/spm-monitor/bin/st-agent otel enable --type logs

Each opens a local OTLP listener on the port above. Those ports are plaintext HTTP and unauthenticated, meant for same-host traffic only, so the agent should be reachable from localhost and not exposed across the network. Verify against the Sematext Agent OpenTelemetry docs before running, since paths and flags vary by agent version.

Reference examples in this repo

Once the user has picked language + env + instrumentation, send them to the corresponding directory. The READMEs there have language-specific build and run commands.

Single-service (one App at a time)

LanguageFrameworkPathFlow
Node.jsExpressnodejs/Sematext Agent
JavaSpring Bootjava/Sematext Agent
PythonFlaskpython/Sematext Agent
.NETASP.NET Coredotnet/Sematext Agent
PHPLaravelphp/Sematext Agent

Each language directory has the same structure:

{lang}/
├── README.md
├── baremetal/
│   ├── auto-instrumentation/{framework}/
│   └── manual-instrumentation/{framework}/
├── docker/
│   ├── auto-instrumentation/{framework}/
│   └── manual-instrumentation/{framework}/
└── kubernetes/
    ├── auto-instrumentation/{framework}/
    └── manual-instrumentation/{framework}/

The per-language examples target the Sematext Agent flow. If the user picked the managed OTLP flow instead, the SDK init code is identical — only the endpoint + auth headers differ (follow the env-var block in Flow A above).

End-to-end (multi-service trace with W3C context propagation)

StackPathFlow
React + Expresse2e/react-express/Managed OTLP endpoint (via backend-as-proxy for the browser-side spans)

The e2e example is the natural reference for any setup that includes browser-side OpenTelemetry — browsers can't ship OTLP directly to a remote receiver (CORS), so the frontend POSTs spans to a same-origin endpoint on its own backend, which forwards to Sematext.

Verify the data is landing

Within 60 seconds of starting the instrumented service:

SignalWhere to look
TracesTracing App → Services → look for the service.name you set
MetricsMonitoring App → look for the OTel metric names emitted by your SDK
LogsLogs App → filter by service.name

If nothing arrives, loop until it does: match the symptom in Troubleshooting below, apply the fix, restart the instrumented service, then re-check the table above after 60s. If two passes produce no data, drop to the narrowest test you can (one signal, OTEL_LOG_LEVEL=debug for exporter errors) before changing anything else.

Troubleshooting

SymptomLikely cause
No data in any App within 60sToken mismatch (region mismatch counts here too — US token on EU endpoint silently fails)
Traces but no metricsAuto-instrumentation doesn't enable metrics in all SDKs by default; check SDK-specific flag
Auto-instrumented but no logsExpected — auto only covers traces + metrics. Switch to manual for logs.
Connection refused on agent portsAgent not running, or st-agent otel enable --type <signal> not run for that signal
Connection refused on managed endpointWrong protocol (gRPC URL with HTTP protocol setting or vice versa)
Traces dropped intermittentlyBatch size or queue full — bump OTEL_BSP_MAX_QUEUE_SIZE
TLS errors against managed endpointOld SDK / system CA bundle missing — update OS certs or SDK. Do not "fix" this by disabling certificate verification or setting the exporter to insecure; that sends the App token over an unverified connection.
X-API-TOKEN header rejectedHand-coded exporter that forces Authorization: Bearer; remove that and use the OTEL_EXPORTER_OTLP_*_HEADERS env var path instead
CORS errors (browser/RUM)Managed OTLP endpoint is server-to-server; browser-side instrumentation needs a different surface

Next steps after the user has data flowing

  • Tracing App → set up a few starter alert rules (the platform now ships defaults: high response time, error count, HTTP 5xx, slow DB ops, volume anomaly, error rate anomaly).
  • Monitoring App → if the user also runs the Sematext Agent for infrastructure, the OTel metrics will correlate with infra metrics automatically.
  • Logs App → if the user wants logs correlated with traces, ensure traceId / spanId are emitted with each log record (manual instrumentation gives full control over this).

Resources

Gives 0 of the 12 instructions most monitoring observability skills give in ~2.7k tokens

Counted across 481 of the 483 authors here whose files we hold, read 2026-08-06

  • link every alert to a runbookin 43 of 481, across 35 files
  • use structured json loggingin 36 of 481, across 31 files
  • alert on user-facing symptomsin 20 of 481, across 15 files
  • emit structured JSON logs with stable event namesin 18 of 481, across 13 files
  • propagate trace context across boundariesin 16 of 481
  • use histograms for latency trackingin 14 of 481, across 9 files
  • use OpenTelemetry for distributed tracingin 13 of 481, across 8 files
  • include a correlation ID on every log linein 13 of 481, across 8 files
  • Define service level objectivesin 10 of 481, across 7 files
  • Call useAzureMonitor before importing other modulesin 9 of 481, across 2 files
  • stop and ask for clarification if inputs are missingin 9 of 481, across 2 files
  • define on-call questions before adding telemetryin 9 of 481, across 4 files

Said here and by no other author read

  • ask the six triage questions in order
  • emit the env-var block with placeholders intact
  • point the user to the matching reference example
  • confirm telemetry data lands within 60 seconds
  • loop through troubleshooting until data arrives
  • instruct the user to rotate any pasted token

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.