# IML Checks for Icinga / Nagios

[Home](readme.md)

---

## check EOL

### Introduction

**check_eol** is a plugin for Icinga/ Nagios. It detects the end of life of an OS or a product.

You get a status "ok", "warning" or "critical" based on the limits.

The status is "unknown" if a product or the eol date was not detected.

It is customizable / extendable to detect other products that are not included in the delivered basic config.

### Syntax

``$ check_eol [-c CRITICAL] [-w WARNING] PRODUCT VERSION``

#### Parameters

PRODUCT  set a product; known product keys are listed below
VERSION  set a version.

  Autodetection:
  There is a special handling vor version "detect".
  You can set "os" as product to detect the (linux) distribution.
  See examples below.

#### Options

  -c  set critical limit; default 90
  -w  set warning limit; default 365

### Examples

``check_eol php 7.4``
    Show end of life for given php version 7.4

``check_eol -w 100 -c 30 php 7.4``
    Add custom critical and warning limits

``check_eol os detect``
    Show end of life for current linux os. The distribution and the major version will be detected.

``check_eol php detect``
    Show the end of life for the detected php version

### Extend/ customize

The check is build to be customizable. You can add

* add your own end of life dates
* version detection for other products

#### End of life dates

The dates are defined in the files *check_eol-*.cfg*.
Those contain lines with parsed information that must start at the begin of line:

* ``[Key]:[version]:[Date as YYYY-MM-DD]:[COMMENT]``
  * Key: name of the product in lowercase, i.e. "php", "centos"
  * Version: version number, i.e. a major version i.e. "12" for Node or "7.4" for PHP
  * Date as YYYY-MM-DD
  * Comment: this is optional
* ``[Key]:METADATA for a product (can be multiline)``
  * This type is completely optional. You can use it to show general (version indepenendent) product infos. It will be shown as additional text for each version of a product

Al other lines, like empty lines, lines starting with special characters are ignored. I use the hash to mark comments.

Snippet:

    # --------------------------------------------
    centos:The CentOS Project
    centos:website https://www.centos.org/
    # --------------------------------------------

    centos:6:2020-11-30
    centos:7:2024-06-30
    centos:8:2029-05-31

Example output:

    $ check_eol centos 7
    OK [centos 7] ends on 2024-06-30 ... 1586 days left 

    The CentOS Project
    website https://www.centos.org/

    Limit Info: warn below 365 days; critical below 90 days

#### Files

* check_eol-data/os.cfg - contains eol dates for debian, centos, ubuntu
* check_eol-data/check_eol-databases.cfg - Mariadb, PostgreSql
* check_eol-data/check_eol-program-languages.cfg - Php, NodeJS

You can add your custom products and dates - it just must match *check_eol-*.cfg*. You should use a custom file name that does not conflict with delivered files.

Suggestion: *check_eol-data/custom-[my category].cfg*

#### Version detection

If you use ``check_eol [product] [version]`` with an already known version in your monitoring check then the search for an eol date is done directly in the *cfg files (see above).

If you wan to let detect the version use the keyword *detect* next to a product i.e. ``check_eol php detect``.
What happens is is uses a detection for the version number. Therefor it calls a script named *check_eol-versiondetect/detect-[PRODUCT]* - in our example for php ist is *check_eol-versiondetect/detect-php*.

The scripts *check_eol-versiondetect/detect-[PRODUCT]* must return just a major version - or major and minor version without any other text.

You can add your own scripts for other non existing products. The only rule is: it must output the version only. Your [PRODUCT] and the returned version will be scanned in *check_eol-*.cfg* to perform the eol check.