https://github.com/atc0005/check-restart
Go-based tooling used to detect whether a restart (service) or reboot (system) is needed.
https://github.com/atc0005/check-restart
go golang monitoring nagios nagios-plugin plugin reboot restart windows
Last synced: 9 months ago
JSON representation
Go-based tooling used to detect whether a restart (service) or reboot (system) is needed.
- Host: GitHub
- URL: https://github.com/atc0005/check-restart
- Owner: atc0005
- License: mit
- Created: 2022-09-21T09:56:30.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-12-05T09:02:24.000Z (over 1 year ago)
- Last Synced: 2024-12-31T19:11:27.407Z (over 1 year ago)
- Topics: go, golang, monitoring, nagios, nagios-plugin, plugin, reboot, restart, windows
- Language: Go
- Homepage:
- Size: 4.2 MB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
# check-restart
Go-based tooling used to detect whether a restart (service) or reboot (system) is needed.
[](https://github.com/atc0005/check-restart/releases/latest)
[](https://pkg.go.dev/github.com/atc0005/check-restart)
[](https://github.com/atc0005/check-restart)
[](https://github.com/atc0005/check-restart/actions/workflows/lint-and-build.yml)
[](https://github.com/atc0005/check-restart/actions/workflows/project-analysis.yml)
## Table of Contents
- [Project home](#project-home)
- [Overview](#overview)
- [Features](#features)
- [Changelog](#changelog)
- [Requirements](#requirements)
- [Building source code](#building-source-code)
- [Running](#running)
- [Installation](#installation)
- [From source](#from-source)
- [Using release binaries](#using-release-binaries)
- [Deployment](#deployment)
- [Configuration](#configuration)
- [Command-line arguments](#command-line-arguments)
- [`check_reboot`](#check_reboot)
- [Logging output](#logging-output)
- [Examples](#examples)
- [`OK` result](#ok-result)
- [Nothing found](#nothing-found)
- [Problematic assertion listed but evaluation result ignored](#problematic-assertion-listed-but-evaluation-result-ignored)
- [Disable default ignored assertion path entries](#disable-default-ignored-assertion-path-entries)
- [`WARNING` result](#warning-result)
- [Without `verbose` flag](#without-verbose-flag)
- [Verbose output](#verbose-output)
- [`CRITICAL` result](#critical-result)
- [License](#license)
- [References](#references)
## Project home
See [our GitHub repo][repo-url] for the latest code, to file an issue or
submit improvements for review and potential inclusion into the project.
## Overview
This repo is intended to provide various tools used to detect whether a
restart (service) or reboot (system) is needed.
| Tool Name | Overall Status | Description |
| -------------- | -------------- | --------------------------------------------------------------------------- |
| `check_reboot` | Alpha | Nagios plugin used to monitor for "reboot needed" status of Windows systems |
## Features
- Nagios plugin (`check_reboot`) for monitoring "reboot needed" status of
Windows systems
- NOTE: The intent is to support multiple operating systems, but as of this
writing Windows is the only supported OS
- see
- Optionally list ignored assertions
- ignored assertions are not shown by default
- Optionally disable list of default ignored paths
- by default a small list of ignored paths are used to prevent known
problematic assertion matches from affecting service check results
- Optional branding "signature"
- used to indicate what Nagios plugin (and what version) is responsible for
the service check result
- Optional, leveled logging using `rs/zerolog` package
- [`logfmt`][logfmt] format output (to `stderr`)
- choice of `disabled`, `panic`, `fatal`, `error`, `warn`, `info` (the
default), `debug` or `trace`.
## Changelog
See the [`CHANGELOG.md`](CHANGELOG.md) file for the changes associated with
each release of this application. Changes that have been merged to `master`,
but not yet an official release may also be noted in the file under the
`Unreleased` section. A helpful link to the Git commit history since the last
official release is also provided for further review.
## Requirements
The following is a loose guideline. Other combinations of Go and operating
systems for building and running tools from this repo may work, but have not
been tested.
### Building source code
- Go
- see this project's `go.mod` file for *preferred* version
- this project tests against [officially supported Go
releases][go-supported-releases]
- the most recent stable release (aka, "stable")
- the prior, but still supported release (aka, "oldstable")
- GCC
- if building with custom options (as the provided `Makefile` does)
- `make`
- if using the provided `Makefile`
### Running
- Windows 8.1
- Windows 10
- Windows Server 2012 R2
- Windows Server 2016
- Windows Server 2019
- Windows Server 2022
## Installation
### From source
1. [Download][go-docs-download] Go
1. [Install][go-docs-install] Go
1. Clone the repo
1. `cd /tmp`
1. `git clone https://github.com/atc0005/check-restart`
1. `cd check-restart`
1. Install dependencies (optional)
- for Ubuntu Linux
- `sudo apt-get install make gcc`
- for CentOS Linux
1. `sudo yum install make gcc`
1. Build
- manually, explicitly specifying target OS and architecture
- `GOOS=windows GOARCH=amd64 go build -mod=vendor ./cmd/check_reboot/`
- most likely this is what you want
- substitute `amd64` with the appropriate architecture if using
different hardware (e.g., `arm64`)
- using Makefile `windows` recipe
- `make windows`
- generates x86 and x64 binaries
- using Makefile `release-build` recipe
- `make release-build`
- generates the same release assets as provided by this project's
releases
1. Locate generated binaries
- if using `Makefile`
- look in `/tmp/check-restart/release_assets/check_reboot/`
- if using `go build`
- look in `/tmp/check-restart/`
1. Copy the applicable binaries to whatever systems needs to run them so that
they can be deployed
**NOTE**: Depending on which `Makefile` recipe you use the generated binary
may be compressed and have an `xz` extension. If so, you should decompress the
binary first before deploying it (e.g., `xz -d
check_reboot-windows-amd64.exe.xz`).
### Using release binaries
1. Download the [latest release][repo-url] binaries
1. Decompress binaries
- e.g., `xz -d check_reboot-windows-amd64.exe.xz`
1. Copy the applicable binaries to whatever systems needs to run them so that
they can be deployed
### Deployment
1. Place `check_reboot` in a location where it can be executed by the
monitoring agent
- Usually the same place as other Nagios plugins
- For example, on a default Windows system with `NSClient++ x64` installed
the `check_reboot.exe` plugin would be deployed to `C:\Program
Files\NSClient++\scripts\custom\check_reboot.exe`
1. Update the monitoring agent configuration configuration (on a system that
you wish to monitor for "needs reboot" condition) to create a new command
definition
- We will pretend that the DNS name for the system is `windows.example.com`
- ```ini
[/settings/external scripts/scripts]
; NOTE: stderr output is returned mixed in with stdout content. Disable logging to prevent this.
; check_reboot=scripts\\custom\\check_reboot.exe --verbose --show-ignored --log-level disabled
;
; By default specific paths are ignored. You can optionally disable the default ignored paths.
; check_reboot=scripts\\custom\\check_reboot.exe --verbose --show-ignored --disable-default-ignored
;
check_reboot=scripts\\custom\\check_reboot.exe --verbose --show-ignored
```
- see [NSClient++ External scripts doc][nsclient-external-scripts] for
additional details
1. Restart the `nscp` service (label of `NSClient++ (x64)`)
1. Create a new Nagios "console" command definition to allow requesting the
monitoring agent to run the plugin
- ```nagios
define command {
# $ARG1$ is an optional non-default port
command_name wcheck_reboot
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -p $ARG1$ -t 30 -c check_reboot
}
```
1. Create a new Nagios "console" service check that requests the monitoring
agent to execute the plugin
- ```nagios
define service {
host_name windows.example.com
service_description check reboot
use generic-service
check_command wcheck_reboot!12345!!!!!!!
notification_period 24x7withMaintenanceWindow
contacts atc0005
register 1
}
```
## Configuration
### Command-line arguments
- Use the `-h` or `--help` flag to display current usage information.
- Flags marked as **`required`** must be set via CLI flag.
- Flags *not* marked as required are for settings where a useful default is
already defined, but may be overridden if desired.
#### `check_reboot`
| Flag | Required | Default | Repeat | Possible | Description |
| ------------------------------- | -------- | ------- | ------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| `branding` | No | `false` | No | `branding` | Toggles emission of branding details with plugin status details. This output is disabled by default. |
| `h`, `help` | No | `false` | No | `h`, `help` | Show Help text along with the list of supported flags. |
| `version` | No | `false` | No | `version` | Whether to display application version and then immediately exit application. |
| `v`, `verbose` | No | `false` | No | `v`, `verbose` | Toggles emission of detailed output. This level of output is disabled by default. |
| `si`, `show-ignored` | No | `false` | No | `si`, `show-ignored` | Toggles emission of ignored assertion matches in the final plugin output. This is disabled by default. |
| `dd`, `disable-default-ignored` | No | `false` | No | `dd`, `disable-default-ignored` | Disables use of default ignored assertion path entries. |
| `ll`, `log-level` | No | `info` | No | `disabled`, `panic`, `fatal`, `error`, `warn`, `info`, `debug`, `trace` | Log message priority filter. Log messages with a lower level are ignored. |
### Logging output
Early testing using NSClient++ suggests that both `stderr` and `stdout` are
mixed together and sent back to the Nagios console as one output stream.
If this becomes a problem you can disable logging output (`--log-level
disabled`) to prevent `stderr` from being including in the output sent back to
the Nagios console.
If you know of a way to prevent `stderr` from being mixed into the output sent
back to Nagios, please file a GitHub issue in this project to share your
findings.
## Examples
### `OK` result
#### Nothing found
No reboot needed.
This output is emitted by the plugin when a reboot is not needed.
```console
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe"
OK: Reboot not needed (assertions: 15 applied, 0 matched, 0 ignored)
Reboot not required
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=0;;;; 'matched_assertions'=0;;;; 'time'=42ms;;;;
```
Regarding the output:
- The last line beginning with a space and the `|` symbol are performance
data metrics emitted by the plugin. Depending on your monitoring system, these
metrics may be collected and exposed as graphs/charts.
- This output was captured on a Windows 10 system, but is comparable to the
output emitted by other Windows desktop & server systems.
#### Problematic assertion listed but evaluation result ignored
```console
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe" --verbose --show-ignored
OK: Reboot not needed (assertions: 15 applied, 0 matched, 1 ignored)
Reboot not required
Assertions ignored:
- Subkeys for key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/WindowsUpdate/Services/Pending found
subkey: 117cab2d-82b1-4b5a-a08c-4d62dbee7782
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=1;;;; 'matched_assertions'=0;;;; 'time'=1ms;;;;
```
Regarding the output:
- The last line beginning with a space and the `|` symbol are performance
data metrics emitted by the plugin. Depending on your monitoring system, these
metrics may be collected and exposed as graphs/charts.
- The `--verbose` flag is used to display additional details (where available)
for an assertion match.
- The `--show-ignored` flag is used to display assertions whose evaluation
results were recorded, but are ignored when determining final plugin state.
- This output was captured on a Windows Server 2012 system, but is comparable
to the output emitted by other Windows desktop & server systems.
#### Disable default ignored assertion path entries
This example uses the `--disable-default-ignored` flag to skip using the
default ignored assertion path entries. This can be useful for cases where a
sysadmin *wants* to apply the assertion match results for all discovered
paths, even ones historically found to be false-positives or otherwise
unreliable.
```console
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe" --verbose --disable-default-ignored
WARNING: Reboot needed (assertions: 15 applied, 1 matched, 0 ignored)
**ERRORS**
* reboot assertions matched, reboot needed
**DETAILED INFO**
Reboot required because:
- Subkeys for key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/WindowsUpdate/Services/Pending found
subkey: 117cab2d-82b1-4b5a-a08c-4d62dbee7782
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=0;;;; 'matched_assertions'=1;;;; 'time'=0ms;;;;
```
Regarding the output:
- The last line beginning with a space and the `|` symbol are performance
data metrics emitted by the plugin. Depending on your monitoring system, these
metrics may be collected and exposed as graphs/charts.
- The `--verbose` flag is used to display additional details (where available)
for an assertion match.
- The `--disable-default-ignored` flag indicates that the default ignored path
entries will not be used; all discovered paths will be used to determine
final plugin state.
- This output was captured on a Windows Server 2012 system, but is comparable
to the output emitted by other Windows desktop & server systems.
### `WARNING` result
This output is emitted by the plugin when a reboot is needed.
#### Without `verbose` flag
```console
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe"
WARNING: Reboot needed (assertions: 15 applied, 5 matched, 0 ignored)
**ERRORS**
* reboot assertions matched, reboot needed
**DETAILED INFO**
Reboot required because:
- Value PendingFileRenameOperations of type MULTI_SZ for key HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/WindowsUpdate/Auto Update/RebootRequired found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Component Based Servicing/RebootPending found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Component Based Servicing/PackagesPending found
- File C:/Windows/WinSxS/pending.xml found
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=0;;;; 'matched_assertions'=5;;;; 'time'=1ms;;;;
```
Regarding the output:
- The last line beginning with a space and the `|` symbol are performance
data metrics emitted by the plugin. Depending on your monitoring system, these
metrics may be collected and exposed as graphs/charts.
- This output was captured on a Windows Server 2022 system, but is comparable
to the output emitted by other Windows desktop & server systems.
#### Verbose output
```console
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe" --verbose
WARNING: Reboot needed (assertions: 15 applied, 5 matched, 0 ignored)
**ERRORS**
* reboot assertions matched, reboot needed
**DETAILED INFO**
Reboot required because:
- Value PendingFileRenameOperations of type MULTI_SZ for key HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager found
Entries [14 total, 12 skipped]: C:/Program Files (x86)/Microsoft/EdgeUpdate/1.3.167.21, C:/Windows/Temp/f7cbd550-567a-4a88-a3e4-c67b414b439d.tmp
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/WindowsUpdate/Auto Update/RebootRequired found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Component Based Servicing/RebootPending found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Component Based Servicing/PackagesPending found
- File C:/Windows/WinSxS/pending.xml found
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=0;;;; 'matched_assertions'=5;;;; 'time'=0ms;;;;
```
Regarding the output:
- The last line beginning with a space and the `|` symbol are performance
data metrics emitted by the plugin. Depending on your monitoring system, these
metrics may be collected and exposed as graphs/charts.
- The `--verbose` flag is used to display additional details (where available)
for an assertion match.
- This output was captured on a Windows Server 2022 system, but is comparable
to the output emitted by other Windows desktop & server systems.
### `CRITICAL` result
This result is returned when an error occurs during the attempt to determine
whether a reboot is needed.
TODO: Provide example output when this scenario is encountered.
## License
See the [LICENSE](LICENSE) file for details.
## References
-
-
[repo-url]: "This project's GitHub repo"
[go-docs-download]: "Download Go"
[go-docs-install]: "Install Go"
[go-supported-releases]: "Go Release Policy"
[nsclient-external-scripts]: "NSClient++ External scripts"
[logfmt]: