http-log-stats
Count HTTP status codes and request-duration distribution from an ingress controller's access log, over a fixed time window, in one pass.
Skill by scitix
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/scitix-http-log-stats
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Shell scripts
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/http-log-stats
What's inside
- Skill name
http-log-stats- Description
- Count HTTP status codes and request-duration distribution from an ingress controller's access log, over a fixed time window, in one pass. Use when asked "how many 503s", "how many requests took over 60s", "what's the status code / latency distribution" for a service — i.e. a MEASUREMENT question about traffic, not a "why is it broken" diagnosis (for that use ingress-debug). Run via local_script.
- License
- Apache-2.0
- Instructions
- 163 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (2)
- SKILL.md
- http-log-stats.sh · scripts/
SKILL.md (first lines)
# HTTP Access Log Statistics
Answers **measurement** questions about HTTP traffic: how many of each status
code, how the request durations distribute, how many exceeded a threshold.
This is deliberately separate from `ingress-debug`, which diagnoses *why*
traffic fails (404 / 502 / TLS / no ADDRESS). Here nothing is broken
necessarily — the user wants numbers.
## Before you run it: identify the layer
A request usually passes through several components that can each return a
status code, and the user's word for the one they mean ("router", "gateway",
"entry", "网关") rarely maps to exactly one of them. **Counting on the wrong
layer produces a confident, wrong answer**, so establish the path first:
```bash
kubectl get ingress,svc,endpoints -n <ns> | grep <service>
```
- An Ingress in front → the user's "router 503" is almost certainly the
**ingress controller's** access log. Use this skill.
- No Ingress, traffic reaches the Service directly → there is no access log to
count; the numbers must come from the application's own logs or metrics, and
the format is application-specific.
- **Do not** grep the application pod's log for the string `503`. Application
logs contain the digits 503 in request bodies, upstream error text and
unrelated fields; that count is not the number of HTTP 503 responses the
entry layer returned.
This step costs one command and routinely saves the entire investigation.
## Tool
```
local_script: cluster="<cluster>", skill="http-log-stats",
script="http-log-stats.sh", args="<args>"
```
Runs `kubectl` from the agent's own context — no debug pod, no node access.
**Set `cluster`** to the target cluster's credential name (from `cluster_list`).
`local_script` resolves it to a kubeconfig and exports `KUBECONFIG` into the
script's environment, so the `kubectl` calls inside the script pick it up
automatically. You may omit it only when the agent is bound to exactly one
cluster; with several bound, omitting it is an error listing the available
names, not a silent default.
Do **not** pass `--kubeconfig` or a `KUBECONFIG=` prefix in `args` — cluster
selection goes through the tool parameter, and the script takes no such flag.
If the name is wrong or the agent is not bound to that cluster, the call fails
with the available names; it never silently talks to the wrong cluster.
## Parameters
Required:
| Parameter | Description |
|-----------|-------------|
| `--since-time T` | Window start, RFC3339 UTC (`2026-08-17T12:02:06Z`). Absolute on purpose — see Notes. |
Optional:
| Parameter | Default | Description |
|-----------|---------|-------------|
| `--until-time T` | now | Window end, RFC3339 UTC |
| `-n, --namespace N` | `ingress-nginx` | Controller namespace |
| `--selector S` | `app.kubernetes.io/name=ingress-nginx` | Pod label selector |
| `--pod P[,P2]` | — | Explicit pod names; overrides `--selector` |
| `--match S` | — | Only count lines containing this substring (ingress name, host, or path) |
| `--buckets a,b,c` | `1,10,60` | Duration bucket edges in seconds |
| `--preset P` | `nginx-ingress` | Access log format |
## Output
```
window: 2026-08-17T12:02:06Z .. 2026-08-17T14:02:06Z
source: live cluster (kubectl logs), ns=ingress-nginx, 3 pod(s)
coverage: FULL (earliest retained line 2026-08-17T11:47:33Z)
match: my-service
parsed: 1007 lines (status 1007, request_time 1007)
status codes:
200 1000 99.3%
499 7 0.7%
request_time buckets (seconds):
<1 983 97.6%
1-10 17 1.7%
10-60 7 0.7%
>=60 0 0.0%
```
### `coverage` is part of the answer — always report it
| Value | Meaning | What to tell the user |
|-------|---------|-----------------------|
| `FULL` | Live log reaches back past the window start | Report the numbers plainly |
| `PARTIAL` | Log only reaches back to a later point | **Say so.** The counts cover only from that point on — they are a lower bound, not the window total |
| `UNAVAILABLE` | No controller pod matched | There is no live source; do not report zero |
| `UNKNOWN` | Earliest line unreadable | Treat as PARTIAL and say the bound is unverified |
A count over a window the log no longer covers is not a smaller truth, it is a
wrong number. Never present `PARTIAL` results as the window total.
## Safety
Read-only, and it creates **no files** — not even a temporary one that is
cleaned up afterwards.
- Only two cluster verbs are ever issued: `kubectl get pods` and `kubectl logs`.
Nothing is created, patched, deleted, or exec'd; no debug pod is spawned.
- No output redirection, no scratch file. Every log line is streamed through a
pipe into a single `awk` that keeps only counters in memory, so a
multi-gigabyte window costs a constant amount of RAM and zero disk.
- Shell constructs that create a temp file behind your back are avoided on
purpose: no here-doc / here-string (bash backs those with a file in `$TMPDIR`
before 5.1 and beyond the pipe buffer) and no `sort` (spills to `/tmp` above
its memory threshold). `awk` formats the report itself.From scitix/siclaw, Apache-2.0.
More from scitix/siclaw
- 0.752score
node-logs
scitix
Retrieve logs from a Kubernetes node — systemd units (journalctl) or files under /var/log.
SkillBFreshness: B★ 238Claude Code +9 - 0.752score
gateway-diagnostics
scitix
Show and ping the gateway of a network interface, on a Kubernetes node or inside a pod's network namespace.
SkillBFreshness: B★ 238Claude Code +9 - 0.749score
cluster-events
scitix
Analyze cluster-wide Kubernetes events to identify issues and patterns.
SkillBFreshness: B★ 238Claude Code +9 - 0.749score
volcano-diagnose-pod
scitix
Diagnose Volcano-managed Pod scheduling issues.
SkillBFreshness: B★ 238Claude Code +9 - 0.749score
volcano-queue-diagnose
scitix
Diagnose Volcano Queue status and resource allocation.
SkillBFreshness: B★ 238Claude Code +9 - 0.747score
volcano-resource-insufficient
scitix
Resource shortage diagnostic guide for Volcano.
SkillBFreshness: B★ 238Claude Code +9 - 0.747score
volcano-gang-scheduling
scitix
Gang Scheduling diagnostic guide for Volcano.
SkillBFreshness: B★ 238Claude Code +9 - 0.747score
quota-debug
scitix
Diagnose Kubernetes native ResourceQuota and LimitRange admission rejections (exceeded quota, forbidden by LimitRange, FailedCreate).
SkillBFreshness: B★ 238Claude Code +9 - 0.747score
manage-skill
scitix
Guides the user to the Siclaw Web page to manage Skills.
SkillBFreshness: B★ 238Claude Code +9 - 0.746score
volcano-node-resources
scitix
Query cluster node resources for Volcano scheduling.
SkillBFreshness: B★ 238Claude Code +9 - 0.746score
volcano-scheduler-config
scitix
View Volcano scheduler configuration.
SkillBFreshness: B★ 238Claude Code +9 - 0.746score
volcano-job-diagnose
scitix
Diagnose Volcano Job status and issues.
SkillBFreshness: B★ 238Claude Code +9
Signals
- Stars
- 238
- Forks
- 32
- Open issues
- 16
- Last commit (this folder)
- Aug 17, 2026 (2 months ago)
- Last release
- Sep 14, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/scitix/siclaw
- Website
- siclaw.ai
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from scitix
- 0.752score
node-logs
scitix
Retrieve logs from a Kubernetes node — systemd units (journalctl) or files under /var/log.
SkillBFreshness: B★ 238Claude Code +9 - 0.752score
gateway-diagnostics
scitix
Show and ping the gateway of a network interface, on a Kubernetes node or inside a pod's network namespace.
SkillBFreshness: B★ 238Claude Code +9 - 0.749score
volcano-queue-diagnose
scitix
Diagnose Volcano Queue status and resource allocation.
SkillBFreshness: B★ 238Claude Code +9 - 0.749score
cluster-events
scitix
Analyze cluster-wide Kubernetes events to identify issues and patterns.
SkillBFreshness: B★ 238Claude Code +9 - 0.749score
volcano-diagnose-pod
scitix
Diagnose Volcano-managed Pod scheduling issues.
SkillBFreshness: B★ 238Claude Code +9 - 0.747score
quota-debug
scitix
Diagnose Kubernetes native ResourceQuota and LimitRange admission rejections (exceeded quota, forbidden by LimitRange, FailedCreate).
SkillBFreshness: B★ 238Claude Code +9
Cite this page
http-log-stats skill. Agent Mart. https://agentmart.dev/skills/scitix-http-log-stats (last updated 2026-10-24)