なぜNATのセッション数?
最近1台あたりの通信機器が使うセッション数が増加傾向にある。文科省の資産だとWeb授業をそうていすると、1台あたり100セッションは見ておいた方がよいようです。
参考資料
新時代の学びにおける先端技術導入実証研究事業多様な通信環境に関する実証事業成果報告会
78ページあたりをみると、1台あたりMAXで120セッションくらいつかっていることがわかります。
ネットワンシステムズ株式会社
O365などクラウドサービスの導入で企業が直面する課題とは?
12ページに「O365を利用すると、多くの通信セッションが発生(1人あたり最大70~100セッション)」
とあります。
帯域はそこまでトラヒック使ってないのにネットワークが遅い場合NATのセッション数でひっかかっている事があります。
設計
1.機器にログインしてNATのセッション数を取得してテキストファイルに保存するスクリプト2.5分おきに実施
3.保存されたテキストファイルを表示するスクリプト
こんな感じで行こうかと思います。
本当は1つにできそうな気もするのですが、Fortigateがどうしても自動ログインして取得すると
30秒以上かかるので、いったん全部この形式でやります。
私が管理している一部の機器ではMIBでセッション数がはけないことを確認済みです。
となると、機器に自動でログインしてコマンドを実行し、その結果を読み込むといった
流れがよいのかなと思います。
事前にいろいろテストしたのですがパスワードの暗号化をするとZabbixの方でスクリプトの
実行時にタイムアウトになってしまってうごかなかったので、しゃーない2段階で実施しようかと思います。
環境
サーバー CentOS Linux release 7.9.2009Zabbix zabbix_server (Zabbix) 5.0.23
秘密鍵の作成
秘密鍵 ~/.ssh/id_rsaを作成するとりあえず全部デフォルト
ssh-keygen →デフォルトのままで作成
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): →未入力
Enter passphrase (empty for no passphrase): →未入力
Enter same passphrase again: →未入力
鍵が出来る鍵が出来ている事を確認
パスワードを暗号化して秘密鍵を作る
echo '任意のパスワード' | openssl rsautl -encrypt -inkey ~/.ssh/id_rsa > 任意のファイル名.rsa
複合化できるか確認する
複合化できるか確認する
penssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in 任意のファイル名.rsa
任意のパスワード
パスワードが表示できればOKログインしてセッション数を表示するスクリプトの作成
スクリプトファイルを作るzabbix01 ~]# vi 任意のファイル名.sh
#!/bin/sh
export LC_CTYPE=ja_JP.UTF-8
host="ホスト名"
user="ログインユーザ名"
pass="$(openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in 先ほど作った秘密鍵.rsa)"
cmd="edit NAT"
fortigateのコマンド1 cmd1="config vdom"
fortigateのコマンド2 cmd2="get system session status"
fortigateのコマンド3 end="end"
fortigateのコマンド4
expect -c "
spawn ssh ユーザ名@IPアドレス
expect \\"Password:\\"
send \\"${pass}\\n\\"
expect \\">\\"
send \\"${cmd1}\\n\\"
expect \\">\\"
send \\"${cmd}\\n\\"
expect \\">\\"
send \\"${cmd2}\\n\\"
expect \\">\\"
send \\"${end}\\n\\" ; sleep 1
expect eof
" > /usr/lib/zabbix/externalscripts/任意のファイル名.log
こんな感じ。あとは実行権限をつける。
chmod +x 任意のファイル名.sh
cronに設定して5分おきに実行する。
vi /etc/crontab
*/5 * * * * root /root/./任意のファイル名.sh
Zabbixに取り込むための外部スクリプト作成
セッション数の数字部分だけ抜け出せることを確認cat -v /usr/lib/zabbix/externalscripts/任意のファイル名.log | grep -e "The total number of sessions for the current VDOM"|grep -o '[0-9]*'| tail -n 1
zabbixのディレクトリ移動
cd /usr/lib/zabbix/externalscripts
zabbixの取り込みスクリプト作成
vi 任意のファイル名2.sh
#!/bin/sh
export LC_CTYPE=ja_JP.UTF-8
cat -v /usr/lib/zabbix/externalscripts/任意のファイル名.log | grep -e "The total number of sessions for the current VDOM"|grep -o '[0-9]*'| tail -n 1
実行権限付与
chmod +x 任意のファイル名2.sh
Zabbixで実行できるように所有権を変更
chown zabbix:zabbix 任意のファイル名2.sh
chown zabbix:zabbix /usr/lib/zabbix/externalscripts/任意のファイル名.log
Zabbixでアイテムを作成する
ホスト→アイテムを作成したホストを選択。上のメニューからアイテムを選択する。
右上のアイテムを作成を選ぶ
必要事項を入力する
テストボタンを選択し値が取れる事を確認する。
値が取れる事を確認したら最後に追加を押して完了。
Zabbixでグラフを作成する
グラフを選択し、グラフの作成を選択する。任意の名前を入力して、追加をクリック
アイテムから外部チェックを選び選択をクリック
アイテムにはいるので追加を選択する
プレビューを押すと見れます。
(初回はまだテストでデータ入ってないのでグラフは真っ白です。)
Zabbixでトリガーを作成する
トリガーをクリックするトリガーの作成をクリック
名前を入力して、障害レベルの定義をする。
条件式は
{zabbix登録ホスト名:保存した任意の外部スクリプト.last()}>閾値の数字(今回は10000)
監視データのホストからグラフに閾値が追加されていればOK。
グラフはホストのテンプレートからは見れないのでスクリーンなどを作って追加しておくと良いかと思います。
終わり!