Compare commits

...

52 Commits

Author SHA1 Message Date
Jeremy Gardais 202ada89cd
Fix "Can't check kernel version" warning message
On Ubuntu only by default.
2025-03-24 13:31:46 +01:00
Jeremy Gardais 56ddaab1fd Merge pull request 'refresh-2024' (#1) from refresh-2024 into master
Reviewed-on: #1
2024-09-30 16:30:19 +02:00
Jeremy Gardais b7f9be38a4
Update SSSD path for libs white list 2024-09-30 16:29:50 +02:00
Jeremy Gardais 38ffb9af77
Allow multi-lines with ansible_managed | comment 2024-09-30 16:29:04 +02:00
Jeremy Gardais 745f3bd3a6
Update domain for git.ipr 2023-11-03 16:08:32 +01:00
Jeremy Gardais e4e2518625
Remove hddtemp dependency
Package is no longer available in Debian Bookworm and can be replaced by
 **drivetemp** kernel module (working since Debian Bullseye 👍).
2023-04-27 13:52:15 +02:00
Jeremy Gardais 5a87fc07fb
20230301 Update dependencies for libs probe 2023-04-26 14:47:00 +02:00
Jeremy Gardais 241ecaac17
Add new kern probe management 2023-04-26 14:20:22 +02:00
Jeremy Gardais c6115085a9
Prefix module with "ansible.builtin." 2023-01-24 11:50:15 +01:00
Jeremy Gardais af8963bb47
Use flatten to manage packages list 2023-01-24 11:45:30 +01:00
Jeremy Gardais 23a0dfa558
Works with Debian Bullseye 2021-11-17 13:51:22 +01:00
Jeremy Gardais 8fa4ebaf77
Prefix net probe command with sudo
Required for some interfaces.
2021-11-17 13:45:48 +01:00
Jeremy Gardais 277308637b
Correct the path for ZFS probe 2021-07-22 12:22:21 +02:00
Jeremy Gardais c3b0b935e5
Publish v2.0.0 2020-12-22 13:23:31 +01:00
Jeremy Gardais 8aad270520
Add ntpq probe management
The ntp package will not be managed in this role because it can break
the "ntp" on the system according to the choosen client (systemd,
chrony,…).
2020-12-22 13:13:31 +01:00
Jeremy Gardais f0af1328ea
Add extra var for Nvidia support with temp plugin 2020-11-03 17:48:21 +01:00
Jeremy Gardais 9f84ed3c6d
Split pkg_list to separate hobbit-plugins
This way, xymon-client can be installed without "hobbit-plugins".
2020-11-03 17:41:37 +01:00
Jeremy Gardais 61d7aa4e3a
All vars now starts with "xymon_cli__" 2020-11-03 15:17:08 +01:00
Jeremy Gardais d5bffb2252
Combine clientlaunch files for plugins
This leads to manage them in one dedicated task instead of 12…
2020-11-03 13:31:35 +01:00
Jeremy Gardais 79f3831acd
Info Buster support and increase min_ansible_version 2020-11-03 10:12:17 +01:00
Jeremy Gardais 6401a1e836
Combine packages vars of all enabled plugins
This leads to install dependencies in one task instead of 9.
2020-11-03 10:09:48 +01:00
Jeremy Gardais 1c0157dd68
Add megaraid probe management 2020-11-02 18:04:12 +01:00
Jeremy Gardais 052d5a3b3a
Add min version of hobbit-plugins for `net` plugin 2020-11-02 14:13:56 +01:00
Jeremy Gardais 7966645f99
Remove unecessary netstats dependencies 2020-10-30 14:17:18 +01:00
Jeremy Gardais 726300ae1e
Add configuration file for `net` script 2020-10-30 12:42:29 +01:00
Jeremy Gardais dacdd47d9f
Add net probe management 2020-10-29 17:52:19 +01:00
Jeremy Gardais 37587a0853
Add example to enable probes for hardware hosts 2020-10-28 18:31:25 +01:00
Jeremy Gardais 6931410def
Add information that files come from Ansible 2020-10-28 11:08:02 +01:00
Jeremy Gardais 68ba6f14f1
Add temp probe configuration 2020-10-28 11:06:04 +01:00
Jeremy Gardais 33239e88f4 Add sge plugin from http://git.ipr.univ-rennes1.fr
https://git.ipr.univ-rennes1.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/sge.sh
2020-06-09 15:06:45 +02:00
Jeremy Gardais 3912e0c8c0 Ignore all sssd libs 2020-04-29 14:31:40 +02:00
Jeremy Gardais 250cb2709d Update SMART's scripts.
Now define/use a list of drive known from smartmontools database and
compatible with selftest logging.
2020-03-05 15:28:09 +01:00
Jeremy Gardais 7eaac7e803 Get latest version of SMART's scripts with URL 2020-03-05 15:24:25 +01:00
Jeremy Gardais 0eaf0e8f6f Update smartoverall plugin for unsupported logging 2020-02-26 11:46:17 +01:00
Jeremy Gardais 51e51733a7 Update smart plugin configuration file 2020-02-25 17:38:05 +01:00
Jeremy Gardais 4c51fb4576 Update smartoverall script
New foldmarker…
2020-02-25 17:35:36 +01:00
Jeremy Gardais ce718b94ab Fix README.md 2020-02-25 17:09:54 +01:00
Jeremy Gardais eb8cbbdea2 Add description for managed plugins 2020-02-25 17:05:33 +01:00
Jeremy Gardais 9b61dc77df Add smartoverall plugin
From :
https://git.ipr.univ-rennes1.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/smartoverall
Mostly for disks unknown from smartmontools's database.
2020-02-25 15:30:07 +01:00
Jeremy Gardais 91a1b41e56
Add smart plugin 2020-02-18 14:30:13 +01:00
Jeremy Gardais dfb18f0702
Add missing plugin dependencies 2019-05-24 10:22:46 +02:00
Jeremy Gardais 59493c112b
Don't remove any plugin dependencies 2019-05-24 10:08:06 +02:00
Jeremy Gardais d46011763f
Add netstats plugin managment 2019-05-24 09:49:54 +02:00
Jeremy Gardais 1838de0c27
Add variables to manage plugin interval 2019-05-24 09:16:07 +02:00
Jeremy Gardais 31955ca7b3
Use to_nice_json to manage packages list 2019-02-27 11:43:39 +01:00
Jeremy Gardais c6922a2e48
Fix E405 Remote package tasks should have a retry 2019-02-06 11:03:34 +01:00
Jeremy Gardais a1991515a5
Restart xymon-client after changes on ZFS plugin 2019-02-06 10:19:53 +01:00
Jeremy Gardais 6403124985
Possibility to allow some pkgs not from repos
For apt probe.
2018-09-12 10:28:47 +02:00
Jeremy Gardais 5cfa7c518c
Set empty dependencies line to fix Galaxy warning 2018-08-06 15:37:11 +02:00
Jeremy Gardais 10235b901b
Correct the changelog : Add IPMI probe 2018-07-25 15:13:34 +02:00
Jeremy Gardais 9054815d85
Deprecation warning about "installed" for state 2018-07-25 15:12:50 +02:00
Guillaume Raffy a430015cce added the ipmi monitoring to xymon
iBug 2360 - monitorer ipmi dans xymon pour les machines non virtuelles qui le supportent

- from now on, xymon role can enable/disable ipmi monitoring
2018-07-13 12:45:20 +02:00
30 changed files with 1630 additions and 186 deletions

View File

@ -1,7 +1,120 @@
## v2.3.0
### Enhancements
* Add variable/template to fix **kern**'s probe related message on Ubuntu
(`Can't check kernel version!`)
* See : https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725/comments/35
## v2.2.0
### Enhancements
* Use **comment** filter for ansible_managed, to allow multi-lines.
* Update SSSD path for libs white list.
## v2.1.0
### Enhancements
* Add new kern probe management.
* Update dependencies for libs probe after hobbit-plugins 20230301 upgrade
### Removed
* Remove hddtemp dependency. Package is no longer available in Debian Bookworm
and replaced by **drivetemp** kernel module (working since Debian Bullseye).
## v2.0.3
### Fix
* Use flatten to manage packages list.
* Prefix module with "ansible.builtin.".
### Enhancements
* Works with Debian Bullseye
## v2.0.2
### Fix
* Prefix **net** probe command with **sudo** (required for some interfaces).
## v2.0.1
### Fix
* Correct the path for ZFS probe.
## v2.0.0
### Enhancements
* All vars now starts with "xymon_cli__" for more readability.
No backward compatibility with old variable naming! Update your configuration!
* Add megaraid probe management.
* Add net probe management.
* Add ntpq probe management.
* Add configuration file for `net` script (/etc/xymon/net.yaml) and
possibility to set your own template. Check [net documentation](net plugin doc).
* Remove unecessary netstats dependencies (due to a previous misunderstanding)
between `net` and `netstats` probes. `netstats` only
reads /proc/net/{netstat,snmp} files.
* Combine packages vars of all enabled plugins to install them in _one_ task.
* Combine clientlaunch files for plugins to manage them in _one_ dedicated task.
* Split base package list in order to allow installation of `xymon-client` without
"hobbit-plugins".
* Add extra var for Nvidia support with temp plugin.
## v1.5.1
### Enhancements
* Add temp probe configuration.
* Add example to enable probes for hardware hosts.
## v1.5.0
### Enhancements
* Possibility to define URLs in order to get the latest version of SMART's scripts.
* Add sge plugin from https://git.ipr.univ-rennes.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/sge.sh
## v1.4.0
### Enhancements
* Add variables to manage plugin interval.
* Add netstats plugin managment.
* Add smart plugin from https://github.com/skazi0/xymon-plugins
* Add smartoverall plugin from https://git.ipr.univ-rennes.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/smartoverall
* Add description for plugins.
### Fix
* Don't remove any plugin dependencies cause some plugins might have the same.
Plugin dependencies will only be installed if the plugin is wanted.
* Add missing plugin dependencies.
See [version 20180711][20180711 hobbit-plugins debian changelog]
for libs dependencies for example.
## v1.3.3
### Enhancements
* Use to_nice_json to manage packages list.
## v1.3.2
### Enhancements
* Fix E405 Remote package tasks should have a retry.
## v1.3.1
### Fix
* Restart xymon-client after changes on ZFS plugin.
## v1.3
### Enhancements
* Add IPMI probe.
* Add possibility to allow some packages not installed from repos for apt probe.
### Fix
* Deprecation warning about "installed" for state.
* Set empty dependencies line to fix Galaxy warning.
## v1.2
## Enhancements
### Enhancements
* Ensure to not override groups of 'xymon' user.
* Add possibility to install `apt` plugin dependencies.
* Ensure to apply the config only if wanted.
@ -11,7 +124,7 @@
## v1.1
## Enhancements
### Enhancements
* Add possibility to install `mq` plugin dependencies.
* Add possibility to install `libs` plugin dependencies.
* Add whitelist settings for `libs` plugin.
@ -31,3 +144,6 @@
* Manage `xymon-client` service.
* Add possibility to set the value of CLIENTHOSTNAME `xymon-client` value.
* Allow to set Xymon servers list for `xymon-client` config.
[20180711 hobbit-plugins debian changelog]: https://salsa.debian.org/debian/hobbit-plugins/blob/debian-20180711/debian/changelog
[net plugin doc]: https://salsa.debian.org/debian/hobbit-plugins#net-check-network-interface-states

262
README.md
View File

@ -2,6 +2,7 @@
1. [Overview](#overview)
2. [Role Variables](#role-variables)
* [Plugins Specific Variables](#plugins-variables)
* [OS Specific Variables](#os-specific-variables)
3. [Example Playbook](#example-playbook)
4. [Configuration](#configuration)
@ -16,44 +17,238 @@ Manage Xymon (client) installation and configuration.
## Role Variables
* **xymon_cli_manage**: If `xymon-client` should be managed with this role [default: `true`].
* **xymon_cli_pkg_state**: State of new `xymon-client` package(s) [default: `installed`].
* **xymon_cli_default_conf_path**: Configuration file for `xymon-client` [default: `/etc/default/xymon-client`].
* **xymon_cli_default_conf_tpl**: Template used to generate the previous config file [default: `etc/default/xymon-client.j2`].
* **xymon_cli_hostname**: Allow to override default value of CLIENTHOSTNAME var [default: `{{ ansible_fqdn }}`].
* **xymon_user_groups**: List of 'xymon' user's groups [default: `xymon`].
* **xymon_cli_service_manage**: If `xymon-client` service should be managed with this role [default: `true`].
* **xymon_cli_service_name**: `xymon-client` service name [default: `xymon-client`].
* **xymon_cli_service_enabled**: Set `xymon-client` service available at startup [default: `true`].
* **xymon_srv_list**: The list of Xymon servers (you must give an hostname, IP,… reachable from any clients) [defaults: `monitoring.{{ ansible_domain }}`].
* **xymon_plug_manage**: If this role should manage plugins configuration [default: `true`].
* **xymon_plug_apt_state**: The state of plugin `apt` [default: `true`].
* **xymon_plug_apt_package**: The packages to install to provide `apt` plugin [default: `[ 'libtimedate-perl' ]`].
* **xymon_plug_apt_path**: Configuration file for the `apt` plugin [default: `/etc/xymon/clientlaunch.d/apt.cfg`].
* **xymon_plug_apt_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/apt.cfg.j2`].
* **xymon_plug_mq_state**: The state of plugin `mq` [default: `true`].
* **xymon_plug_mq_package**: The packages to install to provide `mq` plugin [default: `[ 'libtimedate-perl' ]`].
* **xymon_plug_mq_path**: Configuration file for the `mq` plugin [default: `/etc/xymon/clientlaunch.d/mq.cfg`].
* **xymon_plug_mq_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/mq.cfg.j2`].
* **xymon_plug_libs_state**: The state of plugin `libs` [default: `true`].
* **xymon_plug_libs_package**: The packages to install to provide `libs` plugin [default: `[ 'binutils', 'lsof', 'libyaml-tiny-perl', 'libsort-naturally-perl' ]`].
* **xymon_plug_libs_path**: Configuration file for the `libs` plugin [default: `/etc/xymon/clientlaunch.d/libs.cfg`].
* **xymon_plug_libs_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/libs.cfg.j2`].
* **xymon_plug_libs_default_whitelist**: Default whitelist of processes that should not be monitored with `libs` plugin.
* **xymon_plug_libs_whitelist**: All hosts whitelist of processes that should not be monitored with `libs` plugin.
* **xymon_plug_libs_group_whitelist**: Group whitelist of processes that should not be monitored with `libs` plugin.
* **xymon_plug_libs_host_whitelist**: Host whitelist of processes that should not be monitored with `libs` plugin.
* **xymon_cli__manage**: If `xymon-client` should be managed with this role [default: `true`].
* **xymon_cli__pkg_state**: State of new `xymon-client` package(s) [default: `present`].
* **xymon_cli__default_conf_path**: Configuration file for `xymon-client` [default: `/etc/default/xymon-client`].
* **xymon_cli__default_conf_tpl**: Template used to generate the previous config file [default: `etc/default/xymon-client.j2`].
* **xymon_cli__hostname**: Allow to override default value of CLIENTHOSTNAME var [default: `{{ ansible_fqdn }}`].
* **xymon_cli__user_groups**: List of 'xymon' user's groups [default: `xymon`].
* **xymon_cli__service_manage**: If `xymon-client` service should be managed with this role [default: `true`].
* **xymon_cli__service_name**: `xymon-client` service name [default: `xymon-client`].
* **xymon_cli__service_enabled**: Set `xymon-client` service available at startup [default: `true`].
* **xymon_cli__srv_list**: The list of Xymon servers (you must give an hostname, IP,… reachable from any clients) [defaults: `monitoring.{{ ansible_domain }}`].
* **xymon_cli__plug_manage**: If this role should manage plugins configuration [default: `true`].
### Plugins Variables
* **xymon_cli__plug_combined_packages**: Combine all packages vars related to plugins (only enabled plugins).
* **xymon_cli__plug_combined_clientlaunch**: Combine clientlaunch files for all plugins.
#### APT
Variables for the APT plugin from hobbit-plugins. The plugin check for
outstanding updates.
* **xymon_cli__plug_apt_state**: The state of plugin `apt` [default: `true`].
* **xymon_cli__plug_apt_package**: The packages to install to provide `apt` plugin [default: `[ 'libtimedate-perl' ]`].
* **xymon_cli__plug_apt_path**: Configuration file for the `apt` plugin [default: `/etc/xymon/clientlaunch.d/apt.cfg`].
* **xymon_cli__plug_apt_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/apt.cfg.j2`].
* **xymon_cli__plug_apt_interval**: Time between each run of the `apt` plugin [default: `5m`].
* **xymon_cli__plug_apt_default_whitelist**: Default list of allowed packages not installed from repositories [default: `[]`].
* **xymon_cli__plug_apt_whitelist**: All hosts list of allowed packages not installed from repositories [default: `[]`].
* **xymon_cli__plug_apt_group_whitelist**: Group list of allowed packages not installed from repositories [default: `[]`].
* **xymon_cli__plug_apt_host_whitelist**: Host list of allowed packages not installed from repositories [default: `[]`].
#### IPMI
Variables for the IPMI plugin from hobbit-plugins. The plugin read IPMI
sensors and event log.
* **xymon_cli__plug_ipmi_state**: The state of plugin `ipmi` [default: `false`].
* **xymon_cli__plug_ipmi_state**: The packages to install to provide `ipmi` plugin [default: `[ 'ipmitool' ]`].
* **xymon_cli__plug_ipmi_path**: Configuration file for the `ipmi` plugin [default: `/etc/xymon/clientlaunch.d/ipmi.cfg`].
* **xymon_cli__plug_ipmi_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/ipmi.cfg.j2`].
* **xymon_cli__plug_ipmi_interval**: Time between each run of the `ipmi` plugin [default: `5m`].
#### Kern
Variables for the kern plugin from hobbit-plugins. The plugin check for running
outdated running kernel and need for reboot.
* **xymon_cli__plug_kern_state**: The state of plugin `kern` [default: `true`].
* **xymon_cli__plug_kern_package**: The packages to install to provide `kern` plugin [default: `[ 'binutils', 'libfile-slurp-perl', 'libsort-naturally-perl' ]`].
* **xymon_cli__plug_kern_path**: Configuration file for the `kern` plugin [default: `/etc/xymon/clientlaunch.d/kern.cfg`].
* **xymon_cli__plug_kern_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/kern.cfg.j2`].
* **xymon_cli__plug_kern_interval**: Time between each run of the `kern` plugin [default: `5m`].
#### Libs
Variables for the Libs plugin from hobbit-plugins. The plugin check for running
processes with upgraded libraries.
* **xymon_cli__plug_libs_state**: The state of plugin `libs` [default: `true`].
* **xymon_cli__plug_libs_package**: The packages to install to provide `libs` plugin [default: `[ 'lsof', 'sudo', 'libyaml-tiny-perl' ]`].
* **xymon_cli__plug_libs_path**: Configuration file for the `libs` plugin [default: `/etc/xymon/clientlaunch.d/libs.cfg`].
* **xymon_cli__plug_libs_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/libs.cfg.j2`].
* **xymon_cli__plug_libs_interval**: Time between each run of the `libs` plugin [default: `5m`].
* **xymon_cli__plug_libs_default_whitelist**: Default whitelist of processes that should not be monitored with `libs` plugin.
* **xymon_cli__plug_libs_whitelist**: All hosts whitelist of processes that should not be monitored with `libs` plugin.
* **xymon_cli__plug_libs_group_whitelist**: Group whitelist of processes that should not be monitored with `libs` plugin.
* **xymon_cli__plug_libs_host_whitelist**: Host whitelist of processes that should not be monitored with `libs` plugin.
#### Net
Require hobbit-plugins > 20200525.
Variables for the Megaraid plugin from hobbit-plugins. The plugin check
hardware raid status with Megacli tools [from hwraid.le-vert](url hwraid).
You will need to install `megaclisas-status` by your own to get this plugin
running correctly. Please take a look to the [Readme](megaraid plugin doc) of
the project for more informations.
* **xymon_cli__plug_megaraid_state**: The state of plugin `megaraid` [default: `false`].
* **xymon_cli__plug_megaraid_package**: The packages to install to provide `megaraid` plugin [default: `[ 'libipc-run-perl' ]`].
* **xymon_cli__plug_megaraid_path**: Configuration file for the `megaraid` plugin [default: `/etc/xymon/clientlaunch.d/megaraid.cfg`].
* **xymon_cli__plug_megaraid_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/megaraid.cfg.j2`].
* **xymon_cli__plug_megaraid_interval**: Time between each run of the `megaraid` plugin [default: `5m`].
#### Mq
Variables for the Mq plugin from hobbit-plugins. The plugin check Postfix's
mail queue.
* **xymon_cli__plug_mq_state**: The state of plugin `mq` [default: `true`].
* **xymon_cli__plug_mq_package**: The packages to install to provide `mq` plugin [default: `[ 'libtimedate-perl' ]`].
* **xymon_cli__plug_mq_path**: Configuration file for the `mq` plugin [default: `/etc/xymon/clientlaunch.d/mq.cfg`].
* **xymon_cli__plug_mq_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/mq.cfg.j2`].
* **xymon_cli__plug_mq_interval**: Time between each run of the `mq` plugin [default: `5m`].
#### Net
Require hobbit-plugins > 20190129.
Variables for the Net plugin from hobbit-plugins. The plugin check network
interface states. Check the [Readme](net plugin doc) of the project for more
informations.
* **xymon_cli__plug_net_state**: The state of plugin `net` [default: `false`].
* **xymon_cli__plug_net_package**: The packages to install to provide `net` plugin [default: `[ 'ethtool', 'iproute2', 'libfile-slurp-perl', 'libfile-which-perl', 'libipc-run-perl', 'libyaml-tiny-perl' ]`].
* **xymon_cli__plug_net_path**: Configuration file for the `net` plugin [default: `/etc/xymon/clientlaunch.d/net.cfg`].
* **xymon_cli__plug_net_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/net.cfg.j2`].
* **xymon_cli__plug_net_interval**: Time between each run of the `net` plugin [default: `5m`].
* **xymon_cli__plug_net_conf_path**: Configuration file for the `net` script (probe silently exit if not present) [default: `/etc/xymon/net.yaml`].
* **xymon_cli__plug_net_conf_tpl**: Template used to generate the previous config file [default: `etc/xymon/net.yaml.j2`].
You really should consider writing your own template for `net` script,
specific to your host(s) network configuration and override
**xymon_cli__plug_net_conf_tpl** variable.
#### Netstats
Variables for the Netstats plugin from hobbit-plugins. The plugin check
network interface states.
* **xymon_cli__plug_netstats_state**: The state of plugin `netstats` [default: `false`].
* **xymon_cli__plug_netstats_path**: Configuration file for the `netstats` plugin [default: `/etc/xymon/clientlaunch.d/netstats.cfg`].
* **xymon_cli__plug_netstats_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/netstats.cfg.j2`].
* **xymon_cli__plug_netstats_interval**: Time between each run of the `netstats` plugin [default: `5m`].
#### Ntpq
Variables for the Ntpq plugin from hobbit-plugins. The plugin check
the ntpd daemon synchronization status (needs manual ntp installation).
* **xymon_cli__plug_ntpq_state**: The state of plugin `ntpq` [default: `false`].
* **xymon_cli__plug_ntpq_path**: Configuration file for the `ntpq` plugin [default: `/etc/xymon/clientlaunch.d/ntpq.cfg`].
* **xymon_cli__plug_ntpq_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/ntpq.cfg.j2`].
* **xymon_cli__plug_ntpq_interval**: Time between each run of the `ntpq` plugin [default: `5m`].
#### SGE
Variables for sge plugin from [ipr-cnrs.scripts][sge plugin source].
The plugin check health status for SGE queues and display informations about
SGE jobs and host.
* **xymon_cli__plug_sge_state**: The state of plugin `sge` [default: `False`].
* **xymon_cli__plug_sge_script_path**: Path to the `sge` script [default: `'/usr/lib/xymon/client/ext/sge'`].
* **xymon_cli__plug_sge_script_tpl**: Template used to generate the previous script [default: `'usr/lib/xymon/client/ext/sge.j2'`].
* **xymon_cli__plug_sge_script_url**: Use a remote file to get the previous script instead of a template [default: `''`].
* **xymon_cli__plug_sge_path**: Configuration file for the `sge` plugin [default: `'/etc/xymon/clientlaunch.d/sge.cfg'`].
* **xymon_cli__plug_sge_tpl**: Template used to generate the previous config file [default: `'etc/xymon/clientlaunch.d/sge.cfg.j2'`].
* **xymon_cli__plug_sge_interval**: Time between each run of the `sge` plugin [default: `'10m'`]
#### Smartoverall
Variables for Smartoverall plugin from [ipr-cnrs.scripts][smartoverall plugin source].
The plugin will try to display health status of each disks (with SMART support)
but it can't check that a recent test was successfully done.
This plugin is mostly useful for disks unknown from smartmontools's database.
For more features, see the next Smart plugin.
* **xymon_cli__plug_smartoverall_state**: The state of plugin `smartoverall` [default: `False`].
* **xymon_cli__plug_smartoverall_package**: The packages to install to provide `smartoverall` plugin [default: `[ 'smartmontools' ]`].
* **xymon_cli__plug_smartoverall_script_path**: Path to the `smartoverall` script [default: `'/usr/lib/xymon/client/ext/smartoverall'`].
* **xymon_cli__plug_smartoverall_script_tpl**: Template used to generate the previous script [default: `'usr/lib/xymon/client/ext/smartoverall.j2'`].
* **xymon_cli__plug_smartoverall_script_url**: Use a remote file to get the previous script instead of a template [default: `''`].
* **xymon_cli__plug_smartoverall_path**: Configuration file for the `smartoverall` plugin [default: `'/etc/xymon/clientlaunch.d/smartoverall.cfg'`].
* **xymon_cli__plug_smartoverall_tpl**: Template used to generate the previous config file [default: `'etc/xymon/clientlaunch.d/smartoverall.cfg.j2'`].
* **xymon_cli__plug_smartoverall_interval**: Time between each run of the `smartoverall` plugin [default: `'10m'`]
#### Smart
Variables for Smart plugin from [skazi0 xymon-plugins][smart plugin source].
The plugin check health status for each disks, compare current values with the
one's recommended by the vendor and check a recent (<24h) test was done.
* **xymon_cli__plug_smart_state**: The state of plugin `smart` [default: `False`].
* **xymon_cli__plug_smart_package**: The packages to install to provide `smart` plugin [default: `[ 'smartmontools' ]`].
* **xymon_cli__plug_smart_script_path**: Path to the `smart` script [default: `'/usr/lib/xymon/client/ext/smart'`].
* **xymon_cli__plug_smart_script_tpl**: Template used to generate the previous script [default: `'usr/lib/xymon/client/ext/smart.j2'`].
* **xymon_cli__plug_smart_script_url**: Use a remote file to get the previous script instead of a template [default: `''`].
* **xymon_cli__plug_smart_path**: Configuration file for the `smart` plugin [default: `'/etc/xymon/clientlaunch.d/smart.cfg'`].
* **xymon_cli__plug_smart_tpl**: Template used to generate the previous config file [default: `'etc/xymon/clientlaunch.d/smart.cfg.j2'`].
* **xymon_cli__plug_smart_interval**: Time between each run of the `smart` plugin [default: `'10m'`]
#### Temp
Variables for the temp plugin from hobbit-plugins. Simple temperature monitor.
* **xymon_cli__plug_temp_state**: The state of plugin `temp` [default: `False`].
* **xymon_cli__plug_temp_package**: The packages to install to provide `temp` plugin [default: `[ 'libfile-which-perl', 'libyaml-tiny-perl', 'smartmontools', 'libxml-twig-perl' ]`].
* **xymon_cli__plug_temp_path**: Configuration file for the `temp` plugin [default: `'/etc/xymon/clientlaunch.d/temp.cfg'`].
* **xymon_cli__plug_temp_tpl**: Template used to generate the previous config file [default: `'etc/xymon/clientlaunch.d/temp.cfg.j2'`].
* **xymon_cli__plug_temp_interval**: Time between each run of the `temp` plugin [default: `'5m'`]
##### Nvidia support
The temp plugin can also checks NVidia GPU temperature. In order to get those
informations, you need to install `nvidia-smi` package by your own or define
**xymon_cli__plug_temp_extra_package** var:
``` yml
xymon_cli__plug_temp_extra_package: [ 'nvidia-smi' ]
```
#### ZFS
Variables for ZFS plugin from [Xymonton][zfs plugin source]. The plugin check
health (global and for pools), capacity and snapshot status.
* **xymon_cli__plug_zfs_state**: The state of plugin `zfs` [default: `false`].
* **xymon_cli__plug_zfs_script_path**: Path to the ZFS script [default: `/usr/lib/xymon/client/ext/zfs`].
* **xymon_cli__plug_zfs_script_tpl**: Template used to generate the previous script [default: `usr/lib/xymon/client/ext/zfs.j2`].
* **xymon_cli__plug_zfs_path**: Configuration file for the `zfs` plugin [default: `/etc/xymon/clientlaunch.d/zfs.cfg`].
* **xymon_cli__plug_zfs_tpl**: Template used to generate the previous config file [default: `etc/xymon/clientlaunch.d/zfs.cfg.j2`].
* **xymon_cli__plug_zfs_interval**: Time between each run of the `zfs` plugin [default: `5m`].
#### Automatically enable some probes
It can be useful to automatically enable some probes according to the type of
servers:
* Enable temp probe on hardware hosts (also useful for Smartoverall and Smart):
``` yml
xymon_cli__plug_temp_state: '{{ True
if (ansible_virtualization_role == "host")
else False }}'
```
### OS Specific Variables
Please see default value by Operating System file in [vars][vars directory] directory.
* **xymon_cli_pkg_list**: The list of packages to install to provide `xymon-client`.
* **xymon_cli__pkg_list**: The list of packages to install to provide `xymon-client`.
* **xymon_cli__plug_pkg_list**: The list of packages to install to provide extra plugins to Xymon client.
## Example Playbook
@ -76,6 +271,7 @@ This role will:
Some plugins and options can be managed with this role:
* apt: Check state of packages and repositories.
* kern: Check for outdated running kernel and need for reboot.
* libs: Check for running processes with upgraded libraries.
* mq: Check mail queue.
* zfs: Check ZFS pools status.
@ -100,7 +296,15 @@ Jérémy Gardais
[vars directory]: ./vars
[gogs to github hook]: https://stackoverflow.com/a/21998477
[xymon source]: https://git.ipr.univ-rennes1.fr/cellinfo/ansible.xymon
[xymon source]: https://git.ipr.univ-rennes.fr/cellinfo/ansible.xymon
[xymon github]: https://github.com/ipr-cnrs/xymon
[wtfpl website]: http://www.wtfpl.net/about/
[ipr website]: https://ipr.univ-rennes1.fr/
[url hwraid]: https://hwraid.le-vert.net/wiki/DebianPackages
[megaraid plugin doc]: https://salsa.debian.org/debian/hobbit-plugins#megaraid-check-state-of-lsi-megaraid-sas-controllers
[net plugin doc]: https://salsa.debian.org/debian/hobbit-plugins#net-check-network-interface-states
[sge plugin source]: https://git.ipr.univ-rennes.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/sge.sh
[smartoverall plugin source]: https://git.ipr.univ-rennes.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/smartoverall
[smart plugin source]: https://github.com/skazi0/xymon-plugins
[zfs plugin source]: https://wiki.xymonton.org/doku.php/monitors:bb-zfs

View File

@ -7,77 +7,206 @@
# Packages and installation [[[
# -----------------------------
# .. envvar:: xymon_cli_manage [[[
# .. envvar:: xymon_cli__manage [[[
#
# If this role should manage the installation of Xymon client
xymon_cli_manage: true
xymon_cli__manage: true
# ]]]
# .. envvar:: xymon_cli_pkg_state [[[
# .. envvar:: xymon_cli__pkg_state [[[
#
# What is the desired state which this role's packages should be?
# Possible options:
#
# ``installed``
# ``present``
# Default. Ensure the packages are installed.
#
# ``absent``
# Ensure to remove the packages.
#
xymon_cli_pkg_state: 'installed'
xymon_cli__pkg_state: 'present'
# ]]]
# ]]]
# Server configuration and service [[[
# ------------------------------------
## conf
xymon_cli_default_conf_path: '/etc/default/xymon-client'
xymon_cli_default_conf_tpl: 'etc/default/xymon-client.j2'
xymon_cli_hostname: "{{ ansible_fqdn }}"
xymon_user_groups: 'xymon'
xymon_cli__default_conf_path: '/etc/default/xymon-client'
xymon_cli__default_conf_tpl: 'etc/default/xymon-client.j2'
xymon_cli__hostname: "{{ ansible_fqdn }}"
xymon_cli__user_groups: 'xymon'
## service
xymon_cli_service_manage: true
xymon_cli_service_name: 'xymon-client'
xymon_cli_service_enabled: true
xymon_cli__service_manage: true
xymon_cli__service_name: 'xymon-client'
xymon_cli__service_enabled: true
# server
xymon_srv_list: "monitoring.{{ ansible_domain }}"
xymon_cli__srv_list: "monitoring.{{ ansible_domain }}"
# ]]]
# Plugins management [[[
# ----------------------
xymon_plug_manage: true
xymon_cli__plug_manage: true
## Plugin apt [[[
xymon_plug_apt_state: true
xymon_plug_apt_package: ['dctrl-tools']
xymon_plug_apt_path: '/etc/xymon/clientlaunch.d/apt.cfg'
xymon_plug_apt_tpl: 'etc/xymon/clientlaunch.d/apt.cfg.j2'
## ]]]
## Plugin mq [[[
xymon_plug_mq_state: true
xymon_plug_mq_package: ['libtimedate-perl']
xymon_plug_mq_path: '/etc/xymon/clientlaunch.d/mq.cfg'
xymon_plug_mq_tpl: 'etc/xymon/clientlaunch.d/mq.cfg.j2'
## ]]]
## Plugin libs [[[
xymon_plug_libs_state: true
xymon_plug_libs_package: ['binutils', 'lsof', 'libyaml-tiny-perl', 'libsort-naturally-perl']
xymon_plug_libs_path: '/etc/xymon/clientlaunch.d/libs.cfg'
xymon_plug_libs_tpl: 'etc/xymon/clientlaunch.d/libs.cfg.j2'
xymon_cli__plug_apt_state: true
xymon_cli__plug_apt_package: [ 'aptitude', 'dctrl-tools' ]
xymon_cli__plug_apt_path: '/etc/xymon/clientlaunch.d/apt.cfg'
xymon_cli__plug_apt_tpl: 'etc/xymon/clientlaunch.d/apt.cfg.j2'
xymon_cli__plug_apt_interval: '5m'
xymon_cli__plug_apt_default_whitelist: []
xymon_cli__plug_apt_whitelist: []
xymon_cli__plug_apt_group_whitelist: []
xymon_cli__plug_apt_host_whitelist: []
xymon_cli__plug_apt_combined_whitelist: '{{ xymon_cli__plug_apt_default_whitelist
+ xymon_cli__plug_apt_whitelist
+ xymon_cli__plug_apt_group_whitelist
+ xymon_cli__plug_apt_host_whitelist }}'
xymon_plug_libs_default_whitelist:
## ]]]
## Plugin ipmi [[[
xymon_cli__plug_ipmi_state: false
xymon_cli__plug_ipmi_package: ['ipmitool']
xymon_cli__plug_ipmi_path: '/etc/xymon/clientlaunch.d/ipmi.cfg'
xymon_cli__plug_ipmi_tpl: 'etc/xymon/clientlaunch.d/ipmi.cfg.j2'
xymon_cli__plug_ipmi_interval: '5m'
## ]]]
## Plugin kern [[[
xymon_cli__plug_kern_state: true
xymon_cli__plug_kern_package: [ 'binutils', 'libfile-slurp-perl', 'libsort-naturally-perl' ]
xymon_cli__plug_kern_path: '/etc/xymon/clientlaunch.d/kern.cfg'
xymon_cli__plug_kern_tpl: 'etc/xymon/clientlaunch.d/kern.cfg.j2'
xymon_cli__plug_kern_interval: '5m'
### Related to "Ubuntu - Can't check kernel version" warning message
### See : https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725/comments/35
xymon_cli__plug_kern_fix: '{{ True if (ansible_distribution == "Ubuntu")
else False }}'
xymon_cli__plug_kern_fix_path: '/etc/kernel/postinst.d/statoverride'
xymon_cli__plug_kern_fix_tpl: 'etc/kernel/postinst.d/statoverride.j2'
# ]]]
## Plugin libs [[[
xymon_cli__plug_libs_state: true
xymon_cli__plug_libs_package: [ 'lsof', 'sudo', 'libyaml-tiny-perl' ]
xymon_cli__plug_libs_path: '/etc/xymon/clientlaunch.d/libs.cfg'
xymon_cli__plug_libs_tpl: 'etc/xymon/clientlaunch.d/libs.cfg.j2'
xymon_cli__plug_libs_interval: '5m'
xymon_cli__plug_libs_default_whitelist:
/lib/systemd/systemd:
- '.*'
/usr/lib/x86_64-linux-gnu/sssd/sssd_be:
/usr/libexec/sssd/sssd_autofs:
- '.*'
/usr/libexec/sssd/sssd_be:
- '.*'
/usr/libexec/sssd/sssd_nss:
- '.*'
/usr/libexec/sssd/sssd_pac:
- '.*'
/usr/libexec/sssd/sssd_pam:
- '.*'
/usr/libexec/sssd/sssd_ssh:
- '.*'
/usr/libexec/sssd/sssd_sudo:
- '.*'
/usr/sbin/sssd:
- '.*'
/sbin/multipathd:
- '.*'
xymon_plug_libs_whitelist: {}
xymon_plug_libs_group_whitelist: {}
xymon_plug_libs_host_whitelist: {}
xymon_cli__plug_libs_whitelist: {}
xymon_cli__plug_libs_group_whitelist: {}
xymon_cli__plug_libs_host_whitelist: {}
# ]]]
## Plugin Megaraid [[[
xymon_cli__plug_megaraid_state: false
xymon_cli__plug_megaraid_package: [ 'libipc-run-perl' ]
xymon_cli__plug_megaraid_path: '/etc/xymon/clientlaunch.d/megaraid.cfg'
xymon_cli__plug_megaraid_tpl: 'etc/xymon/clientlaunch.d/megaraid.cfg.j2'
xymon_cli__plug_megaraid_interval: '5m'
## ]]]
## Plugin mq [[[
xymon_cli__plug_mq_state: true
xymon_cli__plug_mq_package: ['libtimedate-perl']
xymon_cli__plug_mq_path: '/etc/xymon/clientlaunch.d/mq.cfg'
xymon_cli__plug_mq_tpl: 'etc/xymon/clientlaunch.d/mq.cfg.j2'
xymon_cli__plug_mq_interval: '5m'
## ]]]
## Plugin net [[[
xymon_cli__plug_net_state: false
xymon_cli__plug_net_package: [ 'ethtool', 'iproute2', 'libfile-slurp-perl', 'libfile-which-perl', 'libipc-run-perl', 'libyaml-tiny-perl' ]
xymon_cli__plug_net_path: '/etc/xymon/clientlaunch.d/net.cfg'
xymon_cli__plug_net_tpl: 'etc/xymon/clientlaunch.d/net.cfg.j2'
xymon_cli__plug_net_interval: '5m'
xymon_cli__plug_net_conf_path: '/etc/xymon/net.yaml'
xymon_cli__plug_net_conf_tpl: 'etc/xymon/net.yaml.j2'
## ]]]
## Plugin netstats [[[
xymon_cli__plug_netstats_state: false
xymon_cli__plug_netstats_path: '/etc/xymon/clientlaunch.d/netstats.cfg'
xymon_cli__plug_netstats_tpl: 'etc/xymon/clientlaunch.d/netstats.cfg.j2'
xymon_cli__plug_netstats_interval: '5m'
## ]]]
## Plugin ntpq [[[
xymon_cli__plug_ntpq_state: true
xymon_cli__plug_ntpq_path: '/etc/xymon/clientlaunch.d/ntpq.cfg'
xymon_cli__plug_ntpq_tpl: 'etc/xymon/clientlaunch.d/ntpq.cfg.j2'
xymon_cli__plug_ntpq_interval: '5m'
## ]]]
## Plugin SGE [[[
### From https://git.ipr.univ-rennes.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/sge.sh
xymon_cli__plug_sge_state: False
xymon_cli__plug_sge_script_path: '/usr/lib/xymon/client/ext/sge.sh'
xymon_cli__plug_sge_script_tpl: 'usr/lib/xymon/client/ext/sge.sh.j2'
xymon_cli__plug_sge_script_url: ''
xymon_cli__plug_sge_path: '/etc/xymon/clientlaunch.d/sge.cfg'
xymon_cli__plug_sge_tpl: 'etc/xymon/clientlaunch.d/sge.cfg.j2'
xymon_cli__plug_sge_interval: '5m'
# ]]]
## Plugin smartoverall [[[
### From https://git.ipr.univ-rennes.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/smartoverall
### And based on https://www.xymon.com/xymon-cgi/viewconf.sh?smart
### Mostly for disks unknown from smartmontools's database
xymon_cli__plug_smartoverall_state: False
xymon_cli__plug_smartoverall_package: [ 'smartmontools' ]
xymon_cli__plug_smartoverall_script_path: '/usr/lib/xymon/client/ext/smartoverall'
xymon_cli__plug_smartoverall_script_tpl: 'usr/lib/xymon/client/ext/smartoverall.j2'
xymon_cli__plug_smartoverall_script_url: ''
xymon_cli__plug_smartoverall_path: '/etc/xymon/clientlaunch.d/smartoverall.cfg'
xymon_cli__plug_smartoverall_tpl: 'etc/xymon/clientlaunch.d/smartoverall.cfg.j2'
xymon_cli__plug_smartoverall_interval: '10m'
# ]]]
## Plugin smart [[[
### From https://github.com/skazi0/xymon-plugins
xymon_cli__plug_smart_state: False
xymon_cli__plug_smart_package: [ 'smartmontools' ]
xymon_cli__plug_smart_script_path: '/usr/lib/xymon/client/ext/smart'
xymon_cli__plug_smart_script_tpl: 'usr/lib/xymon/client/ext/smart.j2'
xymon_cli__plug_smart_script_url: ''
xymon_cli__plug_smart_path: '/etc/xymon/clientlaunch.d/smart.cfg'
xymon_cli__plug_smart_tpl: 'etc/xymon/clientlaunch.d/smart.cfg.j2'
xymon_cli__plug_smart_interval: '10m'
# ]]]
## Plugin temp [[[
### Enable by default on hardware host
xymon_cli__plug_temp_state: False
xymon_cli__plug_temp_package: [ 'libfile-which-perl', 'libyaml-tiny-perl', 'smartmontools', 'libxml-twig-perl' ]
# Define xymon_cli__plug_temp_extra_package in your own inventory.
# See Nvidia support in README for more informations
#xymon_cli__plug_temp_extra_package: [ 'nvidia-smi' ]
xymon_cli__plug_temp_path: '/etc/xymon/clientlaunch.d/temp.cfg'
xymon_cli__plug_temp_tpl: 'etc/xymon/clientlaunch.d/temp.cfg.j2'
xymon_cli__plug_temp_interval: '5m'
# ]]]
## Plugin zfs [[[
@ -86,6 +215,75 @@ xymon_cli__plug_zfs_script_path: '/usr/lib/xymon/client/ext/zfs'
xymon_cli__plug_zfs_script_tpl: 'usr/lib/xymon/client/ext/zfs.j2'
xymon_cli__plug_zfs_path: '/etc/xymon/clientlaunch.d/zfs.cfg'
xymon_cli__plug_zfs_tpl: 'etc/xymon/clientlaunch.d/zfs.cfg.j2'
xymon_cli__plug_zfs_interval: '5m'
# ]]]
# .. envvar:: xymon_cli__plug_combined_packages [[[
#
# Combine all packages vars related to plugins (only enabled plugins).
#
xymon_cli__plug_combined_packages: '{{ ((xymon_cli__plug_pkg_list|d([]) if xymon_cli__plug_manage|bool else [])
+ (xymon_cli__plug_apt_package if xymon_cli__plug_apt_state|bool else [])
+ (xymon_cli__plug_ipmi_package if xymon_cli__plug_ipmi_state|bool else [])
+ (xymon_cli__plug_kern_package if xymon_cli__plug_kern_state|bool else [])
+ (xymon_cli__plug_libs_package if xymon_cli__plug_libs_state|bool else [])
+ (xymon_cli__plug_megaraid_package if xymon_cli__plug_megaraid_state|bool else [])
+ (xymon_cli__plug_mq_package if xymon_cli__plug_mq_state|bool else [])
+ (xymon_cli__plug_net_package if xymon_cli__plug_net_state|bool else [])
+ (xymon_cli__plug_smartoverall_package if xymon_cli__plug_smartoverall_state|bool else [])
+ (xymon_cli__plug_smart_package if xymon_cli__plug_smart_state|bool else [])
+ (xymon_cli__plug_temp_package if xymon_cli__plug_temp_state|bool else [])
+ (xymon_cli__plug_temp_extra_package|d([]) if xymon_cli__plug_temp_state|bool else []))
| sort | unique }}'
# ]]]
# .. envvar:: xymon_cli__plug_combined_clientlaunch [[[
#
# Combine clientlaunch files for all plugins
#
xymon_cli__plug_combined_clientlaunch:
- name: apt
path: '{{ xymon_cli__plug_apt_path }}'
template: '{{ xymon_cli__plug_apt_tpl }}'
- name: ipmi
path: '{{ xymon_cli__plug_ipmi_path }}'
template: '{{ xymon_cli__plug_ipmi_tpl }}'
- name: kern
path: '{{ xymon_cli__plug_kern_path }}'
template: '{{ xymon_cli__plug_kern_tpl }}'
- name: libs
path: '{{ xymon_cli__plug_libs_path }}'
template: '{{ xymon_cli__plug_libs_tpl }}'
- name: megaraid
path: '{{ xymon_cli__plug_megaraid_path }}'
template: '{{ xymon_cli__plug_megaraid_tpl }}'
- name: mq
path: '{{ xymon_cli__plug_mq_path }}'
template: '{{ xymon_cli__plug_mq_tpl }}'
- name: net
path: '{{ xymon_cli__plug_net_path }}'
template: '{{ xymon_cli__plug_net_tpl }}'
- name: netstats
path: '{{ xymon_cli__plug_netstats_path }}'
template: '{{ xymon_cli__plug_netstats_tpl }}'
- name: ntpq
path: '{{ xymon_cli__plug_ntpq_path }}'
template: '{{ xymon_cli__plug_ntpq_tpl }}'
- name: sge
path: '{{ xymon_cli__plug_sge_path }}'
template: '{{ xymon_cli__plug_sge_tpl }}'
- name: smartoverall
path: '{{ xymon_cli__plug_smartoverall_path }}'
template: '{{ xymon_cli__plug_smartoverall_tpl }}'
- name: smart
path: '{{ xymon_cli__plug_smart_path }}'
template: '{{ xymon_cli__plug_smart_tpl }}'
- name: temp
path: '{{ xymon_cli__plug_temp_path }}'
template: '{{ xymon_cli__plug_temp_tpl }}'
- name: zfs
path: '{{ xymon_cli__plug_zfs_path }}'
template: '{{ xymon_cli__plug_zfs_tpl }}'
# ]]]

