<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.8 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kaestle-monitoring-plugins-interface-04" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.1 -->
  <front>
    <title abbrev="MPI">The Monitoring Plugins Interface</title>
    <seriesInfo name="Internet-Draft" value="draft-kaestle-monitoring-plugins-interface-04"/>
    <author fullname="Lorenz Kästle">
      <organization>The Monitoring Plugins Project</organization>
      <address>
        <email>lorenz@vulgrim.de</email>
      </address>
    </author>
    <date year="2024" month="March" day="22"/>
    <keyword>monitoring</keyword>
    <abstract>
      <?line 33?>

<t>This document aims to document the Monitoring Plugin Interface, a standard more or less
strictly implemented by different network monitoring solutions.
Implementers and Users of network monitoring solutions, monitoring plugins and libraries can use
this as a reference point as to how these programs interface with each other.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-kaestle-monitoring-plugins-interface/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/RincewindsHat/rfc-monitoring-plugins-interface"/>.</t>
    </note>
  </front>
  <middle>
    <?line 40?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Maintaining computer networks and providing services to machines, networks and humans is
a complex task.
Building infrastructures from the start commonly demands huge know-how in different technologies,
but maintaining them afterwards is in many cases often more demanding.
Complex system can fail in a multitude of different way, where the original problem might lead
to symptoms which are often not immediately obvious and likely occur in a different place relative
to the problem.</t>
      <t>To ensure continuous and reliable operation the state and the functionality has to monitored
permanently with appropriate tools.
These monitoring tools allow an operator, often a system and/or network administrator to
read the state of the whole system (or specific subsystems) and detect problems when they
occur.</t>
      <t>The purpose of monitoring tools is therefore to determine the state of the systems in question
and detect possible anomalies or problems, measuring performance related metrics, process that data,
produce a human tangible representation and take action according to certain rules,
notify a system administrator for example.
A system implementing most or all of those tasks is called a "monitoring system" in the following.</t>
      <t>With the emergence of NetSaint/Nagios at the latest, a group of network
monitoring systems
have relied on a loose group of programs called "Monitoring Plugins" to do the lower level
task of actually determining the state of a particular entity or conduct measurements of certain
values.</t>
      <t>The same interface was implemented by several different monitoring solutions,
including, without claiming completeness, Icinga, Icinga2, Shinken, Naemon, Centreon
and Opsview.</t>
      <t>On the other side of this interface there are hundreds of individual plugins
developed by different people in different languages for a multitude of purposes.</t>
      <t>Examples for these are:</t>
      <ul spacing="normal">
        <li>
          <t>The monitoring plugins <eref target="https://www.monitoring-plugins.org/"/></t>
        </li>
        <li>
          <t>The nagios plugins <eref target="https://nagios-plugins.org/"/></t>
        </li>
        <li>
          <t>Several monitoring plugins by Consol <eref target="https://labs.consol.de/de/nagios/"/></t>
        </li>
        <li>
          <t>Several monitoring plugins by Linuxfabrik <eref target="https://github.com/Linuxfabrik/monitoring-plugins"/></t>
        </li>
        <li>
          <t>Several monitoring plugins by Davide Madrisan <eref target="https://github.com/Linuxfabrik/monitoring-plugins"/></t>
        </li>
      </ul>
      <t>This document shall serve administrators of those monitoring systems and
especially developers of these monitoring plugins
and monitoring systems as a basis
on how this interface should implemented, how the plugins should work and how they should behave.
It encourages the standardization of libraries, monitoring plugins and monitoring systems,
to reduce the cognitive load on administrators and developers, when they work with
different implementations.</t>
      <artwork><![CDATA[
+--------------------+
| Visualisation tool +------------+
+--------------------+            |
                                  |
                           +-----------------+  exec  +-------------------+
                           | Monitoring tool +--------+ Monitoring Plugin |
                           +-----------------+        +-------------------+
+--------------------+            |
| Notification tool  +------------+
+--------------------+
]]></artwork>
      <t>This document aims to be as general as possible and not to assume a special
implementation detail, e.g. the programming language, the install mechanism or the monitoring
system which executes the monitoring plugin.</t>
      <section anchor="wording-context-and-scope">
        <name>Wording, Context and Scope</name>
        <section anchor="wording">
          <name>Wording</name>
          <section anchor="monitoring-system">
            <name>Monitoring system</name>
            <t>A <em>monitoring system</em> is a collection of software components which serve the
