Home / Blog / Uptime monitoring
Uptime monitoring

How do you monitor a customer login flow without storing a real password in your monitoring tool?

A homepage check stays green while nobody can sign in. Here is how we monitor the login path end to end using a synthetic account and a scoped secret, so no customer credential ever sits in a monitoring config.

Close-up of a small brass key and an open padlock resting on a worn wooden desk beside folded reading glasses and a ceramic mug, warm morning window light, shallow depth of field

Why a Homepage Check Misses a Broken Login

Almost every monitoring setup starts the same way: a GET request to the marketing homepage every minute, from a couple of regions, alerting on anything that is not a 200. That check is worth having, but it exercises almost none of the code your paying customers touch. The homepage is usually static, often cached at a CDN edge, and it can keep serving a perfect response long after the origin has stopped doing useful work. Signing in, by contrast, walks through the session store, the identity provider, the password hashing library, the rate limiter, the cookie settings, and whatever database holds the account record. Any one of those can fail on its own. Related: How to Choose an Uptime Check Interval That Actually Catches Outages

The failure modes we run into are rarely dramatic. An OAuth client secret quietly expires. The session store fills up and starts evicting new sessions. Clock skew on one node invalidates freshly issued tokens. A cookie attribute changes in a routine deploy and the post-login redirect drops the session on Safari but not Chrome. In every one of those cases the homepage returns 200, the load balancer reports healthy, and the first signal you get is a support email from someone who assumed the problem was on their end. A check that actually completes the login flow turns that quiet failure into a page. Related: Status Page Best Practices That Reduce Support Tickets

Keep reading: How to Choose an Uptime Check Interval That Actually Catches Outages, Status Page Best Practices That Reduce Support Tickets, Uptime vs Response Time: What to Monitor and Why Both Matter. See how PingCrumb helps you uptime monitoring and hosted status pages.

Use a Dedicated Synthetic Account, Never a Customer One

The first rule is that the account your monitor uses should be one you created for that purpose and nothing else. Give it its own tenant or workspace, seed it with obviously fake data, leave billing off, and grant it the lowest role that can still reach a signed-in page. Flag it so it never lands in your analytics, your revenue reports, or your churn numbers, because a robot that logs in every ten minutes will otherwise look like your most engaged user. The point of all this is blast radius: if the credential ever leaks, what an attacker gets is an empty account with no admin rights and no customer data.

The second rule is to prefer a credential type built for machines. A scoped API token or a service key that can be revoked in one click is far better than a human password, because it can be limited to the endpoints the check needs and rotated without touching a login form. When your auth stack genuinely requires a password, generate a long random one that exists only for the monitor, and store it in the monitoring tool's encrypted secret field or in your secret manager. Never put it in a check name, a URL query string, a shared spreadsheet, a screenshot in a ticket, or a repository. Rotate it on a schedule and again whenever someone leaves the team. If you have to exempt the account from multi-factor authentication, pair that exemption with an IP allowlist for your monitoring sources so the exemption is not a standing invitation. Related: Uptime vs Response Time: What to Monitor and Why Both Matter

Assert on Something Only a Signed-In User Can See

A status code is weak proof that authentication worked. Plenty of broken login flows return a cheerful 200 with an error banner rendered client side, and a redirect chain can look perfectly healthy while dropping the session cookie at the last hop. The check has to assert on content that can only exist for a valid session. In practice we like a two-step check: post the credential to the auth endpoint, then use the resulting session or token to call a small authenticated JSON endpoint and confirm a stable field, such as the account identifier or the workspace name that belongs to the synthetic account.

Pick that assertion string carefully. Anything in marketing copy or a dashboard heading will change during a redesign and hand you a false alarm on a Saturday. A machine readable endpoint that you control, returning a compact object about the current user, is the most durable target and the cheapest to parse. It also helps to time each step separately, because a login path usually gets slow before it gets broken: if the token exchange normally takes a few hundred milliseconds and starts taking several seconds, you want that visible on a chart before it turns into failed requests. Fail the check on wrong content, not only on a bad status code.

Keep the Check Quiet, Safe, and Maintainable

An authenticated check has side effects that a simple GET does not, and those side effects can bite you. Logging in every minute from several regions can trip your own brute-force protection, flood your audit log, inflate session tables, or lock the synthetic account and cascade into a false outage. We generally run the login check on a slower cadence than the basic availability check, something in the range of five to fifteen minutes is typical, while a lightweight health endpoint keeps running frequently. Allowlist your monitoring source addresses in the rate limiter, and confirm that your lockout policy cannot lock the very account you use to detect problems. Related: How to Set Up Alerting That Avoids False Alarms

The bigger long-term risk is drift. Login flows change more often than people expect: a consent screen appears, a captcha gets added, the form fields are renamed, an SSO option becomes the default. A check that starts failing after a routine deploy for a boring reason teaches everyone to ignore it, and an ignored check is worse than no check at all. Add the login monitor to the deploy checklist for anything touching auth, route its alerts to whoever owns that code rather than to a general channel, and re-read the assertion every time the flow changes. If you stop trusting a check, either fix it that week or delete it.

Key takeaways
  • A green homepage check says nothing about whether customers can sign in, because login exercises a completely different code path.
  • Use a purpose-built synthetic account with fake data and minimal rights, so a leaked credential exposes nothing worth stealing.
  • Prefer a scoped, revocable token over a password, and keep any secret in an encrypted field, never in a URL or a check name.
  • Assert on a stable authenticated response field, run the check less often than your basic health check, and review it whenever the auth flow changes.
Julien Jimenez
Written by

Julien Jimenez

Julien Jimenez is an independent software builder based in Paris. He designs, ships, and operates focused SaaS products for small businesses and independent professionals. Read the full author page.

Know before your customers do

Uptime monitoring and hosted status pages. PingCrumb is built to help you put this into practice.

Start monitoring

Get the PingCrumb playbook

Practical guides on uptime monitoring, straight to your inbox as we publish them. No spam, unsubscribe any time.

By subscribing you agree to our privacy policy.