View File

@ -1,5 +1,5 @@
---
# handlers file for ipr.ansible.xymon
- name: restart xymon-client service
service: name={{ xymon_cli_service_name }} state=restarted
when: xymon_cli_service_manage
service: name={{ xymon_cli__service_name }} state=restarted
when: xymon_cli__service_manage

View File

@ -1,22 +1,20 @@
---
dependencies: []
galaxy_info:
author: "Jérémy Gardais"
description: "Manage Xymon configuration"
license: WTFPL
company: IPR
issue_tracker_url: https://git.ipr.univ-rennes1.fr/cellinfo/ansible.xymon/issues
min_ansible_version: 2.2
issue_tracker_url: https://git.ipr.univ-rennes.fr/cellinfo/ansible.xymon/issues
min_ansible_version: 2.7
platforms:
- name: Debian
versions:
- buster
- bullseye
- stretch
#- name: opensuse
# versions:
# - all
# - 12.1
# - 12.2
# - 12.3
# - 13.1
# - 13.2
galaxy_tags:
- system
- xymon

View File

@ -4,7 +4,7 @@
# tasks file for ipr.ansible.xymon
- name: Load specific OS vars for xymon
include_vars: "{{ item }}"
ansible.builtin.include_vars: "{{ item }}"
with_first_found:
- "{{ ansible_distribution|lower }}-{{ ansible_distribution_version }}.yml"
- "{{ ansible_distribution|lower }}.yml"
@ -12,137 +12,199 @@
# Manage required client packages [[[1
- name: client package
package:
name: '{{ item }}'
state: '{{ xymon_cli_pkg_state }}'
with_items:
- '{{ xymon_cli_pkg_list }}'
when: xymon_cli_manage|bool
ansible.builtin.package:
name: '{{ xymon_cli__pkg_list | flatten }}'
state: '{{ xymon_cli__pkg_state }}'
register: cli_result
until: cli_result is success
when: xymon_cli__manage|bool
# Manage client configuration [[[1
- name: CONFIG xymon-client service
template:
src: '{{ xymon_cli_default_conf_tpl }}'
dest: '{{ xymon_cli_default_conf_path }}'
ansible.builtin.template:
src: '{{ xymon_cli__default_conf_tpl }}'
dest: '{{ xymon_cli__default_conf_path }}'
owner: root
group: root
mode: 0644
backup: true
when: xymon_cli_manage|bool
when: xymon_cli__manage|bool
notify: restart xymon-client service
- name: CONFIG xymon user's groups
user:
ansible.builtin.user:
name: xymon
groups: '{{ xymon_user_groups }}'
groups: '{{ xymon_cli__user_groups }}'
append: true
when: xymon_cli_manage|bool
when: xymon_cli__manage|bool
notify: restart xymon-client service
# Manage service [[[1
- name: SERVICE manage '{{ xymon_cli_service_name }}'
service:
name: '{{ xymon_cli_service_name }}'
- name: SERVICE manage '{{ xymon_cli__service_name }}'
ansible.builtin.service:
name: '{{ xymon_cli__service_name }}'
state: started
enabled: '{{ xymon_cli_service_enabled }}'
when: (xymon_cli_manage|bool and
xymon_cli_service_manage|bool)
enabled: '{{ xymon_cli__service_enabled }}'
when: (xymon_cli__manage|bool and
xymon_cli__service_manage|bool)
# Manage all plugins's packages [[[1
- name: PLUGINS package and dependencies
ansible.builtin.package:
name: '{{ xymon_cli__plug_combined_packages | flatten }}'
state: 'present'
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool)
register: combined_packages_plug_result
until: combined_packages_plug_result is success
notify: restart xymon-client service
# Manage plugins clientlaunch files [[[1
- name: PLUGINS clientlaunch files
ansible.builtin.template:
src: '{{ item.template }}'
dest: '{{ item.path }}'
owner: root
group: root
mode: 0644
with_items:
- '{{ xymon_cli__plug_combined_clientlaunch }}'
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool)
notify: restart xymon-client service
# Manage apt plugin [[[1
- name: PLUGIN apt packages
package:
name: '{{ item }}'
state: '{{ "present" if xymon_plug_apt_state else "absent" }}'
with_items:
- '{{ xymon_plug_apt_package }}'
when: (xymon_cli_manage|bool and
xymon_plug_manage|bool)
notify: restart xymon-client service
- name: PLUGIN apt
template:
src: '{{ xymon_plug_apt_tpl }}'
dest: '{{ xymon_plug_apt_path }}'
- name: PLUGIN apt no_repo_accept whitelist
ansible.builtin.template:
src: 'etc/xymon/apt_no_repo_accept.j2'
dest: '/etc/xymon/apt_no_repo_accept'
owner: root
group: root
mode: 0644
when: (xymon_cli_manage|bool and
xymon_plug_manage|bool)
notify: restart xymon-client service
# Manage mq plugin [[[1
- name: PLUGIN mq packages
package:
name: '{{ item }}'
state: '{{ "present" if xymon_plug_mq_state else "absent" }}'
with_items:
- '{{ xymon_plug_mq_package }}'
when: (xymon_cli_manage|bool and
xymon_plug_manage|bool)
notify: restart xymon-client service
- name: PLUGIN mq
template:
src: '{{ xymon_plug_mq_tpl }}'
dest: '{{ xymon_plug_mq_path }}'
owner: root
group: root
mode: 0644
when: (xymon_cli_manage|bool and
xymon_plug_manage|bool)
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool)
notify: restart xymon-client service
# Manage libs plugin [[[1
- name: PLUGIN libs packages
package:
name: '{{ item }}'
state: '{{ "present" if xymon_plug_libs_state else "absent" }}'
with_items:
- '{{ xymon_plug_libs_package }}'
when: (xymon_cli_manage|bool and
xymon_plug_manage|bool)
notify: restart xymon-client service
- name: PLUGIN libs
template:
src: '{{ xymon_plug_libs_tpl }}'
dest: '{{ xymon_plug_libs_path }}'
owner: root
group: root
mode: 0644
when: (xymon_cli_manage|bool and
xymon_plug_manage|bool)
notify: restart xymon-client service
- name: PLUGIN libs whitelist
template:
ansible.builtin.template:
src: 'etc/xymon/libs.local.yaml.j2'
dest: '/etc/xymon/libs.local.yaml'
owner: root
group: root
mode: 0644
when: (xymon_cli_manage|bool and
xymon_plug_manage|bool)
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool)
notify: restart xymon-client service
# Manage zfs plugin [[[1
- name: PLUGIN zfs config file
template:
src: '{{ xymon_cli__plug_zfs_tpl }}'
dest: '{{ xymon_cli__plug_zfs_path }}'
# Manage kern plugin [[[1
- name: PLUGIN kern workaround
ansible.builtin.template:
src: '{{ xymon_cli__plug_kern_fix_tpl }}'
dest: '{{ xymon_cli__plug_kern_fix_path }}'
owner: root
group: root
mode: 0754
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool and
xymon_cli__plug_kern_fix|bool)
notify: restart xymon-client service
# Manage net plugin [[[1
- name: PLUGIN net config template
ansible.builtin.template:
src: '{{ xymon_cli__plug_net_conf_tpl }}'
dest: '{{ xymon_cli__plug_net_conf_path }}'
owner: root
group: root
mode: 0644
when: (xymon_cli_manage|bool and
xymon_plug_manage|bool)
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool)
notify: restart xymon-client service
# Manage sge plugin [[[1
- name: PLUGIN sge script file from template
ansible.builtin.template:
src: '{{ xymon_cli__plug_sge_script_tpl }}'
dest: '{{ xymon_cli__plug_sge_script_path }}'
owner: root
group: xymon
mode: 0755
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool and
xymon_cli__plug_sge_script_url|length == 0 )
notify: restart xymon-client service
- name: PLUGIN sge script file from URL
ansible.builtin.get_url:
url: '{{ xymon_cli__plug_sge_script_url }}'
dest: '{{ xymon_cli__plug_sge_script_path }}'
owner: root
group: xymon
mode: 0755
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool and
xymon_cli__plug_sge_script_url|length > 0 )
notify: restart xymon-client service
# Manage smartoverall plugin [[[1
- name: PLUGIN smartoverall script file from template
ansible.builtin.template:
src: '{{ xymon_cli__plug_smartoverall_script_tpl }}'
dest: '{{ xymon_cli__plug_smartoverall_script_path }}'
owner: root
group: xymon
mode: 0755
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool and
xymon_cli__plug_smartoverall_script_url|length == 0 )
notify: restart xymon-client service
- name: PLUGIN smartoverall script file from URL
ansible.builtin.get_url:
url: '{{ xymon_cli__plug_smartoverall_script_url }}'
dest: '{{ xymon_cli__plug_smartoverall_script_path }}'
owner: root
group: xymon
mode: 0755
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool and
xymon_cli__plug_smartoverall_script_url|length > 0 )
notify: restart xymon-client service
# Manage smart plugin [[[1
- name: PLUGIN smart script file from template
ansible.builtin.template:
src: '{{ xymon_cli__plug_smart_script_tpl }}'
dest: '{{ xymon_cli__plug_smart_script_path }}'
owner: root
group: xymon
mode: 0755
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool and
xymon_cli__plug_smart_script_url|length == 0 )
notify: restart xymon-client service
- name: PLUGIN smart script file from URL
ansible.builtin.get_url:
url: '{{ xymon_cli__plug_smart_script_url }}'
dest: '{{ xymon_cli__plug_smart_script_path }}'
owner: root
group: xymon
mode: 0755
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool and
xymon_cli__plug_smart_script_url|length > 0 )
notify: restart xymon-client service
# Manage zfs plugin [[[1
- name: PLUGIN zfs script file
template:
ansible.builtin.template:
src: '{{ xymon_cli__plug_zfs_script_tpl }}'
dest: '{{ xymon_cli__plug_zfs_script_path }}'
owner: root
group: xymon
mode: 0755
when: (xymon_cli_manage|bool and
xymon_plug_manage|bool)
when: (xymon_cli__manage|bool and
xymon_cli__plug_manage|bool)
notify: restart xymon-client service

