Hello Sergei, AFAIK Icinga2 saves the new status.dat file as temp file, and once the entire information was written to that file, closes the file handle and renames the temp file to status.dat
If your temp directory is on the same partition as the status_file location, then the rename/mv is an atomic operation - at least on Linux. best regards Kai >>> On 29.04.2015 at 09:29, Sergei Franco <[email protected]> wrote: > Hello Kai, > > Thank you for your reply! > > At this stage it looks we will be parsing the status file (only worry is > that the status file is updated in a non-atomic way, so will probably write > a daemon with inotify watch on "close_write". > A second question: is the status file updated atomically? > > Thank you very much! > > I hoped there is an "official" way to achieve this. > > Sergei. > > On 29 April 2015 at 19:19, Kai Nothdurft <[email protected]> wrote: > >> Hi Sergei, >> >> before I forget, you should not use ".'~'.$hostName.'" in the two >> fwrite-lines of the script. This is for our special environment only. >> >> rgds >> Kai >> >> >> >>> On 29.04.2015 at 09:10, "Kai Nothdurft" <[email protected]> >> wrote: >> > Hello Sergei, >> > >> > at first, I was missing the "obsess over services/hosts" as well. As >> a >> > workaround I wrote a little cronjob, which parses the status.dat and >> creates >> > a command‑file from it. The script generates a >> > "PROCESS_HOST|SERVICE_CHECK_RESULT" for ALL host‑ and service‑stati. >> You have >> > to filter on the hosts/services, you are interested in, transfer the >> >> > COMMAND_FILE to your Nagios 3.x‑host and pipe it into the >> command‑pipe. Be sure >> > that the feature "statusdata" is enabled (icinga2 feature list). >> > >> > hth >> > Kai >> > >> > ‑‑‑‑ cut here ‑‑‑‑ >> > #!/usr/bin/php >> > <?php >> > >> > define("STATUS_FILE", "/var/cache/icinga2/status.dat"); >> > define("COMMAND_FILE", "/YOUR/PATH/TO/status.upd"); >> > >> > if (file_exists(STATUS_FILE)) { >> > $status_file_handle = fopen(STATUS_FILE, "r"); >> > if ($status_file_handle) { >> > $command_file_handle = fopen(COMMAND_FILE, "w"); >> > if ($command_file_handle) { >> > while (!feof($status_file_handle)) { >> > $line = fgets($status_file_handle); >> > switch ($line) { >> > case "hoststatus {\n": >> > $hostName = ''; >> > $status = 3; >> > $pluginOutput = ''; >> > $performanceData = ''; >> > $checkSource = ''; >> > $lastCheck = ''; >> > $line = fgets($status_file_handle); >> > while (!feof($status_file_handle) && trim($line)!= "}") >> { >> > list ($param, $value) = explode('=',trim($line),2); >> > switch ($param) { >> > case "host_name": >> > $hostName = $value; >> > break; >> > case "current_state": >> > $state = $value; >> > break; >> > case "plugin_output": >> > $pluginOutput = $value; >> > break; >> > case "performance_data": >> > $performanceData = $value; >> > break; >> > case "check_source": >> > $checkSource = $value; >> > break; >> > case "last_check": >> > $lastCheck = $value; >> > break; >> > } >> > $line = fgets($status_file_handle); >> > } >> > fwrite($command_file_handle,"[$lastCheck] >> > >> >> > PROCESS_HOST_CHECK_RESULT;".$checkSource.'~'.$hostName.';'.$state.';'.$plugin >> > Output.'|'.$performanceData."\n"); >> > break; >> > >> > case "servicestatus {\n": >> > $hostName = ''; >> > $serviceDescription = ''; >> > $status = 3; >> > $pluginOutput = ''; >> > $performanceData = ''; >> > $checkSource = ''; >> > $lastCheck = ''; >> > $line = fgets($status_file_handle); >> > while (!feof($status_file_handle) && trim($line)!= "}") >> { >> > list ($param, $value) = explode('=',trim($line),2); >> > switch ($param) { >> > case "host_name": >> > $hostName = $value; >> > break; >> > case "service_description": >> > $serviceDescription = $value; >> > break; >> > case "current_state": >> > $state = $value; >> > break; >> > case "plugin_output": >> > $pluginOutput = $value; >> > break; >> > case "performance_data": >> > $performanceData = $value; >> > break; >> > case "check_source": >> > $checkSource = $value; >> > break; >> > case "last_check": >> > $lastCheck = $value; >> > break; >> > } >> > $line = fgets($status_file_handle); >> > } >> > fwrite($command_file_handle,"[$lastCheck] >> > >> >> > PROCESS_SERVICE_CHECK_RESULT;".$checkSource.'~'.$hostName.';'.$serviceDescrip >> > tion.';'.$state.';'.$pluginOutput.'|'.$performanceData."\n"); >> > break; >> > } >> > } >> > } >> > fclose($status_file_handle); >> > } >> > } >> > ?> >> > >> > >> >>>> On 29.04.2015 at 06:49, Sergei Franco <[email protected]> >> wrote: >> >> Hello there, >> >> >> >> Is there a way to push passive results via nsca from Icinga 2 (which >> does >> >> active checking) to Nagios 3.x? >> >> It looks like the "obsess over services/hosts" and ochp/ocsp config >> items >> >> are missing from Icinga 2. >> >> >> >> The nagios machine (that receives the passive checks) *cannot* be >> >> "upgraded" to icinga2 so none of the distributed monitoring >> documentation >> >> applies.... >> >> >> >> Regards. >> >> >> >> >> >> Sergei. >> > _______________________________________________ >> > icinga‑users mailing list >> > icinga‑[email protected] >> > https://lists.icinga.org/mailman/listinfo/icinga‑users >> _______________________________________________ >> icinga-users mailing list >> [email protected] >> https://lists.icinga.org/mailman/listinfo/icinga-users >> _______________________________________________ icinga-users mailing list [email protected] https://lists.icinga.org/mailman/listinfo/icinga-users