purpose of providing the system administrator of a particular system
with an overview of the whole system.
This ideally includes all of the devices, machines and components and their state
as well as insights on particular components.</t>
            <t>Most of the system mentioned here (for example Icinga, Naemon and Nagios) also
provide a functionality to send notifications to the system administrator
when something goes wrong, e.g. a particular component does not respond anymore
or a certain threshold is exceeded.</t>
            <t>For the purpose of this document a monitoring system is just "the thing that executes a monitoring plugin".</t>
          </section>
          <section anchor="monitoring-plugin">
            <name>Monitoring plugin</name>
            <t>A monitoring plugin is a standalone executable, which is executed by the
monitoring systems to conduct one or multiple tests on behalf of the
monitoring system.</t>
            <t>The monitoring plugin does not rely on functionality provided by the monitoring
system and is not a builtin of the monitoring system or linked against
certain components of the monitoring system.
Therefore it can also be executed manually and independently of a particular
monitoring system.</t>
            <t>The monitoring plugin can therefor be implemented independently of the monitoring
system, it does not share necessarily share dependencies, the programming language
or the distribution mechanism or other components with the monitoring system.</t>
            <t>The monitoring plugin <bcp14>MAY</bcp14>
accept parameters in the form of command line arguments, environment variables
or configuration files (the location of which <bcp14>MAY</bcp14> in turn be given on the
command line or via environment variable).</t>
            <t>The monitoring plugin then proceeds
to execute its duty and returns the result to the Monitoring System. Part of
the process of returning the result is the termination of the execution of the
Monitoring Plugin itself.</t>
            <t>The execution of a monitoring plugin is typically short lived (in the order of seconds
or milliseconds) and, while some implementations store some state on non-volatile memory
to be able to reason over several execution cycles, this is not considered best practice.
A monitoring plugin can not depend on any information other that which was given by the
calling monitoring system, since the monitoring system might execute the plugin from a
different system in the next cycle or switch between multiple systems.</t>
            <t>A reasonable approach to thinking about monitoring plugins is to picture a "snapshot"
of a current state, each execution independent from the others and wholly dependent on the
input parameters and the "thing" that is to be monitored.</t>
            <t>This "thing" which is to be monitored is not, in principle, restricted to any specific aspect
of IT systems, apart from the restrictions above and the general concept.
Examples for areas which are difficult to cover whith this approach, are statistical analyses
of time series data or event monitoring, such as log monitoring.
However querying system, which are collecting and processing this kind of data, would be
a valid indirection.</t>
            <t>A popular example for this behaviour is the extraction of bandwith usage on most switches.
Commonly this is only exposed as counters for each network interface, one for outgoing and one
for incoming bytes.
The absolute value of bytes is practically useless without knowing the value which was read
previously and the time difference between the probes.
In this scenario, different workaround are possible, if the device itself does not provide the rate
values:</t>
            <ul spacing="normal">
              <li>
                <t>The monitoring plugin queries the values several times during its execution cycle with a know
 time difference between the queries, which allows rate calculation in this (typically) short time
 frame. Nothing is know effectively about the time between execution cycles.</t>
              </li>
              <li>
                <t>The monitoring system executes the monitoring plugin with the data and date of the last execution as parameter,
 which allows for proper rate calculation.</t>
              </li>
              <li>
                <t>A system queries the devices regularly for the absolute values and stores them. The monitoring
 plugin then queries this system for the collected values (and timestamps) or directly for a statistical
 analysis</t>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="scope">
          <name>Scope</name>
          <t>The scope of this document is limited to the interaction of a monitoring system
and a monitoring plugin, meaning the interface connecting them.</t>
          <t>It does not attempt to describe the inner workings of a specific implementation
of either monitoring system or monitoring plugin.</t>
        </section>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<section anchor="def_range_expression">
        <name>Range expressions</name>
        <t>In many cases thresholds for metrics mark a certain range of values where the
values are considered to be good or bad depending on whether they are inside or outside of this range. For a
significant number of metrics an upper (e.g. load on unixoid systems) or lower
(e.g. effective throughput, free space in memory or storage) border might
suffice, for some it does not, for example a temperature value from a
temperature sensor should be within certain range (e.g. between 10℃ and 45℃).</t>
        <t>Regarding input parameters this might be handled with options like
