zabbixの外部チェック(externalcheck)機能を使って、自作のスクリプトで監視を行うことがあると思います。
この時スクリプトにたいして「$マーク」の含まれる引数を渡すとうまく動作しません。
原因
原因はzabbix自体のバグです。こちらのチケットで記載されていますが、zabbixで使用しているCのコードに誤りがあるとのこと。
- [ZBX-2450] no security measures are taken for external checks - ZABBIX SUPPORT
- [ZBX-9701] Special character $ doesn't pass in external check parameter - ZABBIX SUPPORT
解消法
解決方法は大きく分けて二つ。
- Cのコードを修正すること(ただしzabbixの再コンパイルが必要)
- $を使わないようにすること(スクリプト側で工夫をする)
一応Cコードの修正方法を転記しておきます。
Bug can be fixed by editing line 88 at src/zabbix_server/poller/checks_external.c
変更前
zbx_snprintf_alloc(&cmd, &cmd_alloc, &cmd_offset, " \"%s\"", param_esc);
↓
変更後
checks_external.c zbx_snprintf_alloc(&cmd, &cmd_alloc, &cmd_offset, " '%s'", param_esc);