fairvisor logs

fairvisor logs reads newline-delimited JSON from stdin and outputs only the lines matching the given filters. It is designed to be piped from a docker logs or kubectl logs command.

Synopsis

fairvisor logs [--action=ACTION] [--reason=REASON]

Options

Flag Description
--action Filter to lines where entry.action equals this value (allow, reject, throttle)
--reason Filter to lines where entry.reason equals this value (see Reject Reasons)

Both filters are applied with AND logic: a line must match all provided filters to pass through.

Log format

Fairvisor emits structured JSON log lines on each decision. Example:

{
  "time": "2026-01-15T10:00:00Z",
  "action": "reject",
  "reason": "token_bucket_exceeded",
  "policy_id": "api-rate-limit",
  "rule_name": "per-key-limit",
  "client_ip": "10.0.0.5",
  "path": "/api/v1/users",
  "method": "GET",
  "latency_us": 42
}

Examples

# Show only rejected requests
docker logs fairvisor -f | fairvisor logs --action=reject

# Show only budget_exceeded rejections
kubectl logs -f deployment/fairvisor | fairvisor logs --action=reject --reason=budget_exceeded

# Count rejections per reason
docker logs fairvisor | fairvisor logs --action=reject \
  | jq -r .reason | sort | uniq -c | sort -rn

# Tail and filter in real time
docker logs --tail=0 -f fairvisor | fairvisor logs --action=reject

Exit codes

fairvisor logs runs indefinitely until EOF or SIGINT. It always exits 0.