How do I set the debug level?

Each of the daemons normally has debug messages compiled into the program, but these are disabled by default. 
There are two ways to enable the debug output:

1st Method

The first way of getting debug output is to dynamically turn it on using the Console using the setdebug level=nnn command.

 Examples: 
 Log into bconsole, use the following commands: 
 - To enable debug for a storage called 'File' (use your own storage name here, with 'tab' after storage=, you will get a list: 
setdebug level=150 trace=1 timestamp=1 storage=File
- To enable debug for the director:
setdebug level=150 trace=1 timestamp=1 dir
- To enable debug for a client (in this example for client named 'centos-fd' 
setdebug level=150 trace=1 timestamp=1 client=centos-fd

In all cases you get an answer, which contains the file names, where the debug is written, 
2000 OK setdebug=150 trace=1 hangup=0 timestamp=1 tracefile=/var/lib/bareos/centos-fd
The file will be written on the machine, where the respective daemon runs in the working directory. 
Be aware that debug-files might get quite large. 

To deactivate the debug, use the same commands as above but with 'level=0 trace=0'
setdebug level=0 trace=0 client=centos-fd
In rare cases, when you want to debug all daemons (including remote clients and storages) you can use the special keyword all.
setdebug level=100 trace=1 timestamp=1 all

2nd Method

The second one is to add the -d nnn option on the command line when starting the daemon. 
This is more used in conjunction with the -t for debugging configuration trouble.

How to automated setting and un-setting debug level with scheduled admin jobs

Tracing the daemon with a high debug level can generated very large trace file. When you need to track down a problem that occur only around a certain time, it might be interesting to set automatically the level at a certain time and stop the collect after a specific period of time.

For example we want to debug the Tape storage from 10 minutes before normal start of jobs (21:00) and we know that if the problem occur it will be in the first 20 minutes, so we will stop the trace at 21:20. What we add also is a call to a script that will rotate and compress the collected date, to avoid filling up the /var/lib/bareos/ partition.

on the director, storage, filedaemon.


We start by defining 2 schedules to set and unset the debug tracing.
Schedule {
 Name = "admin_setdebug_2050"
 Description = "Run every day at 20:50"
 Enabled = Yes
 Run = at 20:50
}
Schedule {
 Name = "admin_unsetdebug_2120"
 Description = "Run every day at 21:20"
 Enabled = Yes
 Run = at 21:20
}
Now we define the 2 jobs
Job {
 Name = "admin-setdebug"
 Description = "admin job setdebug level"
 Type = Admin
 Priority = 10
 Level = Full
 Client = bareos-fd
 FileSet = "Catalog"
 Schedule = "admin_setdebug_2050"
 Pool = "Full"
 Storage = "Tape-0"
 Allow Duplicate Jobs = no
 Messages = Standard
 RunScript {
    Runs When = Before
    Runs On Client = no
    Console = "setdebug level=1000 trace=1 timestamp=1 storage=Tape-0"
 }
}

Job {
 Name = "admin-unsetdebug"
 Description = "admin job setdebug level 0"
 Type = Admin
 Priority = 10
 Level = Full
 Client = bareos-fd
 FileSet = "Catalog"
 Schedule = "admin_unsetdebug_2120"
 Pool = "Full"
 Storage = "Tape-0"
 Allow Duplicate Jobs = no
 Messages = Standard
 RunScript {
    Runs When = Before
    Runs On Client = no
    Console = "setdebug level=0 trace=0 timestamp=0 storage=Tape-0"
 }
 RunScript {
    Runs When = after
    Runs On Client = no
    Command = "bash -c '/var/lib/bareos/trace_rotate.sh'"
 }
}
You need of course to adapt the job to your needs, like what you have to trace (director, specific storage, specific client, all)

Example of script that can do trace rotation
trace_rotate.sh
#!/bin/sh
# Rotate bareos-sd trace file
D=$(date "+%Y%m%d_%H%M%S")
for F in dir sd fd; do
if [ -f /var/lib/bareos/bareos-${F}.trace ]; then
mv -v /var/lib/bareos/bareos-${F}.trace /var/lib/bareos/bareos-${F}.trace.${D}
xz -9 -v /var/lib/bareos/bareos-${F}.trace.${D}
fi
done
chown bareos:bareos /var/lib/bareos/trace_rotate.sh
chmod 0750 /var/lib/bareos/trace_rotate.sh

for remote storage or fd

- In case of remote client, you need to copy the trace_rotate.sh script and also change `Runs On Client = yes` 
- In case of remote storage, you need to copy the trace_rotate.sh script and schedule its execution by another mechanism (systemd timers, cron, at)

Tags