<tt>--critical-upper-temperature</tt> and <tt>--critical-lower-temperature</tt>, but this
creates a problem in the performance data output, if only scalar values could be
used. To resolve this situation the <em>Range expression</em> format was introduced,
with the following definition:</t>
        <artwork><![CDATA[
range-expression = [direction-switch] bounds

bounds = (lower-bound / upper-bound) / lower-bound upper-bound

direction-switch = "@"

lower-bound = NUMERAL ":"

upper-bound = NUMERAL

NUMERAL = ["-"] 1*DIGIT [ "." 1*DIGIT ] ; numerical value, either integer or floating point
]]></artwork>
        <t>where:</t>
        <ol spacing="normal" type="1"><li>
            <t>At least <tt>start</tt> or <tt>end</tt> <bcp14>MUST</bcp14> be provided.</t>
          </li>
          <li>
            <t><tt>start</tt> &lt;= <tt>end</tt></t>
          </li>
          <li>
            <t>If <tt>start</tt> == 0, then <tt>start</tt> can be omitted.</t>
          </li>
          <li>
            <t>If <tt>end</tt> is omitted, it has the "value" of positive infinity.</t>
          </li>
          <li>
            <t>Negative infinity can be specified with the tilde character <tt>~</tt>.</t>
          </li>
          <li>
            <t>If the prefix <tt>@</tt> IS given, the value exceeds the threshold if it is INSIDE the range between <tt>start</tt> and <tt>end</tt> (including the endpoints).</t>
          </li>
          <li>
            <t>If the prefix <tt>@</tt> is NOT given, the value exceeds the threshold if it is OUTSIDE of the range between <tt>start</tt> and <tt>end</tt> (including the endpoints).</t>
          </li>
        </ol>
        <section anchor="examples">
          <name>Examples</name>
          <table>
            <thead>
              <tr>
                <th align="left">Range definition</th>
                <th align="left">Exceeds threshold if x...</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">10</td>
                <td align="left">&lt; 0 or &gt; 10, (outside the range of {0 .. 10})</td>
              </tr>
              <tr>
                <td align="left">10:</td>
                <td align="left">&lt; 10, (outside {10 .. ∞})</td>
              </tr>
              <tr>
                <td align="left">~:10</td>
                <td align="left">&gt; 10, (outside the range of {-∞ .. 10})</td>
              </tr>
              <tr>
                <td align="left">10:20</td>
                <td align="left">&lt; 10 or &gt; 20, (outside the range of {10 .. 20})</td>
              </tr>
              <tr>
                <td align="left">@10:20</td>
                <td align="left">≥ 10 and ≤ 20, (inside the range of {10 .. 20})</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="input-parameters-for-a-monitoring-plugin">
      <name>Input Parameters for a Monitoring Plugin</name>
      <t>A Monitoring Plugin <bcp14>MUST</bcp14> expect input parameters as arguments during