View File

@ -1,3 +1,6 @@
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
# Configure the Xymon client settings.
# You MUST set the list of Xymon servers that this
@ -10,7 +13,7 @@
# or (multiple servers)
# XYMONSERVERS="10.0.0.1 192.168.1.1"
XYMONSERVERS="{{ xymon_srv_list }}"
XYMONSERVERS="{{ xymon_cli__srv_list }}"
# The defaults usually suffice for the rest of this file,
# but you can tweak the hostname that the client reports
@ -20,7 +23,7 @@ XYMONSERVERS="{{ xymon_srv_list }}"
# CLIENTHOSTNAME=""
# CLIENTOS="rhel3"
CLIENTHOSTNAME="{{ xymon_cli_hostname }}"
CLIENTHOSTNAME="{{ xymon_cli__hostname }}"
# Optionally mount a tmpfs on /var/lib/xymon/tmp. On client systems this has
# the advantage that client reports will continue to work even if the /var

View File

@ -0,0 +1,18 @@
#!/bin/sh
{# Use | comment to manage multilines #}
# {{ ansible_managed | comment }}
# Ansible template : {{ template_path }}
#
# Allow to fix the warning :
# "Kernel image /boot/vmlinuz… unreadable. Can't check kernel version!"
# https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
# See comment #34 - https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725/comments/34
set -e
version="$1"
if [ -z "$version" ]; then
exit 0
fi
exec dpkg-statoverride --force-statoverride-add --update --add root root 0644 "/boot/vmlinuz-${version}"

View File

@ -0,0 +1,5 @@
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{% for package in xymon_cli__plug_apt_combined_whitelist %}
{{ package }}
{% endfor %}

View File

@ -1,6 +1,8 @@
[apt]
{{ '#DISABLED' if xymon_plug_apt_state else 'DISABLED' }}
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_apt_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD $XYMONCLIENTHOME/ext/apt
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL 5m
INTERVAL {{ xymon_cli__plug_apt_interval }}

View File

@ -0,0 +1,8 @@
[ipmi]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_ipmi_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD /usr/bin/sudo -E -u root $XYMONCLIENTHOME/ext/ipmi
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL {{ xymon_cli__plug_ipmi_interval }}

View File

@ -0,0 +1,8 @@
[kern]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_kern_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD $XYMONCLIENTHOME/ext/kern
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL {{ xymon_cli__plug_kern_interval }}

View File

@ -1,6 +1,8 @@
[libs]
{{ '#DISABLED' if xymon_plug_libs_state else 'DISABLED' }}
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_libs_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD $XYMONCLIENTHOME/ext/libs
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL 5m
INTERVAL {{ xymon_cli__plug_libs_interval }}

View File

@ -0,0 +1,9 @@
# Requires megaclisas-status package from https://hwraid.le-vert.net/wiki/DebianPackages
[megaraid]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_megaraid_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD /usr/bin/xynagios --test=megaraid -- sudo megaclisas-status --nagios
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL 5m

View File

@ -1,6 +1,8 @@
[mq]
{{ '#DISABLED' if xymon_plug_mq_state else 'DISABLED' }}
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_mq_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD $XYMONCLIENTHOME/ext/mq
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL 5m
INTERVAL {{ xymon_cli__plug_mq_interval }}

View File

@ -0,0 +1,8 @@
[net]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_net_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD /usr/bin/sudo -E -u root $XYMONCLIENTHOME/ext/net
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL {{ xymon_cli__plug_net_interval }}

View File

@ -0,0 +1,8 @@
[netstats]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_netstats_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD $XYMONCLIENTHOME/ext/netstats
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL {{ xymon_cli__plug_netstats_interval }}

View File

@ -0,0 +1,8 @@
[ntpq]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_ntpq_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD $XYMONCLIENTHOME/ext/ntpq
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL {{ xymon_cli__plug_ntpq_interval }}

View File

@ -0,0 +1,8 @@
[sge]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_sge_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD {{ xymon_cli__plug_sge_script_path }}
LOGFILE /var/log/xymon/sge.log
INTERVAL {{ xymon_cli__plug_sge_interval }}

View File

@ -0,0 +1,8 @@
[smart]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_smart_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD /usr/bin/sudo -E -u root {{ xymon_cli__plug_smart_script_path }}
LOGFILE /var/log/xymon/smart.log
INTERVAL {{ xymon_cli__plug_smart_interval }}

View File

@ -0,0 +1,8 @@
[smartoverall]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_smartoverall_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD /usr/bin/sudo -E -u root {{ xymon_cli__plug_smartoverall_script_path }}
LOGFILE /var/log/xymon/smartoverall.log
INTERVAL {{ xymon_cli__plug_smartoverall_interval }}

View File

@ -0,0 +1,8 @@
[temp]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_temp_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD $XYMONCLIENTHOME/ext/temp
LOGFILE /var/log/xymon/xymonclient.log
INTERVAL {{ xymon_cli__plug_temp_interval }}

View File

@ -1,6 +1,8 @@
[zfs]
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ '#DISABLED' if xymon_cli__plug_zfs_state else 'DISABLED' }}
ENVFILE /etc/xymon/xymonclient.cfg
CMD /usr/bin/sudo -E -u root $XYMONCLIENTHOME/ext/zfs
LOGFILE /var/log/xymon/zfs.log
INTERVAL 5m
INTERVAL {{ xymon_cli__plug_zfs_interval }}

