25

I'm planning to supervise services by periodically checking if they are up and running, Jenkins is our central orchestration tool and must be running with near zero downtime.

How can I check health status of a Jenkins server - By health status I mean service is up and web app application is operational ?

Does Jenkins provide a native health check URL ? Or does I need to make additional scripts? if so what factors should be included in beside checking jenkins.service and curl web app home page.

storm
  • 1,759
  • 3
  • 16
  • 34

6 Answers6

17

Check the login page, e.g. http://localhost:8080/login

Most pages are password protected but not this one (or you couldn't log in).

10

The complication reside in the definition of the health status (and its usefulness).

You mentioned the definition being service is up and web app application is operational and for that indeed checking the homepage should suffice.

However that doesn't mean the service is properly configured for and correctly performing all the jobs that it's supposed to be doing. Without a consistent, universally acceptable definition of a health status there is no point of providing such information as a single, one-stop location to check.

But Jenkins offers via its Remote access API various checking points that users can combine to derive their interpretation of the overall service health status. For example maybe checking the status of all the configured jobs or at least that of the critical ones would be more useful, which could be done using the .../job_id/lastSuccessfulBuild/api/ or .../job_id/api/ checkpoints.

The JenkinsAPI could also be of interest (better docs at least), found via Where can I find jenkins restful api reference?

Dan Cornilescu
  • 6,780
  • 2
  • 21
  • 45
3

Check the logo of jenkins is accessible from outside.

For ex. http://localhost:8080/static/<anystring>/images/svgs/logo.svg

This will less load to the server than login page.

arulraj.net
  • 131
  • 3
1

For the sake of google completeness, since I just went and looked it up:

/whoAmI/api/json?tree=authenticated

As in (taken from the helm):

    readinessProbe:
        httpGet:
          path: {{ include "oc.contextpath" . }}/whoAmI/api/json?tree=authenticated
          port: {{ .Values.OperationsCenter.ContainerPort }}
        initialDelaySeconds: 30
        timeoutSeconds: 5
        failureThreshold: 100
    livenessProbe:
        httpGet:
          path: {{ include "oc.contextpath" . }}/whoAmI/api/json?tree=authenticated
          port: {{ .Values.OperationsCenter.ContainerPort }}
        initialDelaySeconds: 300
        timeoutSeconds: 5
        failureThreshold: {{ .Values.OperationsCenter.HealthProbeLivenessFailureThreshold }}
Vetsin
  • 111
  • 2
1

The proper way is to install the Metrics Plugin, and then you can use the following endpoint:

$JENKINS_URL/metrics/healthcheckOk

It should reply with status code 200 when everything is ok, and 503 otherwise. There's no response body.

felipecrs
  • 121
  • 3
0

/api/json will return 2.7 kB. This is smaller than the login page, the logo.svg, and favicon.svg. If Jenkins is responding but not ready for operation, then it returns HTML.

Nathan
  • 101
  • 2