zabbix sender で、graylogからのメールの内容をzabbixに送信する

■ やること
zabbix sender の -oオプションで受け取る値に、graylogからのメールの内容を入れる

■ zabbixサーバに、メールのエンコードのためのコマンドをインストールする
# apt install nkf

■ メールエンコードのためのコマンド
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
の時、
# nkf -mQ メールファイル名 > test01.txt

■ graylogからのアラートメールをもとに、zabbix senderコマンドを生成する(シェルを書く)
□ graylog アラートメールの内容(エンコード済)
----------
検知日時: 2018-12-07T13:54:06.117Z
ホスト名: ubuntu-snort
アプリケーション名: snort
検知種別: Potentially Bad Traffic
検知内容: ”ICMP_detection”
送信元アドレス: 192.168.56.105
送信元ポート: 0
送信先アドレス: 192.168.56.107
送信先ポート: 0
プロトコル: ICMP
process_id: 1290
Facility: local0
検知レベル: 6
優先度: 6
Generator_id: 1
シグネチャ番号: 1000000
Signature_revision_id: 0
Full message: <134>0 2019-01-11T20:32:06.060812+09:00 ubuntu-snort snort 1255 - - [1:1000000:0] ”ICMP_detection” [Classification: Potentially Bad Traffic] [Priority: 6] {ICMP} 192.168.56.105 -> 192.168.56.107
----------

■ zabbixサーバでメールを受信した際、実行されるシェルスクリプト
シェルスクリプトの詳細
メールを1行ずつ読み込み、test_mail01.txtに書き出す。
test_mail01.txtを日本語化してtest_mail02.txtに書き出す。
test_mail02.txtの改行をパイプ(|)に変換し、----------を区切り文字として、graylogからのアラートメールの内容部分だけを取り出す。
取り出した文字列を全て、zabbix sender の-oオプションに渡す。

シェルスクリプト

#!/bin/bash
			
# test_mail01 ファイルを空にする
: > /test01/test_mail01.txt
			
# メールを1行ずつ読み込み、test_mail01.txtに書き出す。test_mail02.txtに日本語化したものを書き出す
while read LINE
do
	echo "$LINE" >> /test01/test_mail01.txt
done
nkf -mQ /test01/test_mail01.txt > /test01/test_mail02.txt
			
# test_mail02.txtの、----------の間に書かれた情報を取得する
MAIL2INFO=`cat /test01/test_mail02.txt | awk -v ORS='|' '1;END{printf"\n"}' | awk -F '-{10}' '{print $2}'`
echo "$MAIL2INFO" > /test01/test_mail03.txt
			
zabbix_sender -z 127.0.0.1 -s 105graylog_Ubuntu -k zstestitem02 -o "$MAIL2INFO"
logger HELLO zabbix sender