execution, if any are needed/expected at all. It <bcp14>MAY</bcp14> accept these parameters
given as <em>environment variables</em> and it <bcp14>MAY</bcp14> accept them in a configuration file
(with a default path or a path given via arguments or <em>environment variables</em>).</t>
      <t>In general positional arguments are strongly discouraged.</t>
      <t>Some arguments <bcp14>MUST</bcp14> have this predetermined meaning, if they are used:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Argument (long)</th>
            <th align="left">Argument (short version, optional)</th>
            <th align="left">Argument</th>
            <th align="left">Meaning</th>
            <th align="left">optional</th>
            <th align="left">can be given multiple times</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">--help</td>
            <td align="left">-h</td>
            <td align="left">None</td>
            <td align="left">Triggers the help functionality of the Monitoring Plugin, showing the individual parameters and their meaning, examples for usage of the Monitoring Plugin and general remarks about the how and why of the Monitoring Plugin. <bcp14>SHOULD</bcp14> overwrite all other options, meaning, they are ignored if <tt>--help</tt> is given. The Monitoring Plugin <bcp14>SHOULD</bcp14> exit with state UNKNOWN (3).</td>
            <td align="left">no</td>
            <td align="left">-- (makes no difference)</td>
          </tr>
          <tr>
            <td align="left">--version</td>
            <td align="left">-V</td>
            <td align="left">None</td>
            <td align="left">Shows the version of the Monitoring Plugin to allow users to report errors better and therefore help them and the developers. The Monitoring Plugin <bcp14>SHOULD</bcp14> exit with state UNKNOWN (3).</td>
            <td align="left">no</td>
            <td align="left">-- (makes no difference)</td>
          </tr>
          <tr>
            <td align="left">--timeout</td>
            <td align="left">-t</td>
            <td align="left">Integer (meaning seconds) or a time duration string</td>
            <td align="left">Sets a limit for the time which a Monitoring Plugin is given to execute. This is there to enforce the abortion of the test and improve the reaction time of the Monitoring System (e.g. in bad network conditions it might be helpful to abort the test prematurely and inform the user about that, than trying forever to do something which won't succeed. Or if soft real time constraints are present, a result might be worthless altogether after some time). A sane default is probably 30 seconds, although this depends heavily on the scenario and should be given a thought during development. If the execution is terminated by this timeout, it should exit with state UNKNOWN (3) and (if possible) give some helpful output in which stage of the execution the timeout occurred.</td>
            <td align="left">no</td>
            <td align="left">no</td>
          </tr>
          <tr>
            <td align="left">--hostname</td>
            <td align="left">-H</td>
            <td align="left">String, meaning either a DNS nameor an IP address of the targeted system</td>
            <td align="left">If the Monitoring Plugin targets exactly one other system on the network, this option should be used to tell it which one. If the Monitoring Plugin does its test just locally or the logic does not apply to it, this option is, of course, optional.</td>
            <td align="left">yes</td>
            <td align="left">no</td>
          </tr>
          <tr>
            <td align="left">--verbose</td>
            <td align="left">-v</td>
            <td align="left">None</td>
            <td align="left">Increases the verbosity of the output, thereby breaking the suggested rules about a short and concise output. The intention is to provide more information to a user.</td>
            <td align="left">yes</td>
            <td align="left">yes</td>
          </tr>
          <tr>
            <td align="left">--exit-ok</td>
            <td align="left"> </td>
            <td align="left">The Monitoring Plugin exits unconditionally with OK (0). Mostly useful for the purpose of packaging and testing plugins, but might be used to always ignore errors (e.g. to just collect data).</td>
            <td align="left">yes</td>
            <td align="left">no</td>
            <td align="left"> </td>
          </tr>
        </tbody>
      </table>
      <section anchor="examples-1">
        <name>Examples</name>
        <t>For the execution with <tt>--help</tt>:</t>
        <artwork><![CDATA[
$ my_check_plugin --help
]]></artwork>
        <t>the output might look like this:</t>
        <artwork><![CDATA[
my_check_plugin version 3.1.4
Licensed under the AGPLv1.
Repository: git.example.com/jdoe/my_check_plugin

This plugin just says hello. It fails if you don't give it a name.

Usage:
 my_check_plugin --name NAME [--greeting GREETING]

Options:
 --help
   this help
 --version
   Shows the version of the plugin
 --name NAME
   if given, uses NAME as a name to greet.
 --greeting GREETING
   if given, uses GREETING instead of Hello.

Examples:
$ my_check_plugin --name Jane
Hello Jane

$ my_check_plugin --greeting Ciao --name Alice
Ciao Alice
]]></artwork>
        <t>This imaginary Monitoring Plugin tries to be really helpful here, displays
the version, the license and the upstream repository with the help (although
not necessary), has a short description about the purpose, lists the options in
an easily readable way and even gives some examples.</t>
        <t>For the execution with <tt>--version</tt></t>
        <artwork><![CDATA[
$ my_check_plugin --version
]]></artwork>
        <t>the output might be a bit shorter:</t>
        <artwork><![CDATA[
my_check_plugin version 3.1.4
]]></artwork>
        <t>or even:</t>
        <artwork><![CDATA[
3.1.4
]]></artwork>
        <t>where both show the necessary information.</t>
      </section>
    </section>
    <section anchor="output-of-a-monitoring-plugin">
      <name>Output of a Monitoring Plugin</name>
      <t>The output of a Monitoring Plugin consists of two parts on the first level, the
<em>Exit Code</em> and output in textual form on <em>stdout</em>.</t>
      <section anchor="exit-code">
        <name>Exit Code</name>
        <t>The Monitoring Plugin <bcp14>MUST</bcp14> make use of the <em>Exit Code</em> as a
method to communicate a result to the Monitoring System. Since the <em>Exit
Code</em> is more or less standardized over different systems as an integer number
with a width of or greater than 8bit, the following mapping is used:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Exit Code (numerical)</th>
              <th align="left">Meaning (short)</th>
              <th align="left">Meaning (extended)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">OK</td>
              <td align="left">The execution of the Monitoring Plugin proceeded as planned and the tests appeared to function properly and the measured values are within their respective thresholds</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">WARNING</td>
              <td align="left">The execution of the Monitoring Plugin proceeded as planned and the tests appeared to <em>not</em> function properly or the measured values are <em>not</em> with their respective thresholds. The problem(s) do(es) <em>not</em> seem exceptionally grave though and do(es) <em>not</em> require immediate attention</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">CRITICAL</td>
              <td align="left">The execution of the Monitoring Plugin proceeded as planned and the tests appeared to <em>not</em> function properly or the measured values are <em>not</em> with their respective thresholds. The problem(s) <em>do(es)</em> seem exceptionally grave though and <em>do(es)</em> require immediate attention</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">UNKNOWN</td>
              <td align="left">The execution of the Monitoring Plugin <em>did not</em> proceed as planned. The reasons might be manifold, e.g. missing permissions, missing libraries, no available network connection to the destination, etc.. In summary: The Monitoring Plugin could <em>not</em> determine the state of whatever it should have been checking and can therefore make no reliable statement about it.</td>
            </tr>
            <tr>
              <td align="left">4-125</td>
              <td align="left">reserved for future use</td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="textual-output">
        <name>Textual Output</name>
        <t>The textual output should consist of printable characters end of this output is marked by EOF.
There is no length limitation per se, but it a limit of 512kiB would be reasonable and should not
be exceeded to avoid influencing the performance of the monitoring system, also some system
might limit the output arbitrarily.</t>
        <t>The original purpose of the output on <em>stdout</em> was to provide information
for the user of the Monitoring System in a free text form; a way for the Monitoring
Plugin to communicate further details on what happened and what the current state is. This purpose still
exists, but was expanded with the, so called, performance data to
allow the machine readable communication of measured values for further
processing in the Monitoring System, e.g. for the creation of diagrams.</t>
        <t>Therefore the further explanation is split into <em>free form output</em> and
<em>performance data</em>.
The general schema is the following:</t>
        <artwork><![CDATA[
output = free-form-part *1( separator performance-data )

separator = "|"

unicode-without-separator = %x0A-7B / %x7D-10FFFF ; UTF-8 encoded unicode code point without "|"

free-form-part = *unicode-without-separator

labelchar = %x0A-1f / %x21-10FFFF ; UTF-8 encoded unicode code point without " "

labelstring-with-space = labelchar ( " " / labelchar ) labelchar ; no spaces at beginning or end

label = 1*labelchar / "'" labelstring-with-space "'" ; if the label contains spaces, surround it with '

UOM = 1*CHAR ; unit of measurement, a common unit specifier like "B" for Bytes or "s" for seconds

warning-value = range-expression
critical-value = range-expression
min-value = NUMERAL
max-value = NUMERAL

performance-data-value = label "=" NUMERAL *1( UOM ) *1( ";" *1warning_value *1( ";" *1critical-value *1( ";" *1min-value *1( ";" max-value ))))

performance-data = *performance-data-value *( " " performance-data-value )

]]></artwork>
        <section anchor="free-form-output">
          <name>Free form output</name>
          <t>This part of the output should give an user information about the state of the
test and, in the case of problems, ideally hint what the origin of the problem
might be or what the symptoms are. If the test relies on numeric values, this
might be displayed to give an user more information about the specific problem.
It might consist of one or more lines (separated by CRLF or LF) of unicode symbols.
Considering the age and implementation of current systems, restricting the output
to US-ASCII characters is a safe choice.</t>
          <t>Although no strict guidelines for creating this part of the output can really
be given due to its free form character, a developer should keep a potential reader in mind. It might, for
example, be OK to put the output in a single line if there are only one or two
items of a similar type (think: multiple file systems, multiple sensors, etc.)
are present, but not if there 10 or 100, although this might present a valid
use case. If there are several different items exists in the output of the
Monitoring Plugin they probably <bcp14>SHOULD</bcp14> be given their own line in the output.</t>
          <t>The free form part is not intented for deep diagnostics, logging or too detailed
reports, therefore it should be kept rather short.</t>
          <section anchor="examples-2">
            <name>Examples</name>
            <artwork><![CDATA[
Remaining space on filesystem "/" is OK

Sensor temperature is within thresholds

Available Memory is too low

Sensore temperature exceeds thresholds
]]></artwork>
            <t>are OK, but</t>
            <artwork><![CDATA[
Remaining space on filesystem "/" is OK ( 62GiB / 128GiB )

Sensor temperature is within thresholds ( 42°C )

Available Memory is too low ( 126MiB / 32GiB )

Sensor temperature exceeds thresholds ( 78°C > 70°C )
]]></artwork>
            <t>are better.</t>
          </section>
        </section>
        <section anchor="performance-data">
          <name>Performance data</name>
          <t>In addition to the free form part the output can
contain machine readable measurement values.</t>
          <t>In addition to the format definition earlier, the following contains
some constaints and best practices:</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>label</tt> <bcp14>MUST</bcp14> consist of at least one non-space character, but can otherwise
contain any printable characters except for the equals sign (<tt>=</tt>) or single
quotes (<tt>'</tt>). If it contains spaces, it must be surrounded by single quotes</t>
            </li>
            <li>
              <t><tt>value</tt> is a numerical value, might be either an integer or a floating
point number. Using floating point numbers if the value is really discreet
<bcp14>SHOULD</bcp14> be avoided. The representation of a floating point number
<bcp14>SHOULD NOT</bcp14> use the "scientific notation" (e.g. <tt>6.02e23</tt> or <tt>-3e-45</tt>),
since some systems might not be able to parse them correctly. Values
with a base other then 10 <bcp14>SHOULD</bcp14> be avoided (see below for more information
on <tt>Byte</tt> values).</t>
            </li>
            <li>
              <t><tt>UOM</tt> is the <em>Unit of measurement</em> (e.g. "B" for <em>Bytes</em>, "s" for seconds)
 which gives more context to the Monitoring System.  </t>
              <ul spacing="normal">
                <li>
                  <t>The following constraints <bcp14>MUST</bcp14> be applied:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>An <tt>UOM</tt> of <tt>%</tt> <bcp14>MUST</bcp14> be used for percentage values</t>
                    </li>
                    <li>
                      <t>An <tt>UOM</tt> of <tt>c</tt> <bcp14>MUST</bcp14> be used for continuous counters (commonly used
for the sum of bytes transmitted on an interface)</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>The following recommendations <bcp14>SHOULD</bcp14> be applied:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>The <tt>UOM</tt> for <tt>Byte</tt> values is <tt>B</tt> and although many systems do
understand units like <tt>KB</tt>,<tt>KiB</tt>, <tt>MB</tt>, <tt>GB</tt>, <tt>TB</tt> they <bcp14>SHOULD</bcp14> be
avoided, at the least to avoid the ugly hassle about people
misinterpreting the <em>base10</em> values as <em>base2</em> values and the other way
round. This is also a prime example where floating point number <bcp14>SHOULD
NOT</bcp14> be used, since there are obviously only integer numbers included.</t>
                    </li>
                    <li>
                      <t>The <tt>UOM</tt> for time is <tt>s</tt>, meaning seconds, SI-Prefixes (e.g. <tt>ms</tt> for
milli seconds) are allowed if necessary or useful.</t>
                    </li>
                    <li>
                      <t>In general, SI units and SI prefixes <bcp14>MAY</bcp14> be used as <tt>UOM</tt> if
applicable, but the Monitoring System may not understand them correctly
(mostly in uncommon cases), in that cases appropriate workarounds <bcp14>MAY</bcp14> be
applied on the side of the Monitoring Plugin. Since the
values are not intented to be human readable, normalized units are
recommended (e.g. <tt>overall_power=14000000000W</tt> instead of
<tt>overall_power=14GW</tt>)</t>
                    </li>
                    <li>
                      <t><tt>warn</tt> and <tt>crit</tt> are the threshold values for this measurement, which may
have been given by the user as input, may be hardcoded in the Monitoring
Plugin or may be retrieved from a file or a device or somewhere else
during the execution of the Monitoring Plugin. The unit used <bcp14>MUST</bcp14> be
the same as for <em>value</em>. These values are not simple numbers, but
range expressions (<xref target="def_range_expression"/>).</t>
                    </li>
                    <li>
                      <t><tt>min</tt> and <tt>max</tt> are the minimal respectively the maximal value the
<tt>value</tt> could possibly be. The unit <bcp14>MUST</bcp14> be the same as for <tt>value</tt>.
These values can be omitted, if the <tt>value</tt> is a percentage value,
since <tt>min</tt> and <tt>max</tt> are always <tt>0</tt> and <tt>100</tt> in this case.</t>
                    </li>
                  </ol>
                </li>
              </ul>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>The interface metioned here is implemented by several network monitoring systems. A non-exhaustive
list of these systems includes:</t>
      <ul spacing="normal">
        <li>
          <t>Icinga 2</t>
        </li>
        <li>
          <t>Naemon</t>
        </li>
        <li>
          <t>Nagios</t>
        </li>
      </ul>
      <t>The other side of the interface is implemented by several different projects, again in an non-exhaustive
list:</t>
      <ul spacing="normal">
        <li>
          <t>The Monitoring Plugins Project</t>
        </li>
        <li>
          <t>The Nagios Plugins Project</t>
        </li>
        <li>
          <t>The Linuxfabrik Monitoring Plugins</t>
        </li>
        <li>
          <t>Madrisan Nagios Plugins</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Special security considerations are hard to define regarding this topic. Regarding the implementation
of this interface, the usual programming security considerations should apply (e.g. sanitize inputs),
but the risks and problems regarding security are dependent on the specific implementation and usage.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 551?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks for previous have to be said to the original inventors of this interface, although
it is not easy to determine who these persons are, so they are mentioned here in general.</t>
      <t>Thanks are going also to the many different implementors on either side of this interface for
their hard work which allows the use of different components and systems with each other in the
best spirit of free software.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
PVRGRV7+yw0J4CM+cmIm1gmqwji6IxcFVWsRwM5hj28dMT6R0feyDaVoehhU
bxbxJzbnzB5eiIuKCjEcaW2CUVVWXdNwow2ZmCGQyxPzvRmsLtR3Uvkrcdlu
NI11iEpeW+JWpDNap68MDVfdXPgoQGSL+IOBGCfnM6cHKlLE7Hjy+vmXaPD8
y0M09xKD1jTmy2ueaKWdNw0QuNfEUHzmGHFlr/b8WYlwOEK76hbTEt9eDc6v
nlxcxPaRHIpMpjCaSj67Y859QgRChoeys5aAkXWAN0UT+QMIO8gGxqGEl0zI
kkxaJ+Hx2nYaKEDS5wS+Zgk92d04t0Qav2QDnnO3yYQpkDBeTDgWyajnAjyj
oZ4+9pb8XNgv7ZpJxEYJVG4uu6ICT+/z4Co03Tiyu03Gjr6UA5NxheI03K+G
A3JZcXPWZc+nWXcKqB+dC+ICv1rs80OzltSC/cE3L3kApIjk5Ph4MyElpKUd
rZ7qQFUc85QnfF3C9l0qsggxezwzdpGgZueBNk5eh1yZZmbDPooLh4pcQWE8
phqa3f4ybehxMUkrqMk/wdbCiilKlJQTlvJyNlMd1pSlGn1uYiThXPcjb6Nz
TsaonV42KLafC91UzVCPBXfVRxB8r3E5nCSAWeP5845irvYe9Lj+6RtjrqQu
My7VzOouXOHdVeKT4Ke9kOJRzpaUKPXzo7i1YdxmvVMtIhk79/IbJoq/Clay
En5x+lUGa+jk9FN8OPxg8Knvo9M//ecTdHnPQqjZyekvXvAcD0/3T7G9NOr5
yaeY4Ff2k2OZKCxWqga0SOzVht3J9TfJRDJC3t/doKh1UWPUVNm2yCM7xIZr
iXYNL9WiUXWaSypSItVmtM4bRYYdMM5Za8q62DgEWWuh5IhNBy2LjDRE4gso
IXFwOlO2OhKIYxWknPG8y2q5FNGvFUVYuz1eDpQEr8H9jpxmFMzOCnswejzi
ugeRgTze79oSltfB6GejQ5YmWbNt+qF4AHkglEmqFaiXN4kwlUGMPaX1Mp5H
oli2Ck2D7vXp4iIuOk1C2SmDJqazxFaH9i37Sut1qfqy9parmDpZ7XMbKM5C
9oSH6wQZu99d5GbtPjKW9ztniQdBcSVkMCbt1WkG/QSjgOQcD9PTfOLoF8Pj
U3f6UOpjBw/d4NHHo8M+DyUnViNP3gt7CMvoYC5RvMxE6rKs5EjO0P6GyZkH
0rDzmG2sRsvuUSy+vWSYIeA/sPa03DZ05N7Nwo5gj4+UZ1Bl+pDWQubuyDuA
12+3Tf1rXbS36a/ZqL/ub9r0h3JtjKThJVXDcKR6ccne+L3hjnJT1RpPhsoR
X3yMbHzG0XS5OQYVy4WugIAe/V1Xp8xZ4ak4pynIYOaPW2nf042+6Y6+0R2H
4ZjjQbhWEs10MM+WdbvozioS9EUt1cxyLro703S4e81EBTQ4+Xp65Dva6O2V
o6uAj9nXthbbOfpCanqD3cGHRzxJTkodiBPLnBphR07ODtjRN1+M+qNvMvpt
Ry/491f8+w2NyoZEAE3HUUrsh4vxWAqGoBiHllBYOU/qOndqecutaTrCIqvD
KSRv5R6B+k+Oj0LcuZZHp0fx2TnWG8whd8lKR2Np1hVqcXgNpxeyLnmop2F2
SgVdnw4GuaB0ER1J9wbm2J8oZapYTx7V/u4aVLp7ulvfOa6TwobVo67uJtQx
XV0MXnEBuPPFDKNFzR0D2vI868rfABEHs6Q6scstcjkl6i08IA85uKyBIEyk
BMAXDF1o2TnNioJdzxSEf5UXU7/vIMxUrlsZt1tX6WrccJGsWP5F1LYu+XS0
g4VUhmQFF5BwfIHPOx2qz5k0ev4pvhq0O4HroY2BE+5j7gwHlHaXgvqN1d5R
rmPN0JU8u9x/6W0ShPgrXLX5e+cZifp5WvRsDUkte1iyRZ9fL3Ee5PHJo2P/
8+0oKjrQ/lutv/p2pNLWPqLBEKDQAn7EJEZyrm8enwWIQpXif8ShHBHZi8A7
XW4gvqZBSwVrqS3v857yAaRqIgGyrYCnDqf+B/SSdKlw8MtxmoAPUImrxZaC
HpbW01jCoC6vPSa1Em893b9/R8FoHJ5i4lXxrkMxQaDmIhG0SHjnmjvVbnPz
a3bRPVOLUa+bu3WC7+CHH3Ye4fvx0LPex+DizO/ZIrnvtgw3PS3YJ/bJtFwv
BUru+YUYQx2VestM0kBaOAg0R8v3im1zzdrXg7W28vVzOuE0+5ohuKlb+zqQ
iMhdS9QirdGxviDXeBTOpbLry8cg1uMhV/S31TO13bHghYsv48r23kC66yZt
vdvDnrON7u7nCdnBuPA4z8KtX3V8za7cPyaH8+WqL3uKz3Ldl3zCbV+akmnW
rxqNwd4PaHSbqNx+jjJWXODEEY5iF6jdbQHvu0NdWujFtXvexpdwbo+FVuHy
zPWB+NzKFfFihfJFH+FK9Bj0ldyqB/0kDdK1BnLjKq5V5+PbU3Hz/NFHqaAt
l1k6tK+jp5t345it+1z7KrBauTk73O60DwyNO0i1p4hoWin5jL93Iu5IARmv
3ggL3YXmctlzB3OYIb5qqgkaaPcBdB6MDzsI+Z9fnm9hcv2OQ5RaFaW0lEJy
+MB8P/s4SW8wynmKGxdyN5nxqRXzw5lILzd53JuSPeR6P2LUpLjxFxzI1Rh6
soWVXJ1k4WB/yDNmfOw9XHO6jvdQHJaFCBGpmtX6fdZ381I5DIcHlA44R9f4
ExYbd+1lwVIZBqDRTG8TgXWnYLKZu+PuT4a38B7qnmuAYVZJJIyJUi4TjW+C
UD24fmf7xqWDXmpsXJ+v+tFwPKFeZpV4WnJgWS9fHJr/BsHUTswhYwAA

-->

</rfc>