View File

@ -1,8 +1,9 @@
# {{ ansible_managed }}
{% set inputmerged = xymon_plug_libs_default_whitelist.copy() %}
{% set _ = inputmerged.update(xymon_plug_libs_whitelist) %}
{% set _ = inputmerged.update(xymon_plug_libs_group_whitelist) %}
{% set _ = inputmerged.update(xymon_plug_libs_host_whitelist) %}
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{% set inputmerged = xymon_cli__plug_libs_default_whitelist.copy() %}
{% set _ = inputmerged.update(xymon_cli__plug_libs_whitelist) %}
{% set _ = inputmerged.update(xymon_cli__plug_libs_group_whitelist) %}
{% set _ = inputmerged.update(xymon_cli__plug_libs_host_whitelist) %}
---
whitelist:
{% for group, rules in inputmerged|dictsort %}

View File

@ -0,0 +1,39 @@
# {{ ansible_managed | comment }}
## From ipr-cnrs.xymon role
{{ ansible_hostname }}:
- {{ ansible_default_ipv4.interface }}
## This file is just here to allow the net probe, you juste enable,
## to send something.
## Check the README of hobbit-plugins project:
## https://salsa.debian.org/debian/hobbit-plugins#net-check-network-interface-states
## To get an overview of what can be done with this probe and how to get
## a working and more complete configuration file (check speed, mtu,…).
## You really should consider writing your own template and override
## `xymon_cli__plug_net_conf_tpl` variable.
## As the probe search for the hostname to get it's configuration, you can
## write one single configuration file with several hosts definition.
## And if you don't like template, you can simply put static informations ;)
## Example for "host1"
#host1:
# ### Ensure eno1 is up with a "Direct Attach Copper" (see ethtool) and
# ### with a speed of 10000Mb/s
# eno1:
# UP: red
# "Port: Direct Attach Copper": red
# "Speed: 10000Mb/s": red
# ### Ensure bond0 and vmbr0 are up
# bond0:
# UP: red
# vmbr0:
# UP: red
# ### Ensure vlan2 as MTU 9000
# vlan2:
# "mtu 9000": red
# ### Ensure eno3 is up with a speed of 1000Mb/s
# eno3:
# UP: red
# "1000Mb/s": red

