telnyx-edge logs
command, no log dashboard, and no metrics or traces. console.log output from a running
function is not readable anywhere. What you can observe is built from three things — the
CLI’s control-plane views, your function’s own health endpoint, and structured events your
function emits over HTTPS to a collector you run.
Control-plane visibility
The CLI answers “is it deployed, and where does it answer” — not “what is it doing”:
Add
-v to any command for verbose client-side logging when a command itself misbehaves.
None of this shows requests, errors, or output from the running container. For that, read on.
Health checks
The scaffolded TypeScript and JavaScript entrypoints answer/health before any other
routing:
/health through SmallRye Health; in Go and Python, add an equivalent route yourself.
HTTP is the only trigger, so probing is external by design: point an uptime monitor — or
a scheduled job such as a GitHub Actions cron — at
https://<func-name>-<org>.telnyxcompute.com/health.
Emit events to a sink you run
Since nothing shows you a running function’s output, the pattern is to send structured events over HTTPS to a collector you control — any log store with an HTTP ingest endpoint works. Store the collector’s credential as a secret, never in code. Declare the secret infunc.toml and store its value:
- Propagate a request id. Read
X-Request-IDor generate one, return it in the response, and attach it to every event — a user-reported failure becomes findable in your sink. - Log metadata, not payloads. Method, path, status, duration. Never secret values, and not full request bodies, which may carry PII.
- Buffering trades loss for volume. The per-request emit above is the simple, safe default. If volume demands batching, remember events buffered in memory are gone when the container stops — see Execution model for the container lifecycle.
env.SECRETS binding is TypeScript-only, but secrets are also injected as plain
environment variables into every function, so the same pattern works in any runtime: read
the key from the environment (os.Getenv("LOG_SINK_KEY") in Go, os.environ in Python)
and POST JSON to your sink.
Next Steps
- Best Practices — error handling and outbound-call deadlines the emitter should respect
- Limits — the 30 s default / 60 s max request budget your telemetry lives inside
- Secrets — both access surfaces for the sink credential
- CLI Reference — full flags for
list,inspect,status, andrevisions