[{"data":1,"prerenderedAt":2846},["ShallowReactive",2],{"guide-\u002Fguides\u002Fen\u002Fcronjob-monitoring":3,"related-guides-en-uptime-monitoring-incident-management-self-hosted-statuspage":853},{"id":4,"title":5,"body":6,"category":833,"description":834,"extension":835,"faq":836,"meta":837,"navigation":333,"path":838,"peerSlug":839,"publishedAt":840,"readingTime":841,"relatedComparisons":842,"relatedGuides":846,"seo":850,"stem":851,"updatedAt":836,"__hash__":852},"guides\u002Fguides\u002Fen\u002Fcronjob-monitoring.md","Cron Job Monitoring: Heartbeat Monitoring in Practice",{"type":7,"value":8,"toc":814},"minimark",[9,14,29,37,50,56,60,63,68,71,97,100,170,177,181,188,195,199,202,246,253,257,260,294,298,302,305,355,358,362,365,390,416,420,423,504,508,523,544,550,554,580,606,610,613,707,723,727,742,765,768,772,775,804,810],[10,11,13],"h2",{"id":12},"why-cron-jobs-fail-silently","Why cron jobs fail silently",[15,16,17,18,23,24,28],"p",{},"A crashed web server gets noticed immediately: visitors see error pages, ",[19,20,22],"a",{"href":21},"\u002Fen\u002Fguides\u002Fuptime-monitoring","uptime monitoring"," fires an alert, support tickets roll in. A cron job that stopped running gets noticed by ",[25,26,27],"strong",{},"nobody"," — until it is too late.",[15,30,31,32,36],{},"The nightly backup, the invoice run on the first of the month, the queue worker, the import from your ERP system: none of these jobs have a port, a URL, or users who complain. When they fail, no error appears — simply ",[33,34,35],"em",{},"nothing"," happens. And that is exactly what makes them dangerous:",[38,39,40,44,47],"ul",{},[41,42,43],"li",{},"A backup script that has not run for three months gets noticed the moment you need the backup.",[41,45,46],{},"A stuck invoice run only surfaces when customers call asking where their invoice went.",[41,48,49],{},"A stopped queue worker silently piles up thousands of jobs until memory runs out.",[15,51,52,53],{},"Classic monitoring does not help here. An HTTP check can verify that your website responds — but no monitoring system in the world can see from the outside whether a script on your server ran last night. The solution is to invert the principle: ",[25,54,55],{},"the monitoring does not ask the job — the job reports to the monitoring.",[10,57,59],{"id":58},"how-heartbeat-monitoring-works","How heartbeat monitoring works",[15,61,62],{},"Heartbeat monitoring (also called a dead man's switch, after the safety device in a train cab) is built on a missing signal: the job sends a short sign of life after every successful run. If the sign of life stays out, an alert fires.",[64,65,67],"h3",{"id":66},"ping-url-and-expectation-window","Ping URL and expectation window",[15,69,70],{},"The flow takes three steps to explain:",[72,73,74,85,91],"ol",{},[41,75,76,79,80,84],{},[25,77,78],{},"Ping URL:"," The monitoring provides a unique URL for each job. The job calls it at the end via HTTP — a single ",[81,82,83],"code",{},"curl"," is enough.",[41,86,87,90],{},[25,88,89],{},"Expectation window:"," From the job's schedule (cron expression or \"every 15 minutes\"), the monitoring calculates when the next ping is due.",[41,92,93,96],{},[25,94,95],{},"Alert:"," If the ping does not arrive within the window, the job counts as failed — and alerting kicks in.",[15,98,99],{},"In the crontab, it looks like this:",[101,102,107],"pre",{"className":103,"code":104,"language":105,"meta":106,"style":106},"language-bash shiki shiki-themes github-light github-dark","# Backup at 2:00 AM — ping ONLY on success\n0 2 * * * \u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh && curl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull https:\u002F\u002Fmonitoring.example.com\u002Fping\u002Fa1b2c3\n","bash","",[81,108,109,118],{"__ignoreMap":106},[110,111,114],"span",{"class":112,"line":113},"line",1,[110,115,117],{"class":116},"sJ8bj","# Backup at 2:00 AM — ping ONLY on success\n",[110,119,121,125,129,132,134,136,140,144,146,149,152,155,158,161,164,167],{"class":112,"line":120},2,[110,122,124],{"class":123},"sScJk","0",[110,126,128],{"class":127},"sj4cs"," 2",[110,130,131],{"class":127}," *",[110,133,131],{"class":127},[110,135,131],{"class":127},[110,137,139],{"class":138},"sZZnC"," \u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh",[110,141,143],{"class":142},"sVt8B"," && ",[110,145,83],{"class":123},[110,147,148],{"class":127}," -fsS",[110,150,151],{"class":127}," -m",[110,153,154],{"class":127}," 10",[110,156,157],{"class":127}," --retry",[110,159,160],{"class":127}," 5",[110,162,163],{"class":127}," -o",[110,165,166],{"class":138}," \u002Fdev\u002Fnull",[110,168,169],{"class":138}," https:\u002F\u002Fmonitoring.example.com\u002Fping\u002Fa1b2c3\n",[15,171,172,173,176],{},"The ",[81,174,175],{},"&&"," here is not a detail — it is the core of the whole setup. More on that in a moment.",[64,178,180],{"id":179},"sizing-the-grace-period","Sizing the grace period",[15,182,183,184,187],{},"No job runs for exactly the same duration every time. To keep natural variance from triggering false alarms, there is the ",[25,185,186],{},"grace period",": a buffer after the expected time before the alert fires.",[15,189,190,191,194],{},"The rule of thumb: base it on the ",[33,192,193],{},"maximum"," realistic runtime, not the average. If your backup normally takes 5 to 15 minutes, a grace period of 30 minutes is reasonable. Set it too tight and it produces false alarms and alert fatigue — set it too generously and it gives away reaction time. For jobs with highly variable runtimes, start pings plus a runtime limit beat an overstretched grace period.",[64,196,198],{"id":197},"start-and-end-pings","Start and end pings",[15,200,201],{},"Advanced setups send two signals: one when the job starts, one at the end. That makes three states distinguishable that a single ping cannot separate:",[203,204,205,218],"table",{},[206,207,208],"thead",{},[209,210,211,215],"tr",{},[212,213,214],"th",{},"Signal pattern",[212,216,217],{},"Meaning",[219,220,221,230,238],"tbody",{},[209,222,223,227],{},[224,225,226],"td",{},"No start ping",[224,228,229],{},"Job never started (cron daemon, crontab, server)",[209,231,232,235],{},[224,233,234],{},"Start ping without end ping",[224,236,237],{},"Job started but crashed or hangs",[209,239,240,243],{},[224,241,242],{},"Start + end, but excessive duration",[224,244,245],{},"Job runs, but something slows it down",[15,247,248,249,252],{},"As a bonus, the ",[25,250,251],{},"runtime becomes measurable"," — and a job that gets gradually slower stands out before it grows into the time window of its next run. Some services additionally accept an explicit fail ping with an exit code: the job then reports its failure immediately instead of surfacing only after the expectation window expires.",[10,254,256],{"id":255},"the-four-failure-modes-of-a-cron-job","The four failure modes of a cron job",[15,258,259],{},"Cron jobs fail in four fundamentally different ways — and each needs a different detection mechanism:",[72,261,262,276,282,288],{},[41,263,264,267,268,271,272,275],{},[25,265,266],{},"The job does not run at all."," Server down, cron daemon stopped, crontab overwritten during a deployment, typo in the schedule. The treacherous part: ",[33,269,270],{},"no"," log entry is created, because nothing runs. This failure class is detectable ",[25,273,274],{},"only"," via a dead man's switch.",[41,277,278,281],{},[25,279,280],{},"The job hangs or runs too long."," A hanging database query, a blocked mount, a lock that was never released. Detection: start ping without end ping, or a breached runtime limit.",[41,283,284,287],{},[25,285,286],{},"The job runs too often."," A duplicated crontab entry, the same job on two servers, overlap with the previous run. Detection: pings outside the expected schedule.",[41,289,290,293],{},[25,291,292],{},"The job completes — but the result is wrong."," The most dangerous case: exit code 0, ping sent, but the backup is a 0-byte file. No external monitoring helps here — the script itself must validate its result (file size, row count, checksum) and exit with an error when in doubt.",[10,295,297],{"id":296},"best-practices-for-reliable-pings","Best practices for reliable pings",[64,299,301],{"id":300},"instead-of-semicolon","&& instead of semicolon",[15,303,304],{},"The single most important tip in this guide. These two lines look almost identical and separate a working monitoring setup from a useless one:",[101,306,308],{"className":103,"code":307,"language":105,"meta":106,"style":106},"# CORRECT: ping only if backup.sh exits with 0\nbackup.sh && curl -fsS https:\u002F\u002Fmonitoring.example.com\u002Fping\u002Fa1b2c3\n\n# WRONG: ping is ALWAYS sent — even if backup.sh fails\nbackup.sh ; curl -fsS https:\u002F\u002Fmonitoring.example.com\u002Fping\u002Fa1b2c3\n",[81,309,310,315,328,335,341],{"__ignoreMap":106},[110,311,312],{"class":112,"line":113},[110,313,314],{"class":116},"# CORRECT: ping only if backup.sh exits with 0\n",[110,316,317,320,322,324,326],{"class":112,"line":120},[110,318,319],{"class":123},"backup.sh",[110,321,143],{"class":142},[110,323,83],{"class":123},[110,325,148],{"class":127},[110,327,169],{"class":138},[110,329,331],{"class":112,"line":330},3,[110,332,334],{"emptyLinePlaceholder":333},true,"\n",[110,336,338],{"class":112,"line":337},4,[110,339,340],{"class":116},"# WRONG: ping is ALWAYS sent — even if backup.sh fails\n",[110,342,344,346,349,351,353],{"class":112,"line":343},5,[110,345,319],{"class":123},[110,347,348],{"class":142}," ; ",[110,350,83],{"class":123},[110,352,148],{"class":127},[110,354,169],{"class":138},[15,356,357],{},"With the semicolon, the job reports success even when the backup failed. The monitoring shows permanent green — which is worse than no monitoring at all, because it creates false confidence.",[64,359,361],{"id":360},"calling-curl-correctly","Calling curl correctly",[15,363,364],{},"The ping itself must neither stall nor break the job. The proven flag combination:",[101,366,368],{"className":103,"code":367,"language":105,"meta":106,"style":106},"curl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull https:\u002F\u002Fmonitoring.example.com\u002Fping\u002Fa1b2c3\n",[81,369,370],{"__ignoreMap":106},[110,371,372,374,376,378,380,382,384,386,388],{"class":112,"line":113},[110,373,83],{"class":123},[110,375,148],{"class":127},[110,377,151],{"class":127},[110,379,154],{"class":127},[110,381,157],{"class":127},[110,383,160],{"class":127},[110,385,163],{"class":127},[110,387,166],{"class":138},[110,389,169],{"class":138},[38,391,392,398,404,410],{},[41,393,394,397],{},[81,395,396],{},"-m 10"," — timeout: the ping never hangs longer than 10 seconds, even if the monitoring is unreachable.",[41,399,400,403],{},[81,401,402],{},"--retry 5"," — transient network errors get absorbed instead of producing a false alarm.",[41,405,406,409],{},[81,407,408],{},"-fsS"," — silent on success, but errors stay visible in the log.",[41,411,412,415],{},[81,413,414],{},"-o \u002Fdev\u002Fnull"," — the response body does not matter, only the delivery.",[64,417,419],{"id":418},"preventing-overlaps-and-hangs","Preventing overlaps and hangs",[15,421,422],{},"Two small standard tools solve two big problem classes:",[101,424,426],{"className":103,"code":425,"language":105,"meta":106,"style":106},"# flock: prevents a new run from starting while the old one is still running\n0 * * * * flock -n \u002Ftmp\u002Fimport.lock \u002Fusr\u002Flocal\u002Fbin\u002Fimport.sh && curl -fsS https:\u002F\u002F…\u002Fping\u002Fimport\n\n# timeout: a job can never hang forever (exit 124 after 25 minutes)\n0 2 * * * timeout 25m \u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh && curl -fsS https:\u002F\u002F…\u002Fping\u002Fbackup\n",[81,427,428,433,466,470,475],{"__ignoreMap":106},[110,429,430],{"class":112,"line":113},[110,431,432],{"class":116},"# flock: prevents a new run from starting while the old one is still running\n",[110,434,435,437,439,441,443,445,448,451,454,457,459,461,463],{"class":112,"line":120},[110,436,124],{"class":123},[110,438,131],{"class":127},[110,440,131],{"class":127},[110,442,131],{"class":127},[110,444,131],{"class":127},[110,446,447],{"class":138}," flock",[110,449,450],{"class":127}," -n",[110,452,453],{"class":138}," \u002Ftmp\u002Fimport.lock",[110,455,456],{"class":138}," \u002Fusr\u002Flocal\u002Fbin\u002Fimport.sh",[110,458,143],{"class":142},[110,460,83],{"class":123},[110,462,148],{"class":127},[110,464,465],{"class":138}," https:\u002F\u002F…\u002Fping\u002Fimport\n",[110,467,468],{"class":112,"line":330},[110,469,334],{"emptyLinePlaceholder":333},[110,471,472],{"class":112,"line":337},[110,473,474],{"class":116},"# timeout: a job can never hang forever (exit 124 after 25 minutes)\n",[110,476,477,479,481,483,485,487,490,493,495,497,499,501],{"class":112,"line":343},[110,478,124],{"class":123},[110,480,128],{"class":127},[110,482,131],{"class":127},[110,484,131],{"class":127},[110,486,131],{"class":127},[110,488,489],{"class":138}," timeout",[110,491,492],{"class":138}," 25m",[110,494,139],{"class":138},[110,496,143],{"class":142},[110,498,83],{"class":123},[110,500,148],{"class":127},[110,502,503],{"class":138}," https:\u002F\u002F…\u002Fping\u002Fbackup\n",[64,505,507],{"id":506},"keeping-exit-codes-honest","Keeping exit codes honest",[15,509,510,511,514,515,518,519,522],{},"Bash scripts like to mask errors — a pipe such as ",[81,512,513],{},"pg_dump | gzip"," returns the exit code of ",[81,516,517],{},"gzip",", even if ",[81,520,521],{},"pg_dump"," failed. Three lines at the top of the script restore order:",[101,524,526],{"className":103,"code":525,"language":105,"meta":106,"style":106},"#!\u002Fusr\u002Fbin\u002Fenv bash\nset -euo pipefail\n",[81,527,528,533],{"__ignoreMap":106},[110,529,530],{"class":112,"line":113},[110,531,532],{"class":116},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[110,534,535,538,541],{"class":112,"line":120},[110,536,537],{"class":127},"set",[110,539,540],{"class":127}," -euo",[110,542,543],{"class":138}," pipefail\n",[15,545,546,547,549],{},"With this, the script aborts on every error, every unset variable and every pipe failure — and the success ping behind the ",[81,548,175],{}," stays out, exactly as it should.",[10,551,553],{"id":552},"systemd-timers-and-kubernetes-cronjobs","systemd timers and Kubernetes CronJobs",[15,555,556,559,560,563,564,567,568,571,572,575,576,579],{},[25,557,558],{},"systemd timers"," are the successor to classic cron jobs on modern Linux systems and bring more to the table out of the box: logs via ",[81,561,562],{},"journalctl",", ",[81,565,566],{},"Persistent=true"," to catch up on missed runs, and ",[81,569,570],{},"OnFailure="," hooks for local reactions. What they ",[33,573,574],{},"cannot"," do: alert externally. If the whole server goes down, a local hook reports nothing. The external heartbeat remains mandatory here too — cleanly wired up via ",[81,577,578],{},"ExecStartPost=",", which only executes after a successful run.",[15,581,582,585,586,589,590,593,594,597,598,601,602,605],{},[25,583,584],{},"Kubernetes CronJobs"," have failure classes that classic cron does not know: image pull errors, pods stuck in ",[81,587,588],{},"Pending"," forever due to missing resources, missed ",[81,591,592],{},"startingDeadlineSeconds",", or a badly chosen ",[81,595,596],{},"concurrencyPolicy",". ",[81,599,600],{},"kubectl get cronjob"," only shows the last status — Kubernetes provides neither history nor alerting. The simplest robust approach is the same as everywhere: a ",[81,603,604],{},"&& curl …"," ping at the end of the container command, evaluated by an external heartbeat monitoring service.",[10,607,609],{"id":608},"comparing-the-tools","Comparing the tools",[15,611,612],{},"The niche is well populated — an honest look at the free entry points (as of July 2026):",[203,614,615,628],{},[206,616,617],{},[209,618,619,622,625],{},[212,620,621],{},"Tool",[212,623,624],{},"Free",[212,626,627],{},"Paid from",[219,629,630,641,652,663,674,685,696],{},[209,631,632,635,638],{},[224,633,634],{},"LIVCK",[224,636,637],{},"Self-hosted EUR 0 (commercial use allowed) · Cloud Free: 20 services (public beta)",[224,639,640],{},"Self-hosted license from EUR 9.90\u002Fmonth",[209,642,643,646,649],{},[224,644,645],{},"Healthchecks.io",[224,647,648],{},"20 checks, 3 team members",[224,650,651],{},"Business $20\u002Fmonth (100 checks)",[209,653,654,657,660],{},[224,655,656],{},"Cronitor",[224,658,659],{},"5 monitors, 5-min interval",[224,661,662],{},"$2\u002Fmonitor + $5\u002Fuser",[209,664,665,668,671],{},[224,666,667],{},"Dead Man's Snitch",[224,669,670],{},"1 snitch, standard intervals only",[224,672,673],{},"$5\u002Fmonth (3 snitches)",[209,675,676,679,682],{},[224,677,678],{},"Sentry Crons",[224,680,681],{},"1 cron monitor",[224,683,684],{},"$0.78\u002Fmonitor (paid plans only)",[209,686,687,690,693],{},[224,688,689],{},"UptimeRobot",[224,691,692],{},"Heartbeat on free plan, 5-min interval",[224,694,695],{},"Pro for 1-min checks",[209,697,698,701,704],{},[224,699,700],{},"Better Stack",[224,702,703],{},"10 heartbeats, 3-min interval",[224,705,706],{},"+$17\u002Fmonth per additional 10",[15,708,709,710,713,714,717,718,722],{},"Worth noting in the fine print: ",[19,711,645],{"href":712},"\u002Fen\u002Fhealthchecks-io-alternative"," is open source and self-hostable — the classic choice for the frugal, but a pure cron job tool without uptime monitoring or a statuspage. ",[19,715,656],{"href":716},"\u002Fen\u002Fcronitor-alternative"," is the most mature at pure cron job monitoring, but bills per monitor and per user — growing setups get expensive fast. And ",[19,719,721],{"href":720},"\u002Fen\u002Fuptimerobot-alternative","UptimeRobot's"," free plan only covers non-commercial use.",[10,724,726],{"id":725},"cron-job-monitoring-with-livck","Cron job monitoring with LIVCK",[15,728,729,730,733,734,737,738,741],{},"LIVCK ships heartbeat monitoring as one of seven check types — alongside HTTP(S), TCP, ping, DNS, SSL and Manual\u002FAPI. The schedule accepts simple intervals or ",[25,731,732],{},"real cron expressions with time zones",", and via the ",[81,735,736],{},"\u002Fstart"," and ",[81,739,740],{},"\u002Ffail"," signals plus exit codes, LIVCK tells \"never started\" apart from \"crashed\" — including runtime measurement and a maximum-runtime guard against hanging jobs. If the expected signal stays out, alerting fires via email, SMS, voice call, Slack, Microsoft Teams, Telegram or Discord.",[15,743,744,745,749,750,753,754,760,761,764],{},"The real difference from the specialists lies in the complete package: with LIVCK, a failed heartbeat is not just an internal alert — it can flow directly into the ",[19,746,748],{"href":747},"\u002Fen\u002Fguides\u002Fincident-management","statuspage and incident management",", turning a silent cron job failure into transparent communication in a single tool. For operation, the choice is yours: ",[25,751,752],{},"self-hosted via Docker Compose"," (EUR 0, commercial use allowed — runs on a ",[19,755,759],{"href":756,"rel":757},"https:\u002F\u002Flivck.com\u002Fr\u002Fhetzner",[758],"nofollow","Hetzner server from under EUR 5\u002Fmonth","), a managed service on German servers, or ",[25,762,763],{},"LIVCK Cloud"," with a free plan (20 services) — public beta, access via the waitlist. Since LIVCK is built in Germany and works GDPR by design, your monitoring data stays where it belongs.",[15,766,767],{},"Especially after the Freshping shutdown, the self-hosted approach is more than a matter of taste: no vendor can switch off monitoring that runs on your own server.",[10,769,771],{"id":770},"conclusion","Conclusion",[15,773,774],{},"Cron jobs are the quietest failures in any infrastructure: no port, no error message, no angry user — just a job that at some point simply stops running. Heartbeat monitoring inverts the principle and turns the absence itself into the alert signal.",[15,776,777,778,781,782,784,785,788,789,791,792,795,796,799,800,803],{},"The essence of this guide: send the ping ",[25,779,780],{},"only on success"," (",[81,783,175],{},", never ",[81,786,787],{},";","), harden ",[81,790,83],{}," with timeout and retries, size the grace period on maximum rather than average runtime, prevent overlaps with ",[81,793,794],{},"flock"," and hangs with ",[81,797,798],{},"timeout"," — and keep scripts honest with ",[81,801,802],{},"set -euo pipefail",". If you add start pings, you can tell \"never started\" from \"crashed\" and see runtime trends before they become a problem.",[15,805,806,807,809],{},"And just like with ",[19,808,22],{"href":21},", the same rule applies here: monitoring belongs on independent infrastructure — otherwise it goes down together with the very jobs it is supposed to watch.",[811,812,813],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":106,"searchDepth":120,"depth":120,"links":815},[816,817,822,823,829,830,831,832],{"id":12,"depth":120,"text":13},{"id":58,"depth":120,"text":59,"children":818},[819,820,821],{"id":66,"depth":330,"text":67},{"id":179,"depth":330,"text":180},{"id":197,"depth":330,"text":198},{"id":255,"depth":120,"text":256},{"id":296,"depth":120,"text":297,"children":824},[825,826,827,828],{"id":300,"depth":330,"text":301},{"id":360,"depth":330,"text":361},{"id":418,"depth":330,"text":419},{"id":506,"depth":330,"text":507},{"id":552,"depth":120,"text":553},{"id":608,"depth":120,"text":609},{"id":725,"depth":120,"text":726},{"id":770,"depth":120,"text":771},"Monitoring","Monitor cron jobs with heartbeat monitoring: how the dead man's switch works, typical failure modes and best practices for cron, systemd and Kubernetes.","md",null,{},"\u002Fguides\u002Fen\u002Fcronjob-monitoring","cronjob-monitoring","2026-07-03",12,[843,844,845],"healthchecks-io","cronitor","uptimerobot",[847,848,849],"uptime-monitoring","incident-management","self-hosted-statuspage",{"title":5,"description":834},"guides\u002Fen\u002Fcronjob-monitoring","_3LMFS6AdFy12rJti48eZy1wrtxC16WL-4FtMceMgLM",[854,1438,2239],{"id":855,"title":856,"body":857,"category":1422,"description":1423,"extension":835,"faq":836,"meta":1424,"navigation":333,"path":1425,"peerSlug":848,"publishedAt":1426,"readingTime":1427,"relatedComparisons":1428,"relatedGuides":1432,"seo":1435,"stem":1436,"updatedAt":836,"__hash__":1437},"guides\u002Fguides\u002Fen\u002Fincident-management.md","Incident Management: Process, Roles and Communication",{"type":7,"value":858,"toc":1400},[859,863,866,869,872,876,879,899,902,906,909,913,919,923,926,930,933,937,948,952,955,959,962,965,1040,1043,1046,1090,1102,1106,1109,1139,1142,1146,1149,1152,1157,1161,1164,1170,1176,1179,1205,1216,1220,1223,1248,1251,1254,1258,1261,1281,1288,1292,1295,1308,1312,1315,1333,1347,1351,1354,1392,1394,1397],[10,860,862],{"id":861},"what-is-incident-management","What Is Incident Management?",[15,864,865],{},"Incident management is the structured process a team uses to detect an unplanned service disruption, coordinate its repair and learn from it afterward. An incident is an unplanned interruption or a noticeable degradation in the quality of a service — anything from a completely unreachable application to a checkout page that has slowed to a crawl. The primary goal of incident management is not to immediately find the deepest root cause, but to restore the service as quickly as possible.",[15,867,868],{},"This definition stays close to the ITIL understanding, where incident management is its own discipline within IT service management. You don't need to implement ITIL in detail to benefit from it. What matters is that everyone on the team means the same thing by \"an incident,\" knows who does what during a disruption, and that customer communication doesn't happen on the fly.",[15,870,871],{},"Incident management in plain terms: it's the emergency plan for your digital services. When something breaks, the process makes sure the right people come together quickly, the damage is contained, customers are informed honestly, and the team learns from the event afterward — instead of starting from scratch every time.",[64,873,875],{"id":874},"distinguishing-incident-problem-and-service-request","Distinguishing Incident, Problem and Service Request",[15,877,878],{},"Three terms often get blurred together in everyday work, but they mean different things:",[38,880,881,887,893],{},[41,882,883,886],{},[25,884,885],{},"Incident"," is the active disruption. The focus is on restoration. Example: the API has been returning 500 errors for the past ten minutes.",[41,888,889,892],{},[25,890,891],{},"Problem"," is the underlying cause behind one or more incidents. The focus is on permanently eliminating the cause. Example: a memory leak that repeatedly takes the API down.",[41,894,895,898],{},[25,896,897],{},"Service request"," is a planned, standard request with no outage involved — such as the wish for a new user account or more storage. There is nothing to restore here.",[15,900,901],{},"This distinction is more than nitpicking. An incident is handled with high urgency, a problem with care and analytical depth, a service request through a calm, planned workflow. Throw everything into the same bucket and you either treat routine requests as emergencies or let real outages drown among ordinary tickets.",[10,903,905],{"id":904},"the-incident-lifecycle","The Incident Lifecycle",[15,907,908],{},"Every incident goes through the same phases, whether it's done in five minutes or only after hours of work. A clear lifecycle makes sure nobody skips steps, especially under pressure.",[64,910,912],{"id":911},"step-1-detection","Step 1: Detection",[15,914,915,916,918],{},"It all begins with detection. Ideally, your monitoring reports the disruption before the first customer notices it. The earlier the detection, the shorter the total downtime ends up being. How to monitor services reliably and which check types exist is covered in detail in the ",[19,917,22],{"href":21}," guide. A disruption that only comes to light through a customer complaint has usually already done damage.",[64,920,922],{"id":921},"step-2-triage-and-classification","Step 2: Triage and Classification",[15,924,925],{},"Once an alert exists, triage follows. This is where the severity is assessed, the scope is estimated (Who is affected? Which functions?) and a decision is made about whether a formal incident process is even needed. Not every alert is a major incident. Triage prevents small things from triggering the whole machinery while real emergencies slip through.",[64,927,929],{"id":928},"step-3-response","Step 3: Response",[15,931,932],{},"In the response phase, the team forms up. Roles are assigned, the investigation begins, first hypotheses are tested. In parallel — and this is crucial — communication starts, both internally and externally. Customers would rather wait on an honest \"we're investigating\" message than hear nothing at all.",[64,934,936],{"id":935},"step-4-mitigation-and-resolution","Step 4: Mitigation and Resolution",[15,938,939,940,943,944,947],{},"There is an important distinction to make here. ",[25,941,942],{},"Mitigation"," means addressing the symptom and making the service available again — for instance through a rollback, a restart or by rerouting traffic. ",[25,945,946],{},"Resolution"," in the strict sense means permanently eliminating the actual cause. In practice, mitigation comes first: the service is running again, customers are taken care of. The clean root-cause fix often follows later, calmly, frequently as part of downstream problem management. Confusing these two steps leads teams to declare an incident \"solved\" too early.",[64,949,951],{"id":950},"step-5-follow-up-and-post-mortem","Step 5: Follow-Up and Post-Mortem",[15,953,954],{},"After restoration, the incident is technically over, but the process is not. The follow-up in the form of a post-mortem records what happened, why, and what needs to change. This step is the one most often skipped — and that is exactly why incidents repeat.",[10,956,958],{"id":957},"severity-and-status-levels","Severity and Status Levels",[15,960,961],{},"Severity and public status levels describe two different things: severity says internally how bad it is; the status level says externally where you currently stand in the handling process.",[15,963,964],{},"A common severity scale looks like this:",[203,966,967,982],{},[206,968,969],{},[209,970,971,974,976,979],{},[212,972,973],{},"Severity",[212,975,217],{},[212,977,978],{},"Example",[212,980,981],{},"Response",[219,983,984,998,1012,1026],{},[209,985,986,989,992,995],{},[224,987,988],{},"SEV1",[224,990,991],{},"Critical, complete or broad outage",[224,993,994],{},"Platform entirely unreachable",[224,996,997],{},"Immediate, all-hands",[209,999,1000,1003,1006,1009],{},[224,1001,1002],{},"SEV2",[224,1004,1005],{},"Significant degradation",[224,1007,1008],{},"Some users or core functions affected",[224,1010,1011],{},"Urgent, dedicated team",[209,1013,1014,1017,1020,1023],{},[224,1015,1016],{},"SEV3",[224,1018,1019],{},"Minor degradation, workaround available",[224,1021,1022],{},"A single non-critical feature impaired",[224,1024,1025],{},"Soon, regular workflow",[209,1027,1028,1031,1034,1037],{},[224,1029,1030],{},"SEV4\u002FSEV5",[224,1032,1033],{},"Cosmetic or trivial",[224,1035,1036],{},"Typo, slight rendering glitch",[224,1038,1039],{},"In the backlog, by priority",[15,1041,1042],{},"Important: severity is not the same as priority. Severity describes the degree of impact, priority the order of handling. A SEV2 incident can take a higher priority than another SEV2 depending on business context — for example when an important customer is affected.",[15,1044,1045],{},"The public status levels of a status page follow their own well-established scheme:",[203,1047,1048,1057],{},[206,1049,1050],{},[209,1051,1052,1055],{},[212,1053,1054],{},"Status",[212,1056,217],{},[219,1058,1059,1067,1075,1082],{},[209,1060,1061,1064],{},[224,1062,1063],{},"Investigating",[224,1065,1066],{},"Disruption detected, cause still unclear, investigation underway",[209,1068,1069,1072],{},[224,1070,1071],{},"Identified",[224,1073,1074],{},"Cause found, fix being applied",[209,1076,1077,1079],{},[224,1078,833],{},[224,1080,1081],{},"Fix rolled out, team watching for stability",[209,1083,1084,1087],{},[224,1085,1086],{},"Resolved",[224,1088,1089],{},"Service fully restored",[15,1091,1092,1093,1096,1097,1101],{},"On top of this comes ",[25,1094,1095],{},"Maintenance"," as its own type — a planned maintenance window is not an outage and should not be communicated as an incident. How to drive these levels cleanly to the outside is explored further in the ",[19,1098,1100],{"href":1099},"\u002Fen\u002Fguides\u002Fstatuspage-best-practices","status page best practices"," guide.",[10,1103,1105],{"id":1104},"roles-during-an-incident","Roles During an Incident",[15,1107,1108],{},"In a larger incident, it isn't enough for \"everyone to help somehow.\" Clear roles prevent chaos and duplicated effort. For small disruptions, one person can hold several roles; in a SEV1, they should be separate.",[38,1110,1111,1121,1127,1133],{},[41,1112,1113,1116,1117,1120],{},[25,1114,1115],{},"Incident Commander (IC):"," coordinates the entire incident, makes decisions and delegates. The IC deliberately does ",[33,1118,1119],{},"not"," debug — they keep the overview instead of getting lost in the technical detail. Their job is steering, not troubleshooting.",[41,1122,1123,1126],{},[25,1124,1125],{},"Communications \u002F Comms Lead:"," owns all communication, internally to stakeholders and externally to customers, including the status page updates. This keeps the technical crew free to work undisturbed.",[41,1128,1129,1132],{},[25,1130,1131],{},"Operations \u002F Tech Lead:"," runs the technical investigation and implements the fix. This role is deep in the code, the logs and the infrastructure.",[41,1134,1135,1138],{},[25,1136,1137],{},"Scribe:"," records the timeline — who did or noticed what, and when. This log later becomes the basis of the post-mortem and, along the way, takes a significant load off everyone's memory.",[15,1140,1141],{},"What an incident commander actually does can be summed up in one sentence: they are the calm point that keeps the process moving, drives decisions and makes sure every role knows its task — without chasing the disruption at the keyboard themselves.",[10,1143,1145],{"id":1144},"escalation-on-call-and-alerting","Escalation, On-Call and Alerting",[15,1147,1148],{},"For an incident to reach anyone at all, you need an on-call duty and an escalation chain. On-call means that at any given time a defined person is responsible for incoming alerts — usually in a rotation, say weekly, so the load is shared fairly and nobody has to be reachable permanently.",[15,1150,1151],{},"The escalation chain governs what happens when the primary doesn't respond: primary → secondary → manager. If the first level doesn't react within a set deadline, the alert automatically moves to the next. This way no critical alert is left lying around just because someone happens not to pick up the phone.",[15,1153,1154,1155,1101],{},"The biggest enemy of a working on-call setup is alert fatigue. When too many or too imprecise alerts arrive, the on-call responders go numb and eventually miss the one alert that matters. Good alert thresholds, bundling related signals and protection against false alarms are therefore not niceties but a prerequisite for reliability. Which monitoring strategies reduce false alarms is described in the ",[19,1156,22],{"href":21},[10,1158,1160],{"id":1159},"incident-communication-internal-and-external","Incident Communication: Internal and External",[15,1162,1163],{},"Communication determines how an incident is perceived — often more strongly than the technical severity itself. There are two levels to separate here.",[15,1165,1166,1169],{},[25,1167,1168],{},"Internally",", it's about coordination: who is working on what, which hypothesis is currently being tested, which stakeholders need to know? This communication is allowed to be technical and detailed.",[15,1171,1172,1175],{},[25,1173,1174],{},"Externally",", toward customers, a different rule applies: speak the language of users, not of engineers. Nobody outside the team cares about the exact stack trace. Customers want to know: what isn't working, does it affect me, and when will I hear from you again?",[15,1177,1178],{},"A good external update contains four things:",[38,1180,1181,1187,1193,1199],{},[41,1182,1183,1186],{},[25,1184,1185],{},"Impact:"," what is concretely limited, in words users understand.",[41,1188,1189,1192],{},[25,1190,1191],{},"Affected services:"," which parts of the offering are touched, which run normally.",[41,1194,1195,1198],{},[25,1196,1197],{},"Current status:"," what you are doing right now, without false promises.",[41,1200,1201,1204],{},[25,1202,1203],{},"Next update time:"," when the next message will come — even if there's nothing new by then.",[15,1206,1207,1208,1212,1213,1215],{},"On cadence: better to update regularly, even without new findings, than to go silent. A \"we're still investigating, next update in 30 minutes\" signals that someone is on it. Silence reads as loss of control. Your own status page is the right channel for this, because it takes the load off support and offers a single reliable source — the fundamentals are explained in the ",[19,1209,1211],{"href":1210},"\u002Fen\u002Fguides\u002Fwhat-is-a-statuspage","what is a status page"," guide. How to shape tone and update rhythm in concrete terms is covered further in the ",[19,1214,1100],{"href":1099},".",[10,1217,1219],{"id":1218},"post-mortem-and-blameless-retrospective","Post-Mortem and Blameless Retrospective",[15,1221,1222],{},"The post-mortem is the step that turns an event into genuine learning. Without it, a team keeps fixing the same class of disruption over and over without ever finding the lever. A useful post-mortem is structured and records at least four components:",[38,1224,1225,1231,1236,1242],{},[41,1226,1227,1230],{},[25,1228,1229],{},"Timeline:"," what happened when, from detection to restoration. This is where the scribe's log pays off.",[41,1232,1233,1235],{},[25,1234,1185],{}," who was affected, for how long and how severely — number of users, duration, affected functions.",[41,1237,1238,1241],{},[25,1239,1240],{},"Root cause:"," the actual cause, not just the surface symptom.",[41,1243,1244,1247],{},[25,1245,1246],{},"Action items:"," concrete measures, each with an owner and a due date. A post-mortem without named owners and deadlines is a wish list, not an improvement.",[15,1249,1250],{},"What matters is the blameless attitude. \"Blameless\" means the focus is on system and process failures, not on assigning blame to individuals. The assumption is that people acted reasonably with the knowledge available to them — if something still went wrong, the system was fragile. A blameless culture encourages open analysis: only those who fear no punishment will honestly tell what really happened. That honesty is exactly what you need to find the true cause.",[15,1252,1253],{},"In practice: schedule the post-mortem promptly, typically within a few days of a major incident, while the details are still fresh.",[10,1255,1257],{"id":1256},"metrics-mtta-mttr-and-mtbf","Metrics: MTTA, MTTR and MTBF",[15,1259,1260],{},"Metrics make the quality of incident management measurable and show over time whether improvements are working. Three are central:",[38,1262,1263,1269,1275],{},[41,1264,1265,1268],{},[25,1266,1267],{},"MTTA (Mean Time To Acknowledge):"," the average time from a triggered alert to its acknowledgment, that is, until someone begins handling it. A high MTTA points to gaps in on-call or to alert fatigue.",[41,1270,1271,1274],{},[25,1272,1273],{},"MTTR (Mean Time To Recovery \u002F Repair \u002F Resolve):"," the average time from detection to restoration of the service. Probably the most-cited incident metric — it measures how quickly you are back online.",[41,1276,1277,1280],{},[25,1278,1279],{},"MTBF (Mean Time Between Failures):"," total operating time divided by the number of failures. Here a higher value is better, because it means longer stretches of disruption-free operation.",[15,1282,1283,1284,1101],{},"MTTA and MTTR target response and repair, MTBF targets fundamental stability. Together they give an honest picture: how reliable is the service, and how well does the team respond when something does happen. How these metrics relate to plain availability in percent is shown in the ",[19,1285,1287],{"href":1286},"\u002Fen\u002Fguides\u002Fuptime-percentage-explained","uptime percentage explained",[10,1289,1291],{"id":1290},"from-monitoring-alert-to-incident","From Monitoring Alert to Incident",[15,1293,1294],{},"In many setups there is an invisible gap between the monitoring alert and the public incident. Monitoring fires, someone sees the alert — and then has to manually open a separate incident or status page tool, create an event and type out the text. This context switch costs time, exactly when time is scarcest.",[15,1296,1297,1298,1302,1303,1307],{},"The effect is measurable: every manual handoff step lengthens MTTA and MTTR. It also creates friction — under stress, the status page update is easily forgotten or posted too late, because it's an extra, deliberate action. Specialized incident tools like ",[19,1299,1301],{"href":1300},"\u002Fen\u002Fincident-io-alternative","incident.io"," or ",[19,1304,1306],{"href":1305},"\u002Fen\u002Filert-alternative","iLert"," handle coordination and escalation well, but bring no monitoring of their own. So you still need a separate monitoring tool and have to connect both worlds. The closer detection and incident workflow sit together, the smaller this gap becomes.",[10,1309,1311],{"id":1310},"incident-management-with-livck","Incident Management with LIVCK",[15,1313,1314],{},"LIVCK is designed as one solution that unites monitoring and status page in a single tool — and thereby avoids exactly the context switch described above. The detected outage and the public incident live in the same system, instead of being manually reconciled across two tools.",[15,1316,1317,1318,1321,1322,1325,1326,1329,1330,1332],{},"For the actual incident handling, LIVCK offers a status workflow that follows the established scheme from Investigating through Identified and Monitoring to Resolved. ",[25,1319,1320],{},"Outage Linking"," groups several affected services with a shared cause into ",[33,1323,1324],{},"one"," incident — customers don't see five confusing separate notices, but one clear event. Alongside incidents, ",[25,1327,1328],{},"Announcements"," are available for general notices and ",[25,1331,1095],{}," for scheduled maintenance windows, so planned work stays cleanly separated from real disruptions.",[15,1334,1335,1336,1341,1342,1215],{},"Communication runs automatically: subscribers are notified across all relevant channels — email, Slack, Microsoft Teams, Telegram, Discord and webhooks. Against false alarms, majority detection protects you: an incident is only triggered after multiple independent probe locations have confirmed the disruption, which noticeably dampens alert fatigue in on-call. Escalation policies with acknowledge and postmortems attached directly to the incident round out the workflow. If you prefer self-hosting, you can install LIVCK in minutes via ",[19,1337,1340],{"href":1338,"rel":1339},"https:\u002F\u002Fhelp.livck.com",[758],"Docker Compose","; an overview of the status page features is available at ",[19,1343,1346],{"href":1344,"rel":1345},"https:\u002F\u002Flivck.cloud\u002Fen",[758],"livck.cloud",[10,1348,1350],{"id":1349},"common-mistakes","Common Mistakes",[15,1352,1353],{},"A few patterns keep recurring and cost time and nerves in every incident anew:",[38,1355,1356,1362,1368,1374,1380,1386],{},[41,1357,1358,1361],{},[25,1359,1360],{},"No defined incident commander."," Without a clear owner, everyone talks over each other and nobody makes decisions.",[41,1363,1364,1367],{},[25,1365,1366],{},"No severity definition."," When it's unclear what separates a SEV1 from a SEV3, the team either over- or under-reacts.",[41,1369,1370,1373],{},[25,1371,1372],{},"Customer communication too late or too rare."," Going silent during an outage damages trust more than the outage itself.",[41,1375,1376,1379],{},[25,1377,1378],{},"Post-mortem with blame."," As soon as blame is in the room, the honest answers go quiet — and with them the chance to find the true cause.",[41,1381,1382,1385],{},[25,1383,1384],{},"Alert fatigue."," Too many imprecise alerts cause the one important one to be missed.",[41,1387,1388,1391],{},[25,1389,1390],{},"Separate, uncoupled tools."," Monitoring and incident communication in two worlds create a context switch that lengthens MTTA and MTTR.",[10,1393,771],{"id":770},[15,1395,1396],{},"Incident management is not a tool you buy, but a process you practice. The building blocks are manageable: a clear lifecycle from detection to post-mortem, defined severity levels, named roles with an incident commander at the top, a reliable on-call with an escalation chain, and honest, regular communication in the language of users. Metrics like MTTA, MTTR and MTBF make it visible whether the work is having an effect, and a blameless post-mortem turns every event into learning rather than blame.",[15,1398,1399],{},"The biggest lever often sits where detection and response meet: the shorter the path from monitoring alert to public incident, the faster you are able to act again and the calmer you can communicate. Bringing monitoring and status page together in one system closes exactly this gap — and wins you, in a real emergency, the minutes that count.",{"title":106,"searchDepth":120,"depth":120,"links":1401},[1402,1405,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421],{"id":861,"depth":120,"text":862,"children":1403},[1404],{"id":874,"depth":330,"text":875},{"id":904,"depth":120,"text":905,"children":1406},[1407,1408,1409,1410,1411],{"id":911,"depth":330,"text":912},{"id":921,"depth":330,"text":922},{"id":928,"depth":330,"text":929},{"id":935,"depth":330,"text":936},{"id":950,"depth":330,"text":951},{"id":957,"depth":120,"text":958},{"id":1104,"depth":120,"text":1105},{"id":1144,"depth":120,"text":1145},{"id":1159,"depth":120,"text":1160},{"id":1218,"depth":120,"text":1219},{"id":1256,"depth":120,"text":1257},{"id":1290,"depth":120,"text":1291},{"id":1310,"depth":120,"text":1311},{"id":1349,"depth":120,"text":1350},{"id":770,"depth":120,"text":771},"Incident Management","Incident management explained: lifecycle, severity levels, roles, escalation, post-mortems and metrics like MTTR — plus professional incident communication.",{},"\u002Fguides\u002Fen\u002Fincident-management","2026-06-24",13,[1429,1430,1431],"incident-io","ilert","atlassian",[1433,847,1434],"statuspage-best-practices","what-is-a-statuspage",{"title":856,"description":1423},"guides\u002Fen\u002Fincident-management","2VH4r4fYEBtfLqksrXKwlX3QY11OJkxxm7sMfUK4qy0",{"id":1439,"title":1440,"body":1441,"category":2226,"description":2227,"extension":835,"faq":836,"meta":2228,"navigation":333,"path":2229,"peerSlug":849,"publishedAt":2230,"readingTime":2231,"relatedComparisons":2232,"relatedGuides":2234,"seo":2236,"stem":2237,"updatedAt":836,"__hash__":2238},"guides\u002Fguides\u002Fen\u002Fself-hosted-statuspage.md","Self-Hosted Statuspage — Why, How and Which Solution?",{"type":7,"value":1442,"toc":2194},[1443,1447,1450,1453,1456,1460,1463,1467,1470,1474,1477,1503,1507,1510,1514,1517,1521,1524,1528,1531,1535,1538,1542,1545,1549,1552,1555,1587,1590,1594,1597,1669,1672,1675,1679,1682,1686,1691,1694,1721,1726,1773,1778,1781,1795,1798,1802,1846,1849,1853,1856,1860,1863,1868,1888,1891,1895,1898,1904,1908,2036,2040,2043,2047,2050,2053,2056,2059,2063,2105,2108,2111,2114,2118,2121,2124,2127,2147,2150,2154,2157,2160,2163,2177,2179,2182,2185,2188,2191],[10,1444,1446],{"id":1445},"why-self-hosting-your-statuspage-matters","Why Self-Hosting Your Statuspage Matters",[15,1448,1449],{},"A statuspage is the public interface for your infrastructure's operational health. Customers, partners and internal teams rely on it to be available and accurate — especially when other systems fail. Placing this critical component in the hands of a third-party cloud provider creates a dependency that quickly becomes problematic in regulated environments or when data sovereignty requirements are non-negotiable.",[15,1451,1452],{},"Self-hosting means the statuspage runs on your own infrastructure. You control where data is stored, who has access and how the system is maintained. No third party sits between you and your users.",[15,1454,1455],{},"Over the past few years, self-hosting has evolved from an enterprise-only proposition to a realistic option for teams of any size. The reason: container technologies like Docker have drastically reduced complexity. What once required weeks of server configuration can now be accomplished with a single command.",[10,1457,1459],{"id":1458},"cloud-vs-self-hosted-an-honest-comparison","Cloud vs. Self-Hosted: An Honest Comparison",[15,1461,1462],{},"Both approaches have their place. The right choice depends on your specific requirements.",[64,1464,1466],{"id":1465},"benefits-of-cloud-statuspages","Benefits of Cloud Statuspages",[15,1468,1469],{},"Cloud solutions like Atlassian Statuspage, Instatus or Better Stack offer a fast start. No server, no maintenance, no deployment. You sign up, configure your services and the statuspage is live. For small teams without DevOps experience or for projects with minimal compliance requirements, this can be perfectly adequate.",[64,1471,1473],{"id":1472},"benefits-of-self-hosted-statuspages","Benefits of Self-Hosted Statuspages",[15,1475,1476],{},"Self-hosting becomes relevant when one or more of the following criteria apply:",[38,1478,1479,1485,1491,1497],{},[41,1480,1481,1484],{},[25,1482,1483],{},"Data sovereignty:"," Monitoring data, incident histories and subscriber lists never leave your network. For organizations subject to GDPR, HIPAA, SOC 2 or industry-specific regulations, this is often not a preference but a requirement.",[41,1486,1487,1490],{},[25,1488,1489],{},"Availability guarantee:"," If your cloud statuspage provider goes down, you cannot communicate precisely when it matters most. A self-hosted solution on separate infrastructure eliminates this dependency.",[41,1492,1493,1496],{},[25,1494,1495],{},"Cost structure:"," Cloud providers often charge per feature, per team member or per statuspage. As teams grow, these costs scale quickly. Self-hosted solutions have predictable, often significantly lower total costs.",[41,1498,1499,1502],{},[25,1500,1501],{},"Customizability:"," Full control over domains, SSL certificates, network routing and integration into existing infrastructure.",[64,1504,1506],{"id":1505},"drawbacks-of-self-hosting","Drawbacks of Self-Hosting",[15,1508,1509],{},"Self-hosting is not maintenance-free. You need a server, must apply updates and are responsible for the instance's availability. For teams with zero Linux experience, this can be a barrier — though modern solutions with auto-updaters and Docker-based deployments have lowered that barrier considerably.",[10,1511,1513],{"id":1512},"regulated-industries-where-self-hosting-becomes-mandatory","Regulated Industries: Where Self-Hosting Becomes Mandatory",[15,1515,1516],{},"In certain industries, the question \"cloud or self-hosted?\" is not a technical preference but a regulatory decision.",[64,1518,1520],{"id":1519},"data-centers-and-hosting-providers","Data Centers and Hosting Providers",[15,1522,1523],{},"Organizations that operate infrastructure and guarantee SLAs to customers cannot credibly communicate their own status through a third-party cloud service. The irony would be self-evident: \"Our data center is highly available, but our statuspage runs on a shared platform in Virginia.\"",[64,1525,1527],{"id":1526},"financial-services","Financial Services",[15,1529,1530],{},"Financial institutions subject to regulations like MaRisk (Germany), FCA (UK), SEC\u002FFINRA (US) or similar frameworks face strict requirements around IT outsourcing. A statuspage that processes incident data and subscriber information falls within this scope. Self-hosting on owned or certified infrastructure simplifies compliance significantly.",[64,1532,1534],{"id":1533},"healthcare","Healthcare",[15,1536,1537],{},"Hospitals, insurers and health-tech companies handle particularly sensitive data. Even if a statuspage contains no patient data, the entire IT infrastructure is subject to elevated requirements under frameworks like HIPAA, the EU Medical Device Regulation or national health data protection laws. Self-hosting on systems that already meet industry standards avoids additional audit obligations.",[64,1539,1541],{"id":1540},"government-and-public-sector","Government and Public Sector",[15,1543,1544],{},"Government agencies and public institutions increasingly prioritize digital sovereignty. Self-hosted solutions on domestic infrastructure — whether in Germany, the EU or other jurisdictions — satisfy these requirements directly.",[10,1546,1548],{"id":1547},"docker-as-the-standard-for-self-hosted-software","Docker as the Standard for Self-Hosted Software",[15,1550,1551],{},"Most modern self-hosted applications use Docker as their deployment method. Docker packages an application with all its dependencies into a container that runs identically on any Linux server. This eliminates the classic \"works on my machine\" problem and reduces installation to a few commands.",[15,1553,1554],{},"For statuspages, Docker is particularly sensible:",[38,1556,1557,1563,1569,1581],{},[41,1558,1559,1562],{},[25,1560,1561],{},"Isolation:"," The statuspage runs isolated from the rest of the system. Conflicts with other applications are impossible.",[41,1564,1565,1568],{},[25,1566,1567],{},"Reproducibility:"," The same Docker image runs on a Hetzner server the same way it runs on AWS or in your own data center.",[41,1570,1571,1574,1575,737,1578,1215],{},[25,1572,1573],{},"Updates:"," New versions are shipped as a new image. An update consists of ",[81,1576,1577],{},"docker compose pull",[81,1579,1580],{},"docker compose up -d",[41,1582,1583,1586],{},[25,1584,1585],{},"Rollbacks:"," If an update causes issues, you can revert to the previous version in seconds.",[15,1588,1589],{},"Docker Compose extends Docker with orchestration for multiple containers. A typical statuspage needs the application itself, a database and potentially a reverse proxy. Docker Compose defines all these services in a single YAML file.",[10,1591,1593],{"id":1592},"server-requirements-what-do-you-actually-need","Server Requirements: What Do You Actually Need?",[15,1595,1596],{},"A self-hosted statuspage is not a resource-hungry application. The requirements are modest:",[203,1598,1599,1612],{},[206,1600,1601],{},[209,1602,1603,1606,1609],{},[212,1604,1605],{},"Resource",[212,1607,1608],{},"Minimum",[212,1610,1611],{},"Recommended",[219,1613,1614,1625,1636,1647,1658],{},[209,1615,1616,1619,1622],{},[224,1617,1618],{},"CPU",[224,1620,1621],{},"1 vCPU",[224,1623,1624],{},"2 vCPU",[209,1626,1627,1630,1633],{},[224,1628,1629],{},"RAM",[224,1631,1632],{},"2 GB",[224,1634,1635],{},"4 GB",[209,1637,1638,1641,1644],{},[224,1639,1640],{},"Storage",[224,1642,1643],{},"20 GB SSD",[224,1645,1646],{},"40 GB SSD",[209,1648,1649,1652,1655],{},[224,1650,1651],{},"OS",[224,1653,1654],{},"Linux with Docker support",[224,1656,1657],{},"Ubuntu 22.04+ \u002F Debian 12+",[209,1659,1660,1663,1666],{},[224,1661,1662],{},"Network",[224,1664,1665],{},"Public IP, port 80\u002F443",[224,1667,1668],{},"Static IP, DDoS protection",[15,1670,1671],{},"In practice, a small cloud server from a reputable provider works well. Hetzner Cloud offers suitable instances starting at EUR 4.75 per month — sufficient performance for a statuspage with monitoring that tracks hundreds of services. Other providers like DigitalOcean, Vultr or OVHcloud offer comparable options in various regions.",[15,1673,1674],{},"Important: The server should not share infrastructure with the systems being monitored. If your primary stack runs on AWS, the statuspage should run on a separate provider. Otherwise, the statuspage goes down precisely when you need it most.",[10,1676,1678],{"id":1677},"setting-up-a-self-hosted-statuspage-with-livck","Setting Up a Self-Hosted Statuspage With LIVCK",[15,1680,1681],{},"LIVCK is a monitoring and statuspage solution from Germany that installs via Docker Compose in minutes. Unlike pure statuspage tools, LIVCK combines monitoring, statuspage and incident management in a single application.",[64,1683,1685],{"id":1684},"installation-in-three-steps","Installation in Three Steps",[15,1687,1688],{},[25,1689,1690],{},"Step 1: Prepare your server",[15,1692,1693],{},"On a fresh Linux server with Docker and Docker Compose:",[101,1695,1697],{"className":103,"code":1696,"language":105,"meta":106,"style":106},"# Install Docker (if not already present)\ncurl -fsSL https:\u002F\u002Fget.docker.com | sh\n",[81,1698,1699,1704],{"__ignoreMap":106},[110,1700,1701],{"class":112,"line":113},[110,1702,1703],{"class":116},"# Install Docker (if not already present)\n",[110,1705,1706,1708,1711,1714,1718],{"class":112,"line":120},[110,1707,83],{"class":123},[110,1709,1710],{"class":127}," -fsSL",[110,1712,1713],{"class":138}," https:\u002F\u002Fget.docker.com",[110,1715,1717],{"class":1716},"szBVR"," |",[110,1719,1720],{"class":123}," sh\n",[15,1722,1723],{},[25,1724,1725],{},"Step 2: Deploy LIVCK",[101,1727,1729],{"className":103,"code":1728,"language":105,"meta":106,"style":106},"# Download the LIVCK Docker Compose file\ncurl -fsSL https:\u002F\u002Fget.livck.com -o docker-compose.yml\n\n# Start LIVCK\ndocker compose up -d\n",[81,1730,1731,1736,1750,1754,1759],{"__ignoreMap":106},[110,1732,1733],{"class":112,"line":113},[110,1734,1735],{"class":116},"# Download the LIVCK Docker Compose file\n",[110,1737,1738,1740,1742,1745,1747],{"class":112,"line":120},[110,1739,83],{"class":123},[110,1741,1710],{"class":127},[110,1743,1744],{"class":138}," https:\u002F\u002Fget.livck.com",[110,1746,163],{"class":127},[110,1748,1749],{"class":138}," docker-compose.yml\n",[110,1751,1752],{"class":112,"line":330},[110,1753,334],{"emptyLinePlaceholder":333},[110,1755,1756],{"class":112,"line":337},[110,1757,1758],{"class":116},"# Start LIVCK\n",[110,1760,1761,1764,1767,1770],{"class":112,"line":343},[110,1762,1763],{"class":123},"docker",[110,1765,1766],{"class":138}," compose",[110,1768,1769],{"class":138}," up",[110,1771,1772],{"class":127}," -d\n",[15,1774,1775],{},[25,1776,1777],{},"Step 3: Configure your statuspage",[15,1779,1780],{},"After startup, LIVCK is accessible via the server's IP address. The setup wizard guides you through:",[38,1782,1783,1786,1789,1792],{},[41,1784,1785],{},"Account and team creation",[41,1787,1788],{},"First statuspage configuration (theme, domain, branding)",[41,1790,1791],{},"Monitoring checks for your services",[41,1793,1794],{},"Notification integrations (email, Slack, Discord, Telegram, SMS)",[15,1796,1797],{},"The entire process typically takes under five minutes from an empty server to a functioning statuspage.",[64,1799,1801],{"id":1800},"what-livck-provides-in-self-hosted-mode","What LIVCK Provides in Self-Hosted Mode",[38,1803,1804,1810,1816,1822,1828,1834,1840],{},[41,1805,1806,1809],{},[25,1807,1808],{},"Monitoring:"," HTTP(S), TCP, Heartbeat and Manual checks with configurable intervals",[41,1811,1812,1815],{},[25,1813,1814],{},"Statuspage:"," Eclipse theme with visual designer, custom branding, multi-language support, PWA",[41,1817,1818,1821],{},[25,1819,1820],{},"Incident Management:"," Five status stages, outage linking, announcements, maintenance windows",[41,1823,1824,1827],{},[25,1825,1826],{},"Notifications:"," Email, Slack, Discord, Telegram, SMS, Pushover with throttling",[41,1829,1830,1833],{},[25,1831,1832],{},"API:"," Public & Private API for automation and integration",[41,1835,1836,1839],{},[25,1837,1838],{},"Team:"," Multiple members per plan, granular permissions, two-factor authentication",[41,1841,1842,1845],{},[25,1843,1844],{},"Auto-Updater:"," LIVCK updates itself automatically without manual intervention",[15,1847,1848],{},"Crucially, all features are available in every plan. There is no feature-gating where basic functionality is locked behind more expensive tiers.",[10,1850,1852],{"id":1851},"comparison-with-open-source-alternatives","Comparison With Open-Source Alternatives",[15,1854,1855],{},"Two open-source projects are frequently mentioned in the context of self-hosted statuspages: Uptime Kuma and CachetHQ. Both have their merits, but also clear limitations.",[64,1857,1859],{"id":1858},"uptime-kuma","Uptime Kuma",[15,1861,1862],{},"Uptime Kuma is a popular open-source monitoring tool with a built-in, rudimentary statuspage. It is quick to install and provides solid uptime monitoring for personal projects and small teams.",[15,1864,1865],{},[25,1866,1867],{},"Limitations:",[38,1869,1870,1873,1876,1879,1882,1885],{},[41,1871,1872],{},"The statuspage is minimal: no custom branding, no visual designer, no themes",[41,1874,1875],{},"No real incident management (no status stages, no outage linking)",[41,1877,1878],{},"No subscriber notifications (users cannot subscribe to status updates)",[41,1880,1881],{},"No API for the statuspage itself",[41,1883,1884],{},"Single-user application — no team features, no role-based permissions",[41,1886,1887],{},"No professional support or SLA",[15,1889,1890],{},"Uptime Kuma excels as a personal monitoring dashboard. As a public-facing statuspage for an organization, it lacks essential functionality.",[64,1892,1894],{"id":1893},"cachethq","CachetHQ",[15,1896,1897],{},"CachetHQ was the most well-known open-source statuspage project. It offered a solid statuspage with incident tracking and subscriber management.",[15,1899,1900,1903],{},[25,1901,1902],{},"The problem:"," CachetHQ has not been actively maintained for years. The last substantial update is far in the past. Open security issues, incompatibility with current PHP versions and absent support make it unsuitable for production use. Additionally, CachetHQ provides no monitoring whatsoever — you need a separate tool to even detect outages.",[64,1905,1907],{"id":1906},"livck-in-comparison","LIVCK in Comparison",[203,1909,1910,1923],{},[206,1911,1912],{},[209,1913,1914,1917,1919,1921],{},[212,1915,1916],{},"Feature",[212,1918,1859],{},[212,1920,1894],{},[212,1922,634],{},[219,1924,1925,1937,1951,1963,1975,1988,2000,2011,2022],{},[209,1926,1927,1929,1932,1935],{},[224,1928,833],{},[224,1930,1931],{},"Yes",[224,1933,1934],{},"No",[224,1936,1931],{},[209,1938,1939,1942,1945,1948],{},[224,1940,1941],{},"Statuspage",[224,1943,1944],{},"Basic",[224,1946,1947],{},"Yes (outdated)",[224,1949,1950],{},"Yes (designer, custom branding)",[209,1952,1953,1955,1957,1960],{},[224,1954,1422],{},[224,1956,1934],{},[224,1958,1959],{},"Simple",[224,1961,1962],{},"Yes (5 stages, linking)",[209,1964,1965,1968,1970,1972],{},[224,1966,1967],{},"Subscriber System",[224,1969,1934],{},[224,1971,1931],{},[224,1973,1974],{},"Yes (newsletter, PWA)",[209,1976,1977,1980,1982,1985],{},[224,1978,1979],{},"Team Features",[224,1981,1934],{},[224,1983,1984],{},"Limited",[224,1986,1987],{},"Yes (members per plan, roles)",[209,1989,1990,1993,1995,1997],{},[224,1991,1992],{},"API",[224,1994,1984],{},[224,1996,1931],{},[224,1998,1999],{},"Public & Private API",[209,2001,2002,2005,2007,2009],{},[224,2003,2004],{},"Auto-Updater",[224,2006,1934],{},[224,2008,1934],{},[224,2010,1931],{},[209,2012,2013,2016,2018,2020],{},[224,2014,2015],{},"Actively Maintained",[224,2017,1931],{},[224,2019,1934],{},[224,2021,1931],{},[209,2023,2024,2027,2030,2033],{},[224,2025,2026],{},"Support",[224,2028,2029],{},"Community",[224,2031,2032],{},"None",[224,2034,2035],{},"Professional",[10,2037,2039],{"id":2038},"cost-analysis-self-hosted-vs-cloud-providers","Cost Analysis: Self-Hosted vs. Cloud Providers",[15,2041,2042],{},"An honest cost comparison reveals why self-hosting is economically compelling.",[64,2044,2046],{"id":2045},"cloud-providers-typical-costs","Cloud Providers: Typical Costs",[15,2048,2049],{},"Atlassian Statuspage charges from USD 99 per month for the Startup plan. Custom branding and advanced features require USD 399 per month. Monitoring is not included — you need a separate tool for that.",[15,2051,2052],{},"Better Stack starts free, but usable plans with sufficient monitors and statuspage features quickly reach USD 80 to 150 per month.",[15,2054,2055],{},"Instatus offers a lower entry point at USD 20 with basic monitoring, but advanced features cost up to USD 300 per month.",[15,2057,2058],{},"For international teams, these USD-denominated prices also carry currency risk and often increase at renewal.",[64,2060,2062],{"id":2061},"self-hosted-with-livck-total-cost","Self-Hosted With LIVCK: Total Cost",[203,2064,2065,2075],{},[206,2066,2067],{},[209,2068,2069,2072],{},[212,2070,2071],{},"Item",[212,2073,2074],{},"Cost per Month",[219,2076,2077,2085,2093],{},[209,2078,2079,2082],{},[224,2080,2081],{},"Server (Hetzner Cloud, CX22)",[224,2083,2084],{},"EUR 4.75",[209,2086,2087,2090],{},[224,2088,2089],{},"LIVCK Starter license",[224,2091,2092],{},"EUR 9.90",[209,2094,2095,2100],{},[224,2096,2097],{},[25,2098,2099],{},"Total",[224,2101,2102],{},[25,2103,2104],{},"EUR 14.65",[15,2106,2107],{},"For EUR 14.65 per month, you get monitoring and statuspage in one tool, on your own server, with full data control. For comparison: Atlassian Statuspage alone — without monitoring — costs five times as much on the Startup plan.",[15,2109,2110],{},"Even the Business plan (EUR 39.90) with the recommended server (EUR 4.75) comes to under EUR 45 per month — a fraction of what comparable cloud solutions charge.",[15,2112,2113],{},"For teams that cannot carry license costs: LIVCK's Smart plan is free and includes 20 monitors, 5 categories and one user. The server cost of under five euros per month remains the only expense.",[10,2115,2117],{"id":2116},"auto-updates-and-maintenance","Auto-Updates and Maintenance",[15,2119,2120],{},"A common argument against self-hosting is the maintenance overhead. With LIVCK, this overhead is minimal.",[15,2122,2123],{},"The built-in auto-updater regularly checks for new versions and applies updates automatically. You do not need to manually pull Docker images or run database migrations. The system updates itself and notifies you of completed updates.",[15,2125,2126],{},"For the server itself, recommended practices include:",[38,2128,2129,2135,2141],{},[41,2130,2131,2134],{},[25,2132,2133],{},"Unattended upgrades"," for the operating system",[41,2136,2137,2140],{},[25,2138,2139],{},"Regular backups"," of the database (cron job, daily export)",[41,2142,2143,2146],{},[25,2144,2145],{},"Monitoring the server itself"," — ideally from an external location",[15,2148,2149],{},"The actual time investment for maintaining a self-hosted LIVCK instance is a few minutes per month when the auto-updater is active.",[10,2151,2153],{"id":2152},"managed-service-the-middle-ground","Managed Service: The Middle Ground",[15,2155,2156],{},"Not every team has the capacity or expertise to operate its own server. At the same time, compliance requirements may be too strict for US-based cloud providers.",[15,2158,2159],{},"LIVCK offers a managed service for exactly this scenario: LIVCK runs on dedicated German servers, maintained and updated by the LIVCK team. You get the benefits of self-hosting — data sovereignty, German data centers, full configuration control — without administering a server yourself.",[15,2161,2162],{},"This is particularly relevant for:",[38,2164,2165,2168,2171,2174],{},[41,2166,2167],{},"Organizations without a dedicated DevOps team",[41,2169,2170],{},"Companies that need to demonstrate GDPR compliance but do not operate internal hosting",[41,2172,2173],{},"Teams that want to start quickly and take over server administration later",[41,2175,2176],{},"International organizations that need EU-based data processing for regulatory reasons",[10,2178,771],{"id":770},[15,2180,2181],{},"Self-hosted statuspages are no longer a niche solution. Docker has lowered the barrier to entry to the point where a working setup takes minutes, not days. The benefits — data sovereignty, independence, predictable costs — clearly outweigh the manageable maintenance effort.",[15,2183,2184],{},"For organizations in regulated industries, self-hosting is often the only viable option. For everyone else, it is an economically and technically sound alternative to cloud providers that rely on escalating prices and feature-gating.",[15,2186,2187],{},"LIVCK provides monitoring and statuspage functionality from a single tool, built in Germany: self-hosted via Docker Compose, optionally as a managed service — the cloud variant is in public beta. Automatic updates and professional support included.",[15,2189,2190],{},"If your statuspage is critical to your operations — and it should be — the control over it should remain in your hands.",[811,2192,2193],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":106,"searchDepth":120,"depth":120,"links":2195},[2196,2197,2202,2208,2209,2210,2214,2219,2223,2224,2225],{"id":1445,"depth":120,"text":1446},{"id":1458,"depth":120,"text":1459,"children":2198},[2199,2200,2201],{"id":1465,"depth":330,"text":1466},{"id":1472,"depth":330,"text":1473},{"id":1505,"depth":330,"text":1506},{"id":1512,"depth":120,"text":1513,"children":2203},[2204,2205,2206,2207],{"id":1519,"depth":330,"text":1520},{"id":1526,"depth":330,"text":1527},{"id":1533,"depth":330,"text":1534},{"id":1540,"depth":330,"text":1541},{"id":1547,"depth":120,"text":1548},{"id":1592,"depth":120,"text":1593},{"id":1677,"depth":120,"text":1678,"children":2211},[2212,2213],{"id":1684,"depth":330,"text":1685},{"id":1800,"depth":330,"text":1801},{"id":1851,"depth":120,"text":1852,"children":2215},[2216,2217,2218],{"id":1858,"depth":330,"text":1859},{"id":1893,"depth":330,"text":1894},{"id":1906,"depth":330,"text":1907},{"id":2038,"depth":120,"text":2039,"children":2220},[2221,2222],{"id":2045,"depth":330,"text":2046},{"id":2061,"depth":330,"text":2062},{"id":2116,"depth":120,"text":2117},{"id":2152,"depth":120,"text":2153},{"id":770,"depth":120,"text":771},"Self-Hosting","Self-hosted vs. cloud statuspage: benefits, requirements, Docker setup and comparison with open-source alternatives like Uptime Kuma and CachetHQ.",{},"\u002Fguides\u002Fen\u002Fself-hosted-statuspage","2026-02-25",11,[1858,1431,2233],"better-stack",[2235,1434],"gdpr-statuspage",{"title":1440,"description":2227},"guides\u002Fen\u002Fself-hosted-statuspage","g2-mt41sfwS9sAFufKq6AAE71BvUtzglu9Fi6Nl_PWw",{"id":2240,"title":2241,"body":2242,"category":833,"description":2836,"extension":835,"faq":836,"meta":2837,"navigation":333,"path":2838,"peerSlug":847,"publishedAt":1426,"readingTime":1427,"relatedComparisons":2839,"relatedGuides":2841,"seo":2843,"stem":2844,"updatedAt":836,"__hash__":2845},"guides\u002Fguides\u002Fen\u002Fuptime-monitoring.md","Uptime Monitoring: Fundamentals, Check Types and Choosing the Right Tool",{"type":7,"value":2243,"toc":2814},[2244,2248,2251,2254,2257,2271,2275,2278,2285,2289,2292,2295,2315,2321,2325,2328,2332,2335,2368,2372,2375,2379,2382,2386,2389,2393,2396,2400,2403,2406,2410,2413,2507,2511,2514,2517,2537,2540,2543,2547,2550,2570,2573,2579,2583,2586,2589,2595,2599,2602,2646,2659,2663,2684,2691,2694,2701,2728,2760,2764,2767,2793,2796,2798,2801,2811],[10,2245,2247],{"id":2246},"what-is-uptime-monitoring","What Is Uptime Monitoring?",[15,2249,2250],{},"Uptime monitoring is the continuous observation of a system's reachability from the outside. A monitoring service checks at fixed intervals whether your website, your API or your server responds — and whether the response is correct. That is the whole point of availability monitoring: not just \"is the server running\", but \"can a user actually reach and use the system\".",[15,2252,2253],{},"Technically, uptime monitoring is a black-box, or outside-in, form of observation. The monitoring system has no access to your source code or internal metrics. It looks at your system from the outside, exactly the way a real visitor would — over the network, with a request, evaluating the response. That is also its greatest strength: you measure precisely what your users experience, not just what an internal health check claims.",[15,2255,2256],{},"In website monitoring and server monitoring, two basic modes of operation complement each other:",[38,2258,2259,2265],{},[41,2260,2261,2264],{},[25,2262,2263],{},"Pull monitoring:"," The monitoring system actively queries the target. It sends an HTTP request, opens a TCP connection or sends a ping and evaluates the response. This is the standard case for publicly reachable services.",[41,2266,2267,2270],{},[25,2268,2269],{},"Push monitoring (heartbeat):"," The monitored system actively reports in to the monitoring service. If the expected signal fails to arrive, an alert fires. This suits cron jobs, background processes and systems behind a firewall that cannot be reached directly from the outside.",[64,2272,2274],{"id":2273},"difference-from-apm-and-performance-monitoring","Difference From APM and Performance Monitoring",[15,2276,2277],{},"Uptime monitoring is often confused with Application Performance Monitoring (APM), yet the two answer different questions. APM is white-box observation: it measures internal metrics such as database query times, error rates and code traces, and needs instrumentation directly in the application code.",[15,2279,2280,2281,2284],{},"The decisive difference can be put simply: ",[25,2282,2283],{},"Uptime monitoring tells you THAT something is broken. APM tells you WHY."," Uptime monitoring detects that the checkout page returns a 500. APM shows you that behind it sits a timeout to the payment database. The two complement each other, and neither replaces the other. For most websites, APIs and servers, solid uptime monitoring is the mandatory baseline — it is cheap, quick to set up and covers the most important question: is the system available to my users right now?",[10,2286,2288],{"id":2287},"why-monitoring-is-business-critical","Why Monitoring Is Business-Critical",[15,2290,2291],{},"The core principle: you learn about an outage first — not your customer. Without monitoring, the first report of an outage is often an annoyed user, a tweet or a support ticket. By that point the outage has already been running for a while, and you have lost control of the communication.",[15,2293,2294],{},"In practice, the cost of downtime falls into three areas:",[38,2296,2297,2303,2309],{},[41,2298,2299,2302],{},[25,2300,2301],{},"Revenue:"," Every outage in the ordering, booking or payment flow costs money directly. A shop that is unreachable for an hour loses not only that hour's orders, but often customers who never come back.",[41,2304,2305,2308],{},[25,2306,2307],{},"Trust and reputation:"," Repeated or uncommunicated outages damage trust — especially with B2B customers who depend on your service. Those who communicate transparently about incidents lose far less trust than those who stay silent.",[41,2310,2311,2314],{},[25,2312,2313],{},"SEO:"," Longer or frequent outages can affect crawling. If the search engine crawler repeatedly finds a page unreachable, that can affect indexing and ranking over the medium term.",[15,2316,2317,2318,1215],{},"What an hour of downtime actually costs depends heavily on the business model and cannot be stated as a blanket figure. An honest estimate works if you take your average revenue per hour and add the indirect costs — support effort, reputational damage, lost new customers. Even this simple calculation usually shows quickly that a monitoring tool for a few euros a month is cheap insurance. How much downtime different availability targets even permit is something we work through in detail in the guide ",[19,2319,2320],{"href":1286},"Uptime percentage explained",[10,2322,2324],{"id":2323},"the-most-important-check-types-in-detail","The Most Important Check Types in Detail",[15,2326,2327],{},"Not all uptime monitoring is the same. Depending on what you are monitoring, you need different check types. Anyone who only checks the home page over HTTP overlooks a whole range of failure scenarios.",[64,2329,2331],{"id":2330},"https-check","HTTP(S) Check",[15,2333,2334],{},"The HTTP(S) check is the most common type, and it does more than just verify that a page is reachable. It additionally evaluates:",[38,2336,2337,2359],{},[41,2338,2339,2342,2343,2346,2347,2350,2351,2354,2355,2358],{},[25,2340,2341],{},"The status code:"," A ",[81,2344,2345],{},"200 OK"," is good; a ",[81,2348,2349],{},"4xx"," (client error) or ",[81,2352,2353],{},"5xx"," (server error) signals a problem. A ",[81,2356,2357],{},"503 Service Unavailable"," is a classic outage signal.",[41,2360,2361,2364,2365,2367],{},[25,2362,2363],{},"Optionally a keyword or content in the body:"," This matters more than it sounds. A broken page can incorrectly return a ",[81,2366,2345],{}," and still show only a blank page or an error message. A content check looks for an expected term (for example \"Add to cart\") and raises an alert if it is missing — even when the status code is fine.",[64,2369,2371],{"id":2370},"tcpport-check","TCP\u002FPort Check",[15,2373,2374],{},"A TCP\u002Fport check verifies whether a specific port is open and accepting connections. This is relevant for services that do not run over HTTP: a database on port 5432 (PostgreSQL), a mail server on port 25 (SMTP) or any other network-based service. The check tells you whether the service accepts connections at all.",[64,2376,2378],{"id":2377},"icmpping-check","ICMP\u002FPing Check",[15,2380,2381],{},"An ICMP, or ping, check verifies the basic network reachability of a host. It tells you whether the server responds on the network — but not whether the services running on it work. A server can answer a ping while the web server has long since crashed. Ping is therefore a good first indicator, but no full substitute for a service-level check.",[64,2383,2385],{"id":2384},"ssl-certificate-check","SSL Certificate Check",[15,2387,2388],{},"Expired TLS certificates are one of the most common avoidable causes of outages. An SSL certificate check warns in good time before expiry — typically a few days ahead. That leaves enough time to renew the certificate before visitors see a security warning in their browser.",[64,2390,2392],{"id":2391},"dns-check","DNS Check",[15,2394,2395],{},"A DNS check verifies correct name resolution. If DNS fails or is misconfigured, your application is unreachable even though the server runs perfectly. DNS problems are insidious because they often surface only after configuration changes.",[64,2397,2399],{"id":2398},"heartbeatcron-monitoring","Heartbeat\u002FCron Monitoring",[15,2401,2402],{},"Heartbeat monitoring covers things that are neither an open port nor a URL: cron jobs, backup scripts, queue workers and other background processes. The principle is the reverse of pull monitoring: after a successful run, the job sends a ping to a URL. If the expected ping fails to arrive within the defined time window, the job is treated as failed and an alert fires.",[15,2404,2405],{},"This solves a problem that HTTP checks cannot address: a nightly backup script has no port you could check from the outside. If it does not complete, without a heartbeat nobody notices — until the backup is needed and missing.",[64,2407,2409],{"id":2408},"apimanual-check","API\u002FManual Check",[15,2411,2412],{},"Some states are known only to your own application. With an API, or manual, check you can set a status programmatically — for example to reflect a business-logic state that a generic check cannot detect.",[203,2414,2415,2428],{},[206,2416,2417],{},[209,2418,2419,2422,2425],{},[212,2420,2421],{},"Check type",[212,2423,2424],{},"Checks",[212,2426,2427],{},"Typical use",[219,2429,2430,2441,2452,2463,2474,2485,2496],{},[209,2431,2432,2435,2438],{},[224,2433,2434],{},"HTTP(S)",[224,2436,2437],{},"Status code + content",[224,2439,2440],{},"Websites, APIs",[209,2442,2443,2446,2449],{},[224,2444,2445],{},"TCP\u002FPort",[224,2447,2448],{},"Open port, connection",[224,2450,2451],{},"Databases, mail servers",[209,2453,2454,2457,2460],{},[224,2455,2456],{},"ICMP\u002FPing",[224,2458,2459],{},"Network reachability",[224,2461,2462],{},"Basic server check",[209,2464,2465,2468,2471],{},[224,2466,2467],{},"SSL",[224,2469,2470],{},"Certificate expiry",[224,2472,2473],{},"HTTPS services",[209,2475,2476,2479,2482],{},[224,2477,2478],{},"DNS",[224,2480,2481],{},"Name resolution",[224,2483,2484],{},"Domain configuration",[209,2486,2487,2490,2493],{},[224,2488,2489],{},"Heartbeat",[224,2491,2492],{},"Missing signal",[224,2494,2495],{},"Cron jobs, backups, workers",[209,2497,2498,2501,2504],{},[224,2499,2500],{},"Manual\u002FAPI",[224,2502,2503],{},"Custom status via API",[224,2505,2506],{},"Business logic",[10,2508,2510],{"id":2509},"check-interval-and-check-locations","Check Interval and Check Locations",[15,2512,2513],{},"The check interval determines how quickly you learn about an outage. With a 5-minute interval, an outage can go undetected for up to five minutes before the next check registers it. For many production systems that is too long.",[15,2515,2516],{},"As a rule of thumb:",[38,2518,2519,2525,2531],{},[41,2520,2521,2524],{},[25,2522,2523],{},"1 minute"," is the standard for production systems. A good compromise between fast detection and acceptable load.",[41,2526,2527,2530],{},[25,2528,2529],{},"30 seconds"," makes sense for critical systems where every minute counts — such as payment infrastructure or central APIs.",[41,2532,2533,2536],{},[25,2534,2535],{},"5 minutes or more"," is enough for non-critical secondary systems where short outages cause no harm.",[15,2538,2539],{},"A second, often underestimated factor is checking from multiple locations. If a target is checked from a single location only, a local network problem between the check point and the target can look like an outage — even though your application runs perfectly for everyone else. Multi-location monitoring checks from several geographic points and compares the results.",[15,2541,2542],{},"This is also where false-alarm protection comes in. Before an alert fires, the system should confirm a suspected failure: several check points must see the error (multi-location confirmation) and\u002For it is rechecked after a short delay (retry\u002Fconfirmation). Many transient glitches resolve themselves within 5 to 10 seconds — a brief recheck prevents them from turning into an alert.",[10,2544,2546],{"id":2545},"alerting-and-escalation","Alerting and Escalation",[15,2548,2549],{},"Monitoring that detects an outage but reaches no one is worthless. Alerting is therefore just as important as the check itself. In practice you need several channels, because different situations demand different levels of attention:",[38,2551,2552,2558,2564],{},[41,2553,2554,2557],{},[25,2555,2556],{},"Email"," for documentation and non-urgent notices.",[41,2559,2560,2563],{},[25,2561,2562],{},"Slack, Discord or Telegram"," for quick information in team chat.",[41,2565,2566,2569],{},[25,2567,2568],{},"SMS or Pushover"," for critical alerts that must arrive even at night.",[15,2571,2572],{},"The most important and most frequently underestimated aspect is alert fatigue. Anyone who receives too many or constantly repeated alerts becomes desensitized — and eventually misses the one alert that really matters. The remedies are throttling (not reporting every repetition again), grouping related alerts and clearly defined escalation paths: who is informed first, who takes over if no one responds?",[15,2574,2575,2576,1101],{},"This is exactly where monitoring becomes a process. Anyone working with on-call rotations needs clear rules for when an alert escalates and to whom. How you get from the first notification to a structured response is something we cover in detail in the ",[19,2577,2578],{"href":747},"Incident management",[10,2580,2582],{"id":2581},"monitoring-and-statuspage-belong-together","Monitoring and Statuspage Belong Together",[15,2584,2585],{},"An alert informs your team. But what about your users? When an outage is confirmed, customers want to know what is going on — without having to open a support ticket first. This is exactly where the loop between monitoring and statuspage closes.",[15,2587,2588],{},"Ideally, a confirmed outage leads not only to an internal alert, but can be turned directly into a public statuspage update: a service is set to \"degraded\", subscribers are notified automatically, and your team can communicate the incident transparently while working on the fix. That takes pressure off support and builds trust.",[15,2590,2591,2592,1215],{},"For this to work, monitoring and statuspage should not be two separate tools that you sync manually. What matters in a good statuspage — from service structure to incident communication — is something we have summarized in the ",[19,2593,2594],{"href":1099},"Statuspage best practices",[10,2596,2598],{"id":2597},"criteria-for-choosing-a-tool","Criteria for Choosing a Tool",[15,2600,2601],{},"Which monitoring tool is the right one depends on your requirements. The following criteria help you compare offerings on the merits, rather than being dazzled by feature lists:",[38,2603,2604,2610,2616,2622,2628,2634,2640],{},[41,2605,2606,2609],{},[25,2607,2608],{},"Check types:"," Does the tool cover what you actually monitor? Plain HTTP is rarely enough — TCP, SSL and heartbeat belong in most setups.",[41,2611,2612,2615],{},[25,2613,2614],{},"Check interval:"," Does the plan you need offer an interval that is fast enough? Some cheap tiers are capped at 5 minutes.",[41,2617,2618,2621],{},[25,2619,2620],{},"Multi-location:"," Does it check from several locations to avoid false alarms?",[41,2623,2624,2627],{},[25,2625,2626],{},"Self-hosting option:"," Can you run the monitoring on your own infrastructure when you need full control?",[41,2629,2630,2633],{},[25,2631,2632],{},"Data privacy and server location:"," Where is the data processed? For companies with customers in the EU, a European or German server location is often mandatory.",[41,2635,2636,2639],{},[25,2637,2638],{},"Free tier:"," Is there a free entry point that lets you test the tool for real?",[41,2641,2642,2645],{},[25,2643,2644],{},"Incident integration:"," Can an alert be turned directly into statuspage communication, or does monitoring stay an isolated silo?",[15,2647,2648,2649,563,2651,737,2654,2658],{},"If you want to weigh specific providers against each other, you will find detailed comparisons — for example for ",[19,2650,689],{"href":720},[19,2652,700],{"href":2653},"\u002Fen\u002Fbetter-stack-alternative",[19,2655,2657],{"href":2656},"\u002Fen\u002Fhetrixtools-alternative","HetrixTools",". There you can see in detail where each one's strengths and limits lie, particularly when it comes to server location and the link between monitoring and statuspage.",[10,2660,2662],{"id":2661},"uptime-monitoring-with-livck","Uptime Monitoring With LIVCK",[15,2664,2665,2666,563,2668,563,2670,563,2673,563,2675,563,2677,2679,2680,2683],{},"LIVCK combines uptime monitoring and statuspage in a single tool — that is the essential difference from solutions that only monitor or only provide a statuspage. For monitoring, seven check types are available: ",[25,2667,2434],{},[25,2669,2445],{},[25,2671,2672],{},"Ping",[25,2674,2478],{},[25,2676,2467],{},[25,2678,2489],{}," (for cron jobs and background processes) and ",[25,2681,2682],{},"Manual"," via the API. This covers publicly reachable services, certificate expiry, DNS configuration and jobs behind a firewall.",[15,2685,2686,2687,2690],{},"Against false alarms, LIVCK works with ",[25,2688,2689],{},"majority detection across independent probe locations",": an incident is only triggered once the majority of locations confirm the error — checks run from up to eight locations, six of them in the DACH region. Transient glitches that resolve themselves after a few seconds therefore do not lead to unnecessary alerts and alert fatigue. Notifications run over email, SMS, voice call, Slack, Microsoft Teams, Telegram, Discord and webhooks.",[15,2692,2693],{},"The decisive advantage is the direct statuspage integration: a confirmed outage becomes a public update with automatic subscriber notification, without switching tools. Statuspage features such as custom branding, private pages and the uptime calendar are included in every plan, at no extra cost.",[15,2695,2696,2697,2700],{},"For operation, you have a choice. ",[25,2698,2699],{},"Self-hosted via Docker Compose"," is set up in minutes:",[101,2702,2704],{"className":103,"code":2703,"language":105,"meta":106,"style":106},"curl -fsSL https:\u002F\u002Fget.livck.com -o docker-compose.yml\ndocker compose up -d\n",[81,2705,2706,2718],{"__ignoreMap":106},[110,2707,2708,2710,2712,2714,2716],{"class":112,"line":113},[110,2709,83],{"class":123},[110,2711,1710],{"class":127},[110,2713,1744],{"class":138},[110,2715,163],{"class":127},[110,2717,1749],{"class":138},[110,2719,2720,2722,2724,2726],{"class":112,"line":120},[110,2721,1763],{"class":123},[110,2723,1766],{"class":138},[110,2725,1769],{"class":138},[110,2727,1772],{"class":127},[15,2729,2730,2731,2735,2736,2739,2740,2743,2744,2749,2750,2754,2755,2759],{},"A modest entry-level server is already enough, such as the ",[19,2732,2734],{"href":756,"rel":2733},[758],"Hetzner Cloud CX22 from about €4.75\u002Fmonth"," — the only important point is that the monitoring does not run on the same infrastructure as the systems it monitors. Alternatively, a ",[25,2737,2738],{},"managed service on German servers"," is available, and the ",[25,2741,2742],{},"LIVCK Cloud Free plan"," (€0, 20 services, 120s interval, 1 statuspage) is in public beta — access via the waitlist. Because LIVCK comes from Germany and works GDPR by design, it is particularly well suited to regulated industries. You can find more on scope and installation in the ",[19,2745,2748],{"href":2746,"rel":2747},"https:\u002F\u002Fdocs.livck.cloud",[758],"LIVCK documentation"," and on the ",[19,2751,2753],{"href":1344,"rel":2752},[758],"statuspage overview",". If you are generally interested in running things yourself, the guide on the ",[19,2756,2758],{"href":2757},"\u002Fen\u002Fguides\u002Fself-hosted-statuspage","self-hosted statuspage"," is worth a look too.",[10,2761,2763],{"id":2762},"common-monitoring-mistakes","Common Monitoring Mistakes",[15,2765,2766],{},"Even with the right tool, there are typical mistakes that undermine monitoring:",[38,2768,2769,2775,2781,2787],{},[41,2770,2771,2774],{},[25,2772,2773],{},"Only checking the home page:"," The home page can run perfectly while login, checkout or API have failed. Monitor the business-critical paths, not just the shop window.",[41,2776,2777,2780],{},[25,2778,2779],{},"Intervals that are too long:"," A 15-minute interval may save a few cents, but it leaves an outage undetected for a quarter of an hour. For critical systems that is too slow.",[41,2782,2783,2786],{},[25,2784,2785],{},"Monitoring on the same infrastructure:"," If monitoring runs on the same server or in the same data center as the monitored systems, it fails together with them — exactly when you need it most. Monitoring always belongs on independent infrastructure.",[41,2788,2789,2792],{},[25,2790,2791],{},"No alerting escalation path:"," An alert that only lands in an ignored email inbox helps no one. Define who is notified when, and what happens if no one responds.",[15,2794,2795],{},"These four points cost nothing but a little attention during setup — and in practice they decide whether your monitoring holds up when it matters or not.",[10,2797,771],{"id":770},[15,2799,2800],{},"Uptime monitoring is the cheapest insurance you can take out for your digital services: you learn about an outage before your customers do. What matters is that the monitoring fits what you run — with the right check types (not just HTTP, but also TCP, SSL and heartbeat for cron jobs), a sufficiently short check interval, false-alarm protection through multiple confirmation and a well-thought-out alerting path.",[15,2802,2803,2804,2806,2807,1215],{},"You get the most out of it when monitoring and statuspage do not sit in separate silos but work together: a confirmed outage turns directly into transparent communication to your users. How quickly you need to react depends on your availability target — you will find the concrete numbers in the guide ",[19,2805,2320],{"href":1286},". Finally, make sure to run the monitoring on independent infrastructure and — if data privacy matters to you — to check server location and ",[19,2808,2810],{"href":2809},"\u002Fen\u002Fguides\u002Fgdpr-statuspage","GDPR compliance",[811,2812,2813],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":106,"searchDepth":120,"depth":120,"links":2815},[2816,2819,2820,2829,2830,2831,2832,2833,2834,2835],{"id":2246,"depth":120,"text":2247,"children":2817},[2818],{"id":2273,"depth":330,"text":2274},{"id":2287,"depth":120,"text":2288},{"id":2323,"depth":120,"text":2324,"children":2821},[2822,2823,2824,2825,2826,2827,2828],{"id":2330,"depth":330,"text":2331},{"id":2370,"depth":330,"text":2371},{"id":2377,"depth":330,"text":2378},{"id":2384,"depth":330,"text":2385},{"id":2391,"depth":330,"text":2392},{"id":2398,"depth":330,"text":2399},{"id":2408,"depth":330,"text":2409},{"id":2509,"depth":120,"text":2510},{"id":2545,"depth":120,"text":2546},{"id":2581,"depth":120,"text":2582},{"id":2597,"depth":120,"text":2598},{"id":2661,"depth":120,"text":2662},{"id":2762,"depth":120,"text":2763},{"id":770,"depth":120,"text":771},"Uptime monitoring explained: check types (HTTP, TCP, heartbeat), intervals, alerting and how to choose a tool — including self-hosting and GDPR.",{},"\u002Fguides\u002Fen\u002Fuptime-monitoring",[845,2233,2840],"hetrixtools",[2842,848,1433],"uptime-percentage-explained",{"title":2241,"description":2836},"guides\u002Fen\u002Fuptime-monitoring","QJCLMWfRd3cgXQdDpVJ1EpANeP0-nDxpFh2lgy1k3b0",1783478157227]