View File

@ -0,0 +1,252 @@
#!/bin/sh
# {{ ansible_managed | comment }}
# From ipr-cnrs.xymon role
# https://git.ipr.univ-rennes.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/sge.sh
#
# SGE: Sun Grid Engine check - Xymon external script test
#
##### Purpose is to report back to a central server, all Sun
##### Grid Engine software faults.
#####
#
# version 0.4
#
# BIG BROTHER / XXXXXXXXXXXXXXXX status
#
# Written by Butch Deal <butchdeal@yahoo.com>
# Daniel Gomez <dgomez@tigr.org,daniel@ixplosive.com>
# Jérémy Gardais <jeremy.gardais@univ-rennes1.fr>
#
# v0.4 09/06/20 clean, correction,… for Xymon 4.3.28
# v0.3e 10/14/08 cut down on the number of qhost runs
# v0.3d 03/31/06 added alarm/suspend state identification
# v0.3c 03/01/06 propogated yellow state upon UNAVAILABLE queue intances
# v0.3b 01/31/06 fixed yellow warning queue status for ambigious config test
# v0.3a 01/31/06 added unknown queue status and ambigious config test
# v0.3 01/26/06 fixed status reporting and optimized job status
# v0.2 08/03/05 flag disabled queues as clear
# v0.1 07/28/05 authored
########################################
# NOTE
# The version v0.4 has only been tested with Xymon (server and client) 4.2.x.
#
# The color status with respects to queue status is arbitrary and should be
# reviewed for your particular environment.
#
# Tested on :
# Solaris & Linux
# Linux only (for v0.4)
########################################
########################################
# INSTALLATION
# step 1 - copy to Xymon client's ext dir
# step 2 - New clientlaunch.d/sge.cfg file
# step 3 - restart Xymon client
#
# NOTE - the TEST variable in the configuration section, this is the name used
# as the column header.
########################################
##################################
# CONFIGURE IT HERE
##################################
readonly PLUGIN_NAME=$(basename "${0}")
readonly TEST="sge"
readonly PLUGIN_RESULT="${XYMONTMP}/${MACHINEDOTS}.${TEST}.plugin_result"
readonly QSTAT=$(command -v qstat)
readonly QHOST=$(command -v qhost)
readonly QSELECT=$(command -v qselect)
export QSTAT QHOST QSELECT
# define colours for graphics
# Comment these out if using older BB versions
CLEAR_PIC="&clear"
RED_PIC="&red"
YELLOW_PIC="&yellow"
GREEN_PIC="&green"
UNKNOWN_PIC="&purple"
##################################
# Start of script
##################################
get_header()
{
echo ""
#echo "<FONT SIZE=+2><b>$1</b></FONT> ($2)<BR>"
echo "<FONT SIZE=+2><b>$1</b></FONT> <BR>"
# If you do not want the header in a bigger font use line below instead
#echo "<b>$1</b> ($2)"
# If you want the "Paul Luzzi" look uncomment this section and comment
# out the above sections:
#echo "<P><DIV ALIGN=\"CENTER\"><HR>"
#echo "<B>============== $1 ==============</B>"
#echo "<B>--- ($2) ---</B>"
#echo "<HR></DIV>"
#echo "<BLOCKQUOTE>"
}
get_header_small()
{
echo ""
#echo "<FONT SIZE=+2><b>$1</b></FONT> ($2)<BR>"
echo "<FONT SIZE=+1><b>$1</b></FONT> <BR>"
# If you do not want the header in a bigger font use line below instead
# echo "<b>$1</b> ($2)"
# If you want the "Paul Luzzi" look uncomment this section and comment
# out the above sections:
#echo "<P><DIV ALIGN=\"CENTER\"><HR>"
#echo "<B>============== $1 ==============</B>"
#echo "<B>--- ($2) ---</B>"
#echo "<HR></DIV>"
#echo "<BLOCKQUOTE>"
}
get_footer()
{
echo ""
# If you want the "Paul Luzzi" look uncomment this section and comment
# out the above sections:
#echo "</BLOCKQUOTE>"
}
#####
##### Get Status proc - used to get all responses
#####
get_status()
{
#####
##### Setup some variables for use later
#####
COLOR="green"
# Check defaults have been set
if [ "${QSTAT}" = "" ]; then
readonly QSTAT=$(command -v qstat)
echo ""
echo "$YELLOW_PIC QSTAT command is not defined in etc/bbsys.local - using default: ${QSTAT}"
fi
if [ "${QHOST}" = "" ]; then
readonly QHOST=$(command -v qhost)
echo ""
echo "$YELLOW_PIC QHOST command is not defined in etc/bbsys.local - using default: ${QHOST}"
fi
if [ "${QSELECT}" = "" ]; then
readonly QSELECT=$(command -v qselect)
echo ""
echo "$YELLOW_PIC QSELECT command is not defined in etc/bbsys.local - using default: ${QSELECT}"
fi
###
### Check the jobs
###
get_header "Jobs" "$QSTAT -l hostname=$MACHINEDOTS"
jobs=$(${QSTAT} -l hostname="${MACHINEDOTS}" -s r -u \*)
if [ -z "$jobs" ]; then
echo "No Running Jobs"
else
${QSTAT} -l hostname="${MACHINEDOTS}" -s r -u \*
fi
get_footer
###
### Check the host
###
get_header "Host" "$METAHS -i"
${QHOST} -h "${MACHINEDOTS}" | grep -v "global"
get_footer
###
### Identify queue memberships
###
#get_header "Queue Membership" "$QHOST -q"
#${QHOST} -h ${MACHINEDOTS} -q | tail +5
#get_footer
###
### Check queue instance states
###
queueTriggered=false;
# Queueset=$(${QHOST} -h ${MACHINEDOTS} -q | tail +5 | awk '{ print $1 }')
${QHOST} -h "${MACHINEDOTS}" -q | tail +5 > "${PLUGIN_RESULT}.QSTATE"
Queueset=$(< "${PLUGIN_RESULT}.QSTATE" awk '{ print $1 }')
for Qset in $Queueset; do
# qstate=$(${QHOST} -q -h "${MACHINEDOTS}" | tail +5 | grep " $Qset" | awk '{print $4}')
qstate=$(grep " $Qset" "${PLUGIN_RESULT}.QSTATE" | awk '{print $4}')
# Order determines more significant color status
if [ "$(echo "${qstate}" | grep -c d)" != "0" ]; then
COLOR="clear"
queueMsg=$(echo "$queueMsg<BR>$CLEAR_PIC $Qset@$HOST is DISABLED")
queueTriggered=true;
elif [ "$(echo "${qstate}" | grep -c E)" != "0" ]; then
COLOR="red"
queueMsg=$(echo "$queueMsg<BR>$RED_PIC $Qset@$HOST is in ERROR!")
queueTriggered=true;
elif [ "$(echo "${qstate}" | grep -c c)" != "0" ]; then
COLOR="yellow"
queueMsg=$(echo "$queueMsg<BR>$YELLOW_PIC $Qset@$HOST has an ambigious configuration!")
queueTriggered=true;
elif [ "$(echo "${qstate}" | grep -c a)" != "0" ] || \
[ "$(echo "${qstate}" | grep -c A)" != "0" ]; then
queueMsg=$(echo "$queueMsg<BR>$YELLOW_PIC $Qset@$HOST is in ALARM")
elif [ "$(echo "${qstate}" | grep -c s)" != "0" ] || \
[ "$(echo "${qstate}" | grep -c S)" != "0" ]; then
queueMsg=$(echo "$queueMsg<BR>$YELLOW_PIC $Qset@$HOST is SUSPENDED")
elif [ "$(echo "${qstate}" | grep -c u)" != "0" ]; then
COLOR="yellow"
queueMsg=$(echo "$queueMsg<BR>$YELLOW_PIC $Qset@$HOST is UNAVAILABLE!")
queueTriggered=true;
elif [ "$qstate" = "" ]; then
queueMsg=$(echo "$queueMsg<BR>$GREEN_PIC $Qset@$HOST is OK")
else
queueMsg=$(echo "$queueMsg<BR>$UNKNOWN_PIC $Qset@$HOST is UNKNOWN")
queueTriggered=true;
fi
done
if [ -f "${PLUGIN_RESULT}.QSTATE" ]; then
rm -f -- "${PLUGIN_RESULT}.QSTATE"
fi
get_header "Queue Instance Status Report"
echo "$queueMsg"
get_footer
#####
##### Make sure to export COLOR so that it gets back to "central"
#####
export COLOR
#####
##### End of get_status proc
#####
}
#####
##### Main body
#####
get_status > "${PLUGIN_RESULT}"
# NOW USE THE XYMON COMMAND TO SEND THE DATA ACROSS
$XYMON "${XYMSRV}" "status ${MACHINE}.${TEST} ${COLOR} $($DATE) $(cat ${PLUGIN_RESULT})"
#For testing only
# echo $XYMON "${XYMSRV}" "status ${MACHINE}.${TEST} ${COLOR} $($DATE) $(cat ${PLUGIN_RESULT})" > /tmp/sgetmp
# Clean up our mess
# Checking for existence of each file since the whole test may be optional
# and may not actually run on every client
#
if [ -f "${PLUGIN_RESULT}" ]; then
rm -f -- "${PLUGIN_RESULT}"
fi
##############################################
# end of script
##############################################

