Details
Description
I ran latest updates to Ubuntu which upgraded php8.2 to 8.4. Installed required PHP8.4 modules for Observium. The Primary Observium host polls and discovers fine.
The partitioned pollers were updated the same way and discovery is functioning correctly; However, polling is throwing the following stack trace that is obviously something to do with the rrdtool -
Oops! Something went wrong! You may want to report this to the Observium developers. |
fwrite(): Argument #1 ($stream) must be of type resource, null given in /opt/observium/includes/rrdtool.inc.php:329 |
Stack trace:
|
#0: (unknown function) called at [/opt/observium/includes/rrdtool.inc.php:329] |
324: logfile('rrd.log', "RRD " . $exec_status['stderr'] . ", CMD: $cmd"); |
325: } |
326: } else { |
327: // FIXME, need add check if pipes exist |
328: $start = microtime(TRUE); |
329: fwrite($rrd_pipes[0], $cmd . "\n"); |
330: // FIXME, complete not sure why sleep required here.. @mike |
331: usleep(1000); |
332: |
333: $stdout = trim(stream_get_contents($rrd_pipes[1])); |
334: $stderr = trim(stream_get_contents($rrd_pipes[2])); |
#1: fwrite called at [/opt/observium/includes/rrdtool.inc.php:329] |
324: logfile('rrd.log', "RRD " . $exec_status['stderr'] . ", CMD: $cmd"); |
325: } |
326: } else { |
327: // FIXME, need add check if pipes exist |
328: $start = microtime(TRUE); |
329: fwrite($rrd_pipes[0], $cmd . "\n"); |
330: // FIXME, complete not sure why sleep required here.. @mike |
331: usleep(1000); |
332: |
333: $stdout = trim(stream_get_contents($rrd_pipes[1])); |
334: $stderr = trim(stream_get_contents($rrd_pipes[2])); |
#2: rrdtool called at [/opt/observium/includes/rrdtool.inc.php:552] |
547: $step = $options['step'] ?? $config['rrd']['step']; |
548: |
549: // Create DS parameter based on the definition |
550: $ds = rrdtool_def_ds('create', $definition, $index, $options); |
551: |
552: return rrdtool('create', $fsfilename, implode(' ', $ds) . " --step $step $rra"); |
553: |
554: } |
555: |
556: /** |
557: * Updates an rrd database at $filename using $options |
#3: rrdtool_create_ng called at [/opt/observium/includes/rrdtool.inc.php:596] |
591: |
592: $fsfilename = get_rrd_path($device, $filename); |
593: |
594: // Create the file if missing (if we have permission to create it) |
595: if ($create) { |
596: rrdtool_create_ng($device, $type, $index, $options); |
597: } |
598: // Update DSes when requested |
599: if (isset($options['update_max']) || isset($options['update_min'])) { |
600: print_debug_vars($options); |
601: rrdtool_update_ds($device, $type, $index, $options); |
#4: rrdtool_update_ng called at [/opt/observium/includes/polling/functions.inc.php:211] |
206: log_event('Device status changed to Down (' . $device['status_type'] . ' -> ' . $status_type . ')', $device, 'device', $device['device_id'], 3); |
207: } |
208: $device['status_type'] = $status_type; |
209: } |
210: |
211: rrdtool_update_ng($device, 'status', ['status' => $status]); |
212: //print_vars(rrdtool_export_ng($device, 'status')); |
213: |
214: if (!$attribs['ping_skip']) { |
215: // Ping response RRD database. |
216: rrdtool_update_ng($device, 'ping', ['ping' => ($device['status_pingable'] ?: 'U')]); |
#5: poll_device called at [/opt/observium/poller.php:189] |
184: $params[] = $config['poller_id']; |
185: } |
186: |
187: foreach (dbFetchColumn($query, $params) as $device_id) { |
188: $device = dbFetchRow("SELECT * FROM `devices` WHERE `device_id` = ?", [ $device_id ]); |
189: poll_device($device, $options); |
190: $polled_devices++; |
191: } |
192: |
193: $poller_time = elapsed_time($poller_start, 4); |
194: |
I have verified that the rrdcached socket is open and functioning correctly on the primary observium host.
Thanks for any help pointing me in the right direction!