Gitlab Naemon/Icinga/Nagios plugin which checks various stuff via Gitlab API(v4) and output of gitlab-ctl services.



  • Ruby >2.3


  • -s, -H: gitlab url, only https supported,

  • -k: if you've a self signed cert

  • -t: access token, required for all api calls except health mode

  • -i: project id, ci-runner id

  • -n: name of group (regex), sidekiq jobs

  • -e: exclude (regex)

  • -d: debug/verbose output. at the moment only possible with health mode


Health check

Checks the status of the readiness endpoint. Check here for more information.

Optional debug/verbose output possible via -d.

naemon@gitlab:plugins$ ./check_gitlab.rb -m health -s  [-k]
OK - Gitlab probes are in healthy state


If any service of 'gitlab-ctl status' reports down service status will be critical.

Requires a sudo entry to get output of gitlab-ctl command.

naemon ALL = NOPASSWD: /usr/bin/gitlab-ctl status
naemon@gitlab:plugins$ ./check_gitlab.rb -m services
Critical - logrotate, mattermost is down

CI Pipeline duration

Checks duration of finished CI pipeline in seconds with perfdata. (/projects/:id/pipelines)

naemon@gitlab:plugins$ ./check_gitlab.rb -m ci-pipeline-duration -s  [-k] -t  -i  -w 100 -c 200
Critical - Pipeline #265 took 265s | duration=265s;100;150

CI Pipeline status

Checks status of latest CI pipeline. (/projects/:id/pipelines)

Options -w and -c allows regex.

Possible values for a ci pipeline status can be found here.

naemon@gitlab:plugins$ ./check_gitlab.rb -m ci-pipeline-status -s  [-k] -t  -i  -w pending -c 'failed|skipped'
OK - Status of pipeline #266693109: Success

CI Runner status

Checks status of all registered CI runners. (/runners/all)

Access token needs admin privileges.

Possible --status values are listed here

Exclude runners via --exclude (regex)

naemon@gitlab:plugins$ ./check_gitlab.rb -m ci-runner-status -s  [-k] -t  -w 2 -c 5 --status offline
Critical - Offline runners: srv-cir-04(10), workbot15(63), srv-cir-01(76), srv-cir-05(111), srv-cir-07(117), srv-cir-08(121), mac-01(131)

CI Runner jobs duration

Checks duration (in seconds) of the first found running job with perfdata. (/runners/:id/jobs)

naemon@gitlab:plugins$ ./check_gitlab.rb -m ci-runner-jobs-duration -s  [-k] -t  -i  -w 5 -c 10
Critical - ansible_lint is running for 15s | duration=15s;5;10

Group size

Checks size of all groups in megabytes with perfdata. (/groups)

Access token needs admin privileges.

Specify --name or --exclude (both use regex) option to limit the output (max 100 groups).

naemon@gitlab:plugins$ ./check_gitlab.rb -m group_size -s  [-k] -t  -w 4072 -c 5096 -n '(DevOps|Docs)'
OK - DevOps: used space 191MB, Docs: used space 17MB | DevOps=191MB;4072;5096 Docs=17MB;4072;5096


For license checks access token needs admin privileges.


Check remaining days when license expires. Specify less then remaining days via warning threshold. (/license)

naemon@gitlab:plugins$ ./check_gitlab.rb -m license-expire -s  [-k] -t  -w 40
Warning - License  will expire at 2019-08-22 - 51 days left


Check for over-subscription. (/license)

naemon@gitlab:plugins$ ./check_gitlab.rb -m license-overage -s  [-k] -t  -w 1 -c 5
OK - Active users: 43, Overage: 0 | active_users=43 overage=0;1;5


For Sidekiq checks access token needs admin privileges.

Job statistics

Check usage of performed Sidekiq jobs with perfdata. (/sidekiq/job_stats)

Use --name option to specify job. Possible values are listed here.

naemon@gitlab:plugins$ ./check_gitlab.rb -m sidekiq-jobs -s  [-k] -t  -n dead -w 1 -c 5
OK - Sidekiq jobs - Dead: 0 | dead=0;2;5