Uploaded image for project: 'Observium'
  1. Observium
  2. OBS-4918

Partitioned Pollers Stack Trace

    XMLWordPrintable

Details

    • Library Bug
    • Resolution: Won't Fix
    • Major
    • None
    • Professional Edition
    • Poller
    • Distributor ID: Ubuntu
      Description: Ubuntu 22.04.5 LTS
      PHP8.4
      MYSQL 8.0.39-0

    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!

       

      Attachments

        Activity

          People

            landy Mike Stupalov
            cblair Corey
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: