Logs and monitoring
Silo is in active development before 1.0. These guides are updated frequently.
Use Admin > Logs > Server Log for searchable server logs. Use the container logs when Silo fails before the web app is available.
View logs
Section titled “View logs”From the directory that holds your Compose file:
docker compose logs --tail 100 --timestamps siloAdd --follow to watch new lines while you reproduce a problem. Press Ctrl+C to stop watching; Silo keeps running.
In Admin > Logs > Server Log, search around the time of the failure by message, component, request ID, or playback session ID. On the Application tab, narrow the list with Level and Component.
- Level shows only entries at the level you pick:
debug,info,warn, orerror. Pickingwarndoesn’t include errors. All levels removes the filter.debugentries appear only if they’re enabled withopslog.capture_level, which is off by default; see Log settings. - Component suggests known components as you type, and accepts any other name, such as
apiv2ornotifications.fanout. The name has to match exactly, sonotificationsdoesn’t shownotifications.fanoutentries. Clear the field to show every component.
Both filters apply to the live list and to Browse log history. They’re kept in the page address, so a reload or a shared link opens with the same filters.
Early database and migration messages can appear only in the container logs, because Silo writes them before the admin log starts collecting.
Review the audit log
Section titled “Review the audit log”The Audit tab in Admin > Logs > Server Log lists nearly every request to your server, including page loads and failed sign-ins: who made each one under Actor, when, and the status code. Changes an administrator makes to accounts and access groups also show what changed under Action / changes and which account or group under Target. Other requests show HTTP request.
- Narrow the list by action, such as
user.updatedoraccess_group.updated, by actor account ID, or by target type and ID. - Choose Browse log history to page through older entries with Older and Newer.
- If the live list disconnects, choose Reconnect, then check history for anything that arrived in between.
Changed fields show their old and new values, and permission changes list the permissions before and after. A password change shows only that the password changed.
If an administrator acted as another account, Actor shows both, for example #1 (as #7), where #1 is the administrator. Filtering by actor finds the administrator, not the account they acted as. The filters are kept in the page address, so a shared link shows the account IDs you filtered by.
A Status of 499 means the client closed the connection before Silo finished answering, for example when someone leaves a page while it loads. Silo doesn’t send it; it only records it. A server error that happens after the client has left is recorded as 499 too, so check the Application tab around the same time for the cause.
Log settings
Section titled “Log settings”On Admin > Logs > Settings, under Server log:
| Setting | Effect | Takes effect |
|---|---|---|
| Log level | Lowest level written to the container log and to OpenTelemetry export | Immediately |
| Quiet log prefixes (under Advanced) | Drops lines that start with any of these words | Immediately |
Set Log level to Debug only while you collect a short sample, then set it back.
Admin > Logs > Server Log has its own threshold and keeps Info and above by default, so Debug doesn’t add lines there. Two stored settings have no control in the web app. You can change them through the admin API, and both need a restart:
opslog.capture_level: the lowest level kept in Admin > Logs > Server Log (debug,info,warn, orerror)server.log_format:textorjsonin the container log
Redaction
Section titled “Redaction”Silo masks structured fields with secret-like names, such as passwords, tokens, authorization headers, and cookies. It cannot recognize every secret inside free-form message text.
Read an excerpt before sharing it. Remove account details, private paths or titles, and credentials. Plugin output needs the same review. Report a problem explains what to include.
Retention
Section titled “Retention”Set how long the Application tab keeps entries on Admin > Logs > Settings, under Log retention: Delete log entries older than and Maximum log size, and Maximum log entries under Advanced. The Audit tab keeps entries for 90 days.
Docker keeps container logs separately. For Docker’s json-file driver, a Compose override can cap them:
services: silo: logging: driver: json-file options: max-size: "50m" max-file: "5"Add this to your existing override if you have one. Applying it recreates the container, which interrupts playback.
Metrics
Section titled “Metrics”To collect Prometheus metrics and alerts, see Monitor Silo with Prometheus. Read node status lists the proxy and transcode node series and example alerts. For health and readiness checks, see Check server health.
OpenTelemetry export
Section titled “OpenTelemetry export”To send logs and traces to an existing OpenTelemetry collector, add its endpoint and protocol to .env, then recreate the container with docker compose up -d:
OTEL_EXPORTER_OTLP_ENDPOINT=https://collector.example.comOTEL_EXPORTER_OTLP_PROTOCOL=http/protobufReplace the example with your collector’s address and configure the authentication and certificates it needs. Setting OTEL_EXPORTER_OTLP_ENDPOINT turns export on. Setting only the per-signal endpoint variables does not; set SILO_OTEL_ENABLED=true in that case. Inside Docker, localhost does not reach a collector in another container, so use a hostname the Silo container can reach.
Export is best effort. If the collector fails, requests, the container log, and Admin > Logs > Server Log keep working, but buffered export data can be lost. Keep history you need at the collector. With metrics turned on, silo_otel_export_records_total{outcome="error"} counts failed exports.
Trace sampling
Section titled “Trace sampling”Silo sends traces for 1% of requests by default. To change that, set the ratio in .env and recreate the container:
OTEL_TRACES_SAMPLER_ARG=0.1OTEL_TRACES_SAMPLER_ARG is a number from 0 to 1, and the default is 0.01. Use 1 (every request) only while you investigate a specific problem, then set it back.
OTEL_TRACES_SAMPLER chooses how Silo samples: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, or parentbased_traceidratio. The default is parentbased_traceidratio, and Silo uses it for any value it doesn’t support.