Search Exchange

Search All Sites

Nagios Live Webinars

Let our experts show you how Nagios can help your organization.

Contact Us

Phone: 1-888-NAGIOS-1


Remember Me


12 votes
check_drbd-0.5.2check_drbd v0.5.2
check_drbd-0.5.1check_drbd v0.5.1
check_drbdcheck_drbd v0.5.3

Help Support Ethan Galstad's New Project:

Help Support Ethan

A Message From The Founder...

As the founder of Nagios, I'm asking for your help in a cause that's dear to my heart.

I'm launching a new project to help better the world by providing the information, ideas, and inspiration that I believe can improve the lives of people everywhere.

I know you're busy managing networks, but I would appreciate it if you would consider liking my Facebook page and showing your support for the content and messages I produce by sharing them with your friends and family.

You can learn more about my project by visiting Thank you for your time. I wish you all the best in your endeavors, whatever they may be.

- Ethan

Checks the state of DRBD devices
+++ Usage:
check_drbd [-d ] [-e expect] [-p proc] [-r role] [-o states] [-w states] [-c states] [--debug]
-d STRING [default: 0. Example: 0,1,2 ]
-p STRING [default: /proc/drbd. Use '-' for stdin]
-e STRING [Must be this connected state. Example: Connected]
-r STRING [Must be this node state. Example: Primary]
-o STRING [Change value to OK. Example: StandAlone]
-w STRING [Change value to WARNING. Example: SyncingAll]
-c STRING [Change value to CRITICAL. Example: Inconsistent,WFConnection]

+++ Example Output:
DRBD OK: Device 0 Primary Connected Consistent
+++ Notes:
* Version 0.5.x should work with DRBD 0.6, 0.7, 8.0, 8.2, and 8.3
* All versions require perl.
* If DRBD is running on remote host, plugin may require check_by_ssh, nrpe, or nsca.
* Use the --debug option to understand what effects the options have.

+++ ChangeLog:
++++ 0.5.3
* Added support for drbd 8.3 connection states
++++ 0.5.2
* Added support for drbd 8.2 connection states (patch from Norbert Tretkowski)
++++ 0.5.1
* Added support for monitoring multiple devices at once
++++ 0.5
* Added support for drbd 8.0
++++ 0.4.1
* Code cleanup, no new features
+++ Copyright
by Brandon Lee Poyner bpoyner /
Reviews (8)
bymirQ, December 29, 2014
As other users have posted here, there is a bug in this script when use drbd version 8.4.

The output field identifier for role of node has changed in drbd version 8.3.

To use the script in version 8.3+, the role identifier needs to be changed from "st" to "ro".

Apply this patch:

--- check_drbd.orig 2014-12-29 18:03:37.000000000 +0100
+++ check_drbd 2014-12-29 18:03:59.000000000 +0100
@@ -217,7 +217,7 @@
if (/^s?(d+):.* cs:(w+)/) {
$cs{$1} = $2;
- if (/^s?(d+):.* st:(w+)//) {
+ if (/^s?(d+):.* ro:(w+)//) {
$st{$1} = $2;
if (/^s?(d+):.* ld:(w+)/) {

Can you fix it?

The comparison of the local role and the expected role, with parameter "-r", doesn't work for me. It doesn't matter, which role were set with "-r", the result is always the same:

DRBD OK: Device 1 Connected UpToDate

The "--debug"-parameter shows maybe the bug. The expected role, set with "-r", were set in variable "DRBD Role", not in "DRBD Expect". The variable "DRBD Role" should contain the local Role and the Variable "DRBD Expect" the expected one, right?

So, is there a correction needed? Has someone another result?
--- /tmp/check_drbd.orig 2014-03-03 01:35:53.000000000 +0400
+++ check_drbd 2014-03-03 08:54:59.897998487 +0400
@@ -12,7 +12,7 @@
my $drbd_proc='/proc/drbd';
my $drbd_devices=0;
my ($drbd_expect, $drbd_role, $drbd_version, $debug_mode);
-my (%options, %cs, %st, %ld, %ds, %check, %warning, %critical);
+my (%options, %cs, %st, %ld, %ds, %oos, %check, %warning, %critical);

my $prog_name=basename($0);
my $prog_revision='0.5.3';
@@ -210,10 +210,17 @@
} else {
$input = "STDIN";
+ my $devnum;
while() {
if (/^version: (\d+).(\d+)/) {
$drbd_version = "$1.$2";
+ if (/^\s?(\d+):.*/) {
+ $devnum = $1;
+ }
+ if (defined($devnum) and /\soos:(\d+)/) {
+ $oos{$devnum} = $1;
+ }
if (/^\s?(\d+):.* cs:(\w+)/) {
$cs{$1} = $2;
@@ -248,11 +255,11 @@
my @devices;
if ($drbd_devices =~ /^all$/i) {
- for my $device ( keys %cs ) {
+ for my $device ( sort keys %cs ) {
} elsif ($drbd_devices =~ /^configured$/i) {
- for my $device ( keys %cs ) {
+ for my $device ( sort keys %cs ) {
next if ($cs{$device} eq "Unconfigured");
@@ -264,6 +271,9 @@
&myexit('UNKNOWN',"Could not find device $device");
$check{$device} = 1;
+ if (defined($oos{$device}) and $oos{$device} > 0) {
+ &myexit('WARNING',"Out of sync on device $device: $oos{$device} sectors");
+ }
if (int(keys %check) == 0) {
&myexit('UNKNOWN',"No configured devices found");
byhostingnuggets, November 13, 2013
This plugin crucially misses the option "-d all" to check all the DRBD devices from the /proc/drbd file. Having to manually adapt which devices to check for each node/server is annoying.
byjanfai, October 22, 2013
I have four resources and following command is doing it's excellent job.

check_drbd -d 1,2,3,4 -r Primary -o Primary -w StandAlone -c WFConnection
bymmarodin, April 19, 2012
When will be released checker for DRBD 8.4.x release?
Thanks, bye!
bypbr, August 4, 2010

thanks for the nice script. I use it to monitor a primary/primary device in a XenServer Cluster.

Here my solution to a bug I had using drbd82-8.2.6-1.el5.centos Package from the CentOS Repository:

The state in /proc/drbd is defined as "ro:" and not as "st:" as the script expects. I added the following lines to subroutine "parse_proc" within the while loop:

if (/^s?(d+):.* ro:(w+)//) {
$st{$1} = $2;

Works perfect! Best regards,

bygmastap, July 14, 2010
1 of 1 people found this review helpful

I really like this plugin. It is easy to use and the syntax is very well written. But I can not use it on DRBD 8.3.

The Plugin does not show the correct role. A short look and I realized that the plugin does not use the correct pattern. To detect if a DRBD volume is Primary or Secondary the "old" "st:" string is checked. but this string does not exists anymore.

Theifore I just changed in line 213 from:
if (/^s?(d+):.* st:(w+)//) {


if (/^s?(d+):.* ro:(w+)//) {

Now as far as I can see it works perfectly with version 0.8.3

Best Regards,