Skip to main content

server-sentinel

Did it crash the same way as last time?

Your server went down for the fourth time this week. Is that one fault repeating, or four different ones? Scrolling the log barely helps, because every crash looks alike.

Sentinel fingerprints each crash from its cause and the mod in the trace, so a repeat is obvious:

$ server-sentinel watch logs/latest.log

[12:05:00] CRASH
           cause:   java.lang.NullPointerException: Cannot invoke
                    "Entity.getX()" because "e" is null
           culprit: examplemod-2.1.11.jar
           sig:     0429a917c82d
[12:11:02] CRASH (repeat #2)
           cause:   java.lang.NullPointerException: Cannot invoke
                    "Entity.getX()" because "e" is null
           culprit: examplemod-2.1.11.jar
           sig:     0429a917c82d

           THIS IS THE SAME CRASH AS 1 TIME(S) ALREADY.
           Restarting will reproduce it. Fix the cause above first.

Line numbers are stripped out of the fingerprint, so the same bug thrown from a slightly different place still matches. One signature seen three times is a pattern; three signatures seen once each are three problems. That distinction is the whole point.

Read-only, by design

It tails the log. It never writes to your world, never sends a command, never restarts anything. The worst it can do is be wrong about a label.

Honest limits

  • A signature is built from the cause and the mod at fault, so two genuinely different bugs with the same cause in the same mod will collide.
  • If it cannot identify a cause or a culprit, it says so and does not fingerprint the crash at all. It will not tell you two crashes match when it could not read either of them.
  • It sees what the log says. A hard lock-up that writes nothing looks like silence, not a crash.
  • It does not restart your server, deliberately.

Install

pip install server-sentinel

One module, Python 3.8+, no dependencies -- it imports nothing outside the standard library.

More

What the paid edition adds: guard, which supervises the server, restarts it when it dies, and refuses to restart into a crash signature it has already seen -- so one bad mod stops being an all-night loop that fills the disk with identical crash reports. Plus webhook alerts and a JSON event log.

Two bugs worth knowing about, both found by feeding real logs through end to end rather than by unit-testing the function: the signature used to be computed at the crash marker, before the trace it describes had arrived; and a crash with no readable cause used to be hashed as the empty string, giving every unreadable crash the same fingerprint and a confident "this is the same crash" about a cause the tool had never identified.

Diagnostic pages for every finding: https://jaakoby.github.io/fix/ Source: https://github.com/jaakoby/server-sentinel Full edition: https://kaiven.gumroad.com/l/server-sentinel


Built by Jakoby Tuckta with Claude. Every claim above is something the tool does on a real log; see the repo's tests.

Metadata

Release files for server-sentinel 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for server-sentinel 1.0.0
File Size Uploaded
server_sentinel-1.0.0.tar.gz 9.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for server-sentinel 1.0.0
File Interpreter ABI Platform
server_sentinel-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.5 kB

Release files / server_sentinel-1.0.0.tar.gz

Download URL server_sentinel-1.0.0.tar.gz
Size 9.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a4384ba7504ba93062263ea4d9ffa862cbd2ebaa652450e0b7de2363e27a2583
BLAKE2b-256 checksum
How to use checksums
1fdadac6613a206d8caa0b54abec7add678882f43013c3aff32d0a1d48ba991e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / server_sentinel-1.0.0-py3-none-any.whl

Download URL server_sentinel-1.0.0-py3-none-any.whl
Size 10.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dfe9dd892b6079e39e630ede2d1053be7c7a5aebd9df31d520cac703bca7b041
BLAKE2b-256 checksum
How to use checksums
96990543a388aae6017a5dad7cf34a300d92edcada8aa150e122ac69bf6ac776
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page