Collectd Plugin Exec

SYNOPSIS

# See collectd.conf(5)
LoadPlugin exec
# ...
<Plugin exec>
  Exec "myuser:mygroup" "myprog"
  Exec "otheruser" "/path/to/another/binary" "arg0" "arg1"
  NotificationExec "user" "/usr/lib/collectd/exec/handle_notification"
</Plugin>

DESCRIPTION

The exec plugin forks off an executable either to receive values or to dispatch notifications to the outside world. The syntax of the configuration is explained in collectd.conf(5) but summarized in the above synopsis.

If you want/need better performance or more functionality you should take a long look at the perl plugin, collectd-perl(5).

EXECUTABLE TYPES

There are currently two types of executables that can be executed by the exec plugin:

Exec
These programs are forked and values that it writes to STDOUT are read back. The executable is forked in a fashion similar to init: It is forked once and not again until it exits. If it exited, it will be forked again after at most Interval seconds. It is perfectly legal for the executable to run for a long time and continuously write values to STDOUT.

See "EXEC DATA FORMAT" below for a description of the output format expected from these programs.

Warning: If the executable only writes one value and then exits it will be executed every Interval seconds. If Interval is short (the default is 10 seconds) this may result in serious system load.

NotificationExec
The program is forked once for each notification that is handled by the daemon. The notification is passed to the program on STDIN in a fashion similar to HTTP-headers. In contrast to programs specified with Exec the execution of this program is not serialized, so that several instances of this program may run at once if multiple notifications are received.

See "NOTIFICATION DATA FORMAT" below for a description of the data passed to these programs.

EXEC DATA FORMAT

The forked executable is expected to print values to STDOUT. The expected format is as follows:

Comments

Each line beginning with a # (hash mark) is ignored.

PUTVAL Identifier [OptionList] Valuelist

Submits one or more values (identified by Identifier, see below) to the daemon which will dispatch it to all its write-plugins.

An Identifier is of the form host/plugin-instance/type-instance with both instance-parts being optional. If they're omitted the hyphen must be omitted, too. plugin and each instance-part may be chosen freely as long as the tuple (plugin, plugin instance, type instance) uniquely identifies the plugin within collectd. type identifies the type and number of values (i. e. data-set) passed to collectd. A large list of predefined data-sets is available in the types.db file. See types.db(5) for a description of the format of this file.

The OptionList is an optional list of Options, where each option is a key-value-pair. A list of currently understood options can be found below, all other options will be ignored. Values that contain spaces must be quoted with double quotes.

Valuelist is a colon-separated list of the time and the values, each either an integer if the data-source is a counter, or a double if the data-source is of type "gauge". You can submit an undefined gauge-value by using U. When submitting Uto a counter the behavior is undefined. The time is given as epoch (i. e. standard UNIX time) or N to use the current time.

You can mix options and values, but the order is important: Options only effect following values, so specifying an option as last field is allowed, but useless. Also, an option applies to all following values, so you don't need to re-set an option over and over again.

The currently defined Options are:

interval=seconds

Gives the interval in which the data identified by Identifier is being collected.

Please note that this is the same format as used in the unixsock plugin, see collectd-unixsock(5). There's also a bit more information on identifiers in case you're confused.

Since examples usually let one understand a lot better, here are some:

PUTVAL leeloo/cpu-0/cpu-idle N:2299366
PUTVAL alice/interface/if_octets-eth0 interval=10 1180647081:421465:479194

PUTNOTIF [OptionList] message=Message

Submits a notification to the daemon which will then dispatch it to all plugins which have registered for receiving notifications.

The PUTNOTIF if followed by a list of options which further describe the notification. The message option is special in that it will consume the rest of the line as its value. The message, severity, and time options are mandatory.

Valid options are:

message=Message (REQUIRED)

Sets the message of the notification. This is the message that will be made accessible to the user, so it should contain some useful information. As with all options: If the message includes spaces, it must be quoted with double quotes. This option is mandatory.

severity=failure|warning|okay (REQUIRED)

Sets the severity of the notification. This option is mandatory.

time=Time (REQUIRED)

Sets the time of the notification. The time is given as "epoch", i. e. as seconds since January 1st, 1970, 00:00:00. This option is mandatory.

host=Hostname

plugin=Plugin

plugin_instance=Plugin-Instance

type=Type

type_instance=Type-Instance

These "associative" options establish a relation between this notification and collected performance data. This connection is purely informal, i. e. the daemon itself doesn't do anything with this information. However, websites or GUIs may use this information to place notifications near the affected graph or table. All the options are optional, but plugin_instance without plugin or type_instance without type doesn't make much sense and should be avoided.

type:key=value

Sets user defined meta information. The type key is a single character defining the type of the meta information.

The current supported types are:

s A string passed as-is.

Please note that this is the same format as used in the unixsock plugin, see collectd-unixsock(5).

When collectd exits it sends a SIGTERM to all still running child-processes upon which they have to quit.

NOTIFICATION DATA FORMAT

The notification executables receive values rather than providing them. In fact, after the program is started STDOUT is connected to /dev/null.

The data is passed to the executables over STDIN in a format very similar to HTTP: At first there is a "header" with one line per field. Every line consists of a field name, ended by a colon, and the associated value until end-of-line. The "header" is ended by two newlines immediately following another, i.e. an empty line. The rest, basically the "body", is the message of the notification.

The following is an example notification passed to a program:

Severity: FAILURE
Time: 1200928930.515
Host: myhost.mydomain.org
\n
This is a test notification to demonstrate the format

The following header files are currently used. Please note, however, that you should ignore unknown header files to be as forward-compatible as possible.

Severity

Severity of the notification. May either be FAILURE, WARNING, or OKAY.

Time

The time in epoch, i.e. as seconds since 1970-01-01 00:00:00 UTC. The value currently has millisecond precision (i.e. three decimal places), but scripts should accept arbitrary numbers of decimal places, including no decimal places.

Host

Plugin

PluginInstance

Type

TypeInstance

Identification of the performance data this notification is associated with. All of these fields are optional because notifications do not need to be associated with a certain value.

ENVIRONMENT

The following environment variables are set by the plugin before calling exec:

COLLECTD_INTERVAL

Value of the global interval setting.

COLLECTD_HOSTNAME

Hostname used by collectd to dispatch local values.

USING NAGIOS PLUGINS

Though the interface is far from perfect, there are tons of plugins for Nagios. You can use these plugins with collectd by using a simple transition layer, exec-nagios.px, which is shipped with the collectd distribution in the contrib/ directory. It is a simple Perl script that comes with embedded documentation. To see it, run the following command:

perldoc exec-nagios.px

This script expects a configuration file, exec-nagios.conf. You can find an example in the contrib/ directory, too.

Even a simple mechanism to submit "performance data" to collectd is implemented. If you need a more sophisticated setup, please rewrite the plugin to make use of collectd's more powerful interface.

CAVEATS

  • The user, the binary is executed as, may not have root privileges, i. e. must have an UID that is non-zero. This is for your own good.

  • Early versions of the plugin did not use a command but treated all lines as if they were arguments to the PUTVALcommand. When the PUTNOTIF command was implemented, this behavior was kept for lines which start with an unknown command for backwards compatibility. This compatibility code has been removed in collectd 5.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352