How-to sync piggyback files in a distributed setup

Currently, there is no mechanism to sync piggyback files between a central and a remote site.

LAST TESTED ON CHECKMK 2.1.0P1

Table of Contents

Step-by-step guide

You need to sync  ~/tmp/check_mk/piggyback/ and ~/tmp/check_mk/piggyback_sources/ to the remote site

  • In ~/tmp/check_mk/piggyback all piggyback files are stored
  • In ~/tmp/check_mk/piggyback_sources all piggyback sources are to be found

Without these files, the data will always be interpreted as outdated!


  • If you're using dcd connections, you should be aware that hosts could be created twice. To avoid this, you should use the restriction option inside the dcd connection parameters
  • Please make sure that you modify your firewall configuration. Rsync needs the TCP Port 873


There are, for sure several ways to create a small sync mechanism. We recommend using rsync. Here is a small script.

#!/usr/bin/env bash
#
#
# Purpose:
# This script allows you to sync piggyback files between the central and remote site
#
# Usage:
# ./piggyback_sync.sh -s $SOURCE -r $REMOTE -d 
# The -d option will run rsync with --progress -h -vv to show more debug

while getopts s:r:h:d option;
do
	case "$option" in
		s) source_site=${OPTARG}
		;;
		r) remote_site=${OPTARG}
		;;
	    d) debug='true'
		;;
		h) help='true'
		;;
		*) echo 'Unknown parameter!' && exit 1
		;;
	esac
done

# Variables

source_dir_piggyback_files="/omd/sites/$source_site/tmp/check_mk/piggyback/"
source_dir_piggyback_sources="/omd/sites/$remote_site/tmp/check_mk/piggyback_sources/"
remote_dir_piggyback_files="/omd/sites/$source_site/tmp/check_mk/piggyback/"
remote_dir_piggyback_sources="/omd/sites/$remote_site/tmp/check_mk/piggyback_sources/"


# Functions

help() {
	echo -e "Syntax: -s source_site -r remote_site\n-d will run the script with rsync options --progress -h -vv to show more debug"
}

initialize() {
	if [ -z "$source_site" ]
	then
		echo 'Source site missing!'
		help
		exit 1
	fi
	if [ -z "$remote_site" ]
	then
		echo 'Remote site missing!'
		help
		exit 1
	fi
	if [ "${debug}" == "true" ]
	then
		rsync_opts="--progress -h -vv"
	else
		rsync_opts="-q"
	fi
}

sync() {
	rsync -avzu --delete ${rsync_opts}  "$source_dir_piggyback_files" "$remote_dir_piggyback_files"
	rsync -avzu --delete ${rsync_opts}  "$source_dir_piggyback_sources" "$remote_dir_piggyback_sources"
}

# Main
if [ "${help}" == "true" ]
then
	help
	exit 0
else
	initialize
	sync
fi


To run the script regularly, you need to create a cronjob.

Please keep in mind that Checkmk does not officially support this, and use it at your own risk!