指定文字列の数をトリガー条件にする

初歩的な質問ですが、どなたかご教示ください。

●監視対象サーバ
- CentOS 7

●Zabbixサーバ
- Zabbix3.0.23
- CentOS 7.6

●問題
スクリプト結果に"OK"が5つ含まれない  ←つまり"OK"数が4つでも、6つでのアラート対象
もしくは、NG or WARNが含まれる

でアラート対象にしたいのですが、
うまく動きません。

↓下記指定で何か問題ありますでしょうか。

・アイテム
タイプ:SSHエージェント
キー:ssh.run[test]
実行するスクリプト:cat /tmp/test.txt
データ型:テキスト

・トリガー
条件式
{xxxx:ssh.run[test].regexp("OK",#5)}=0 or {xxxx:ssh.run[test].iregexp(NG|WARN)}=1

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー heya の写真

regexp の二つ目のパラメーター #n は、「今回のデータ内にn個あるか」というチェックをするものではなく、「過去n回分のデータのどれかに指定したパターンを含んでいるか」というチェックをするものです。

一つの regexp で実現しようとすると、かなりややこしい正規表現になりそうな気がします(ひょっとしたらできないかも)。
複数の regexp を使うなら
{~.regexp("(OK.*){5}")}=0 or {~.regexp("(OK.*){6}")}=1 or {~.iregexp("NG|WARN")}=1
といった感じでしょうか。OK が5つ含まれていない or OK が6つ以上含まれている or NG か WARN が含まれているなら障害、ということです(. が改行も含むかどうかは自信がないので、その辺は実際に試してください)。

それか、スクリプトの実行結果が「OK を5つ含むかどうか」をチェックするためだけに使われるものなら、そのスクリプトの最後の方で OK と NG/WARN の数を数えて「OK が5つで NG 無しなら 0、そうでなければ 1」を出力するように改造するという手もあります。この場合、アイテムのデータ型は数値(整数)になります。
スクリプトの実行結果がこのチェック以外にも使われるなら、スクリプトの出力を別のスクリプトにも渡して(tee コマンドを使うと楽)、そちらで OK と NG/WARN の数を数えて、あとは上記のように出力すればいいです。