View File

@ -0,0 +1,203 @@
#!/usr/bin/perl
# $Id: sensors 70 2011-11-25 09:21:18Z skazi $
# Author: Jacek Tomasiak <jacek.tomasiak@gmail.com>
# {{ ansible_managed | comment }}
# From ipr-cnrs.xymon role
# Thanks to Jacek Tomasiak skazi0
# https://github.com/skazi0/xymon-plugins/blob/master/client/ext/smart
use strict;
# add script's directory to module search path for Hobbit.pm on non-debian systems
use FindBin;
use lib $FindBin::Bin;
use Hobbit;
use Data::Dumper;
my $bb = new Hobbit('smart');
my $temp_disk_list = "$ENV{'XYMONTMP'}/$ENV{'MACHINEDOTS'}.smart.drivedb.list";
my @disks = ();
my %olderr = {};
my $CACHETIME = 10; # minutes
my $CACHEFILE = "$ENV{'XYMONTMP'}/$ENV{'MACHINEDOTS'}.smart.cache";
&load_config("$ENV{'XYMONTMP'}/logfetch.$ENV{'MACHINEDOTS'}.cfg");
my @disks_stat = stat($temp_disk_list);
my $disks_mtime = scalar @disks_stat ? $disks_stat[9] : 0;
#
# Regenerate disks list if the file is too old (600 minutes)
if (time() - $disks_mtime > 600)
{
unlink $temp_disk_list;
}
if (-e $temp_disk_list) {
# Should use the existing file
}
else {
# Create a file with the list of disks
system("ls -1 /dev/sd* | grep -vE '[0-9]' > $temp_disk_list") == 0
or die "system command to create $temp_disk_list failed: $?";
}
# fallback to disk detection if nothing defined in the config
unless (@disks) {
## Put temp_disk_list content to disks array
open(my $fh, '<:encoding(UTF-8)', $temp_disk_list)
or die "Could not open file '$temp_disk_list' $!";
while (my $row = <$fh>) {
chomp $row;
push(@disks, "$row");
}
}
my @stat = stat($CACHEFILE);
my $mtime = scalar @stat ? $stat[9] : 0;
# regenerate sensors cache if outdated
if (time() - $mtime > $CACHETIME * 60)
{
open(OUT, ">$CACHEFILE") or die "cannot open $CACHEFILE";
foreach my $name (@disks)
{
print OUT ('=' x 20) . " $name " . ('=' x 20) . "\n";
my @output = `sudo smartctl -AHi -l error -l selftest $name 2>&1` or die;
my $ncv = '';
my $newerr = 1;
my $ponhours = undef;
my $lasttest = undef;
foreach my $line (@output)
{
# skip header
next if ($line =~ /smartctl|Copyright|Home page|===/);
if ($line =~ /.*overall-health.*:\s*(.*)/)
{
my $lstatus = ($1 == 'PASSED') ? 'green' : 'red';
print OUT "&$lstatus $line";
}
elsif ($line =~ /^\s*(\d+)\s+(\S+)\s+\S+\s+(\d+)\s+(\d+)\s+(\d+)\s+\S+\s+\S+\s+\S+\s+(.*)$/)
{
my ($aname, $value, $worst, $thresh, $raw) = ($2, $3, $4, $5, $6);
my $lstatus = 'green';
if ($aname =~ /Current_Pending_Sector|Offline_Uncorrectable/ and int($raw) > 0)
{
$lstatus = 'yellow';
}
elsif ($aname =~ /Power_On_Hours/)
{
$ponhours = $raw;
}
print OUT "&$lstatus $line";
$ncv .= "$name-$aname-value : $value\n";
$ncv .= "$name-$aname-worst : $worst\n";
$ncv .= "$name-$aname-thresh : $thresh\n";
$ncv .= "$name-$aname-raw : $raw\n";
}
elsif ($line =~ /^\s*No Errors Logged\s*$/)
{
$newerr = 0;
print OUT "&green $line";
}
elsif ($line =~ /Error Count:\s*(\d+)/)
{
$newerr = $1 - $olderr{$name};
my $lstatus = $newerr > 0 ? 'red' : 'green';
print OUT "&$lstatus $line"
}
elsif ($line =~ /^\s*Error \d+ occurred/)
{
my $lstatus = $newerr > 0 ? 'red' : 'green';
print OUT "&$lstatus $line"
}
elsif ($line =~ /^\s*#\s*\d+\s+(Conveyance offline|Extended offline|Short offline|Extended captive)\s+(.*)\s+\d+%\s+(\d+)/)
{
my $status = $2;
my $lifetime = $3;
my $lstatus = 'red';
$lasttest = $lifetime if (!defined($lasttest));
$lstatus = 'yellow' if ($status =~ /Aborted by host|Interrupted \(host reset\)/);
$lstatus = 'green' if ($status =~ /Completed without error|Self-test routine in progress|Interrupted \(host reset\)/);
print OUT "&$lstatus $line";
}
else
{
print OUT " $line";
}
}
# test status footer
my $lasttestage = $ponhours % 65536 - $lasttest;
my $lasttestmsg = "$lasttestage hours ago";
my $lasttestcolor = 'green';
if (!defined($lasttest))
{
$lasttestcolor = 'yellow';
$lasttestmsg = 'no test performed';
}
elsif ($lasttestage > 24 * 7)
{
$lasttestcolor = 'red';
}
elsif ($lasttestage > 24 * 2)
{
$lasttestcolor = 'yellow';
}
print OUT "&$lasttestcolor Last Self-test: $lasttestmsg\n";
# hidden output for ncv
print OUT "<!--\n$ncv\n-->\n";
}
close OUT;
}
# send cached content
{
open IN, $CACHEFILE or die "cannot open $CACHEFILE";
while (my $line = <IN>)
{
if ($line =~ /^\s*&(\S+)/)
{
$bb->color_print($1, $line);
}
else
{
$bb->print($line);
}
}
close IN;
}
$bb->send;
sub load_config
{
my $path = shift;
open C, "<$path" or return;
# print "loading config from $path\n";
while (my $line = <C>)
{
next if ($line =~ /^\s*#/);
if ($line =~ /DISKS\s*=\s*['"](.*?)["']/)
{
@disks = split(/\s+/, $1);
}
if ($line =~ /SMARTOLDERROR\[([\w\/]+)\]\s+(\d+)/)
{
$olderr{$1} = $2;
}
if ($line =~ /SMARTCACHETIME=(\d+)/)
{
$CACHETIME = $1;
}
}
close C;
}

View File

@ -0,0 +1,250 @@
#!/bin/sh
# .. vim: foldmarker=[[[,]]]:foldmethod=marker
# {{ ansible_managed | comment }}
# From ipr-cnrs.xymon role
# Source:
# https://git.ipr.univ-rennes.fr/cellinfo/scripts/src/master/xymon/plugins/client/ext/smartoverall
# NOTE: Must be run as root, so you probably need to setup sudo for this.
# This script is mostly intend to be used with Xymon and rather for devices unknown to the smartmontools base.
# Based on xymon.com's script: https://www.xymon.com/xymon-cgi/viewconf.sh?smart
# The script will scan all devices compatible with SMART and for each disk, it will: [[[
# * try to guess the expected TYPE (even megaraid,…).
# * display health status.
# * set a "clear" state for incompatible device.
# * display last selftests.
# * set a "error" state if no selftest is recorded.
# * display basic informations.
# * recommend a more advanced SMART script if the disk is known of smartmontools's database (drivedb.h) or redirect to smartmontools's FAQ if not.
# ]]]
# Things the script CAN'T do: [[[
# * ensure a recent selftest was run.
# * compare current value with vendor's one (for failure prediction or error).
# * give detail about errors.
# * Take a look to this more advance script for such features: https://github.com/skazi0/xymon-plugins/blob/master/client/ext/smart
# ]]]
# Vars [[[
debug="1"
## Colors [[[
c_redb='\033[1;31m'
c_magentab='\033[1;35m'
c_reset='\033[0m'
## ]]]
plugin_name=$(basename "${0}")
plugin_result="${XYMONTMP}/${MACHINEDOTS}.smartoverall.plugin_result"
plugin_state="${XYMONTMP}/${MACHINEDOTS}.smartoverall.plugin_state"
device_list="${XYMONTMP}/${MACHINEDOTS}.smartoverall.dscan"
## List of devices known from the smartmontools base and compatible with test logging
## This file might be used by a more advanced script such as skazi0's one
drivedb_list="${XYMONTMP}/${MACHINEDOTS}.smart.drivedb.list"
# ]]]
# Functions
## Test if a disk really support SMART [[[
## Smartctl can give an health status even without a full support
## of SMART for some type (eg. scsi or megaraid).
## Exemple: SMART support is: Unavailable - device lacks SMART capability.
is_disk_support_smart() {
_disk="${1}"
_type="${2}"
_smarctl_support_result="${XYMONTMP}/${MACHINEDOTS}.smartoverall.support.$(basename "${_disk}")"
smart_support_msg=""
[ "${debug}" -eq "0" ] && printf "${c_magentab}%-6b${c_reset}\n" "DEBUG: is_disk_support_smart func check if SMART is supported on: ${_disk}."
## Create or empty previous file
true > "${_smarctl_support_result}"
## Grep only "support" lines from disk's informations
smartctl -d "${_type}" -i -- "${_disk}" | grep -E "^SMART support is:" -- >> "${_smarctl_support_result}"
## If the file is not empty
if test -s "${_smarctl_support_result}"; then
## Parse all "support" lines
while IFS= read -r _LINE; do
if ! printf -- '%s' "${_LINE}" | grep -q -E -- "(Enabled|Available)"
then
smart_support_msg="${_LINE}"
fi
done < "${_smarctl_support_result}"
else
smart_support_msg="smartctl was not able to open ${_disk} DEVICE with ${_type} TYPE."
fi
if [ -z "${smart_support_msg}" ]; then
[ "${debug}" -eq "0" ] && printf "${c_magentab}%-6b${c_reset}\n" "DEBUG: is_disk_support_smart func SMART seems fully supported on: ${_disk} with ${_type} type."
else
[ "${debug}" -eq "0" ] && printf "${c_magentab}%-6b${c_reset}\n" "DEBUG: is_disk_support_smart func SMART is not fully supported on: ${_disk} with ${_type} type. See smartctl informations:\n${smart_support_msg}"
fi
## Clean temp files
### As the Xymon's tmpdir is used to store log files, no need to delete them at
### the end of the script. They will be emptied at the beginning of the next run.
}
## ]]]
## Test the type of disk with smartctl [[[
## Cause the scanned one might not be the one to use
choose_correct_type() {
_disk="${1}"
_scanned_type="${2}"
_default_type="auto"
TYPE=""
SMART_SUPPORT_MSG=""
for test_type in "${_default_type}" "${_scanned_type}"; do
is_disk_support_smart "${_disk}" "${test_type}"
## If no message, the type is correct
if [ -z "${smart_support_msg}" ]; then
TYPE="${test_type}"
SMART_SUPPORT_MSG=""
return
else
SMART_SUPPORT_MSG="${smart_support_msg}"
fi
done
}
## ]]]
# Create or empty previous files
true > "${plugin_result}"
true > "${plugin_state}"
true > "${device_list}"
true > "${drivedb_list}"
# Get the list of all available devices
smartctl --scan >> "${device_list}"
# If the file is not empty
if test -s "${device_list}"; then
while IFS= read -r LINE; do
## Get device path
DISK=$(echo "${LINE}" | cut -d" " -f1)
## Try to determine the best type
SCANNED_TYPE=$(echo "${LINE}" | cut -d" " -f3)
choose_correct_type "${DISK}" "${SCANNED_TYPE}"
## If no correct type was found for this device
if [ -z "${TYPE}" ]; then
[ "${debug}" -eq "0" ] && printf "${c_magentab}%-6b${c_reset}\n" "DEBUG: SMART is not fully supported."
DRES=$(printf '%s' "SMART Health Status can't be determine because of:\n${SMART_SUPPORT_MSG}")
DCODE="2"
TYPE="unsupported"
### Still try to display informations about unsupported device (eg. RAID controller,…)
DID="unsupported-${DISK}"
DINFO=$(smartctl -i -d "${SCANNED_TYPE}" "${DISK}" | grep -v -E "^smartctl|^Copyright|^$" || printf '%s' "Can't get informations due to no SMART support.")
DDRIVEDB_MSG=""
DSELFTEST=""
else
[ "${debug}" -eq "0" ] && printf "${c_magentab}%-6b${c_reset}\n" "DEBUG: SMART seems fully supported, proceed normally."
### Get SMART Health Status and return code
DRES=$(/usr/sbin/smartctl -H -d "${TYPE}" -n standby "${DISK}")
DCODE=$?
### Get disk's serial number and informations
DID=$(smartctl -i -d "${TYPE}" "${DISK}" | awk '/.erial .umber:/ { print $NF }')
DINFO=$(smartctl -i -d "${TYPE}" "${DISK}" | grep -v -E "^smartctl|^Copyright|^$")
## If the model of the disk is known from smartmontools database
if smartctl -d "${TYPE}" -P show "${DISK}" | grep -qi -- "drive found in"; then
DDRIVEDB_MSG="&green Device is known in smartmontools database. You might consider using a more advanced plugin such as:
https://github.com/skazi0/xymon-plugins/blob/master/client/ext/smart"
else
DDRIVEDB_MSG="&clear Device is unknown or not complete in smartmontools database. Please take a look to the FAQ:
https://www.smartmontools.org/wiki/FAQ#SmartmontoolsDatabase"
fi
DSELFTEST=$(smartctl -d "${TYPE}" -l selftest "${DISK}" | grep -v -E -- "^smartctl|^Copyright|^$")
## If no selftest have been recorded
if smartctl -d "${TYPE}" -l selftest "${DISK}" | grep -qi -- "No self-tests"; then
DSELFTEST_MSG="&red No self-tests recorded:"
DCODE="8"
## If the device doesn't support test logging
elif smartctl -d "${TYPE}" -l selftest "${DISK}" | grep -qEi -- "does not support.*logging"; then
DSELFTEST_MSG="&clear Test logging are not supported:"
else
DSELFTEST_MSG=""
### If the device is also known from smartmontools database
if printf -- '%s' "${DDRIVEDB_MSG}" | grep -q -E -- "green"
then
echo "${DISK}" >> "${drivedb_list}"
fi
fi
fi
## Test health status
DSTBY=$(( DCODE & 2 ))
DFAIL=$(( DCODE & 8 ))
DWARN=$(( DCODE & 32 ))
## According to health, give a weight to each color to easily get the page status
if test $DSTBY -ne 0
then
COLOR="4&clear"
elif test $DFAIL -ne 0
then
COLOR="1&red"
elif test $DWARN -ne 0
then
COLOR="2&yellow"
else
COLOR="3&green"
fi
## Avoid duplicate device
if ! grep -q "${DID}" "${plugin_result}"; then
## For summary
echo "${COLOR} $DISK ${TYPE}"
## For detailed informations
{
echo "${COLOR} $DISK ${TYPE}" | cut -c2-
echo ""
echo "$DRES" | grep -v -E "^smartctl|^Copyright|^$|^==="
echo "${DDRIVEDB_MSG}"
echo "${DINFO}"
echo "${DSELFTEST_MSG}"
echo "${DSELFTEST}" | head -n6
echo "------------------------------------------------------------"
echo ""
echo ""
} >> "${plugin_result}"
fi
done < "${device_list}" >> "${plugin_state}"
# If the file is empty
else
echo "1&red Error while scanning devices with smartctl" >> "${plugin_state}"
fi
# Set the global color according to the highest alert
COLOR=$(< "${plugin_state}" awk '{print $1}' | sort | uniq | head -1 | cut -c3-)
# Send informations to Xymon server
$XYMON "${XYMSRV}" "status ${MACHINE}.${plugin_name} ${COLOR} SMART health check
$(< "${plugin_state}" cut -c2-)
==================== Detailed status ====================
$(cat "${plugin_result}")
"
# Clean temp files
## As the Xymon's tmpdir is used to store log files, no need to delete them at
## the end of the script. They will be emptied at the beginning of the next run.
exit 0

View File

@ -1,4 +1,8 @@
#!/bin/ksh
# {{ ansible_managed | comment }}
# From ipr-cnrs.xymon role
# Revision History:
# 1. Mike Rowell <Mike.Rowell@Rightmove.co.uk>, original
# 2. Uwe Kirbach <U.Kirbach@EnBW.com>
@ -118,6 +122,6 @@ then
fi
# What: Sent out the final bb message to hobbit server.
$XYMON $XYMONSRV $XYMONSERVERS "status $MACHINE.$TEST $DISPCOLOR `date` $FIRST_LINE $STRING"
echo "$XYMON $XYMONSRV $XYMONSERVERS --debug status $MACHINE.$TEST $DISPCOLOR `date` $FIRST_LINE $STRING" > /tmp/xymon_zfs
echo "$XYMON $XYMONSRV $XYMONSERVERS --debug status $MACHINE.$TEST $DISPCOLOR `date` $FIRST_LINE $STRING" > /tmp/xymon_cli__zfs
$XYMON $XYMONSRV $XYMONSERVERS "data $MACHINE.$TEST $DISPCOLOR $(echo; echo "$DATA" ;echo;echo)"

View File

@ -1,5 +1,7 @@
---
# vars file for Debian-based distros
xymon_cli_pkg_list:
xymon_cli__pkg_list:
- xymon-client
xymon_cli__plug_pkg_list:
- hobbit-plugins