Squidが時たま調子が悪くて、一つの要因にFile descriptorに目を付けてるけどこれじゃない感じもある。
cache.logにも決まり文句もないし。
ともあれ虱潰しにしようということで、Zabbixで監視をしてみます。
Zabbixの外部スクリプトの場所を確認しよう
[root@proxmox-zabbix ~]# cat /etc/zabbix/zabbix_server.conf | grep "ExternalScripts" ### Option: ExternalScripts # ExternalScripts=${datadir}/zabbix/externalscripts ExternalScripts=/usr/lib/zabbix/externalscripts
“ExternalScripts=/usr/lib/zabbix/externalscripts” ここに外部スクリプトを起きます。
squidclientを入れよう
yum install squid
squidclientで情報を取得しに行くのでsquidを入れます。
squidclientだけ入れることはできないんだろうか。
外部スクリプト本体
<?php /** * @param string $host 第1引数 IPアドレス * @param string $key 第2引数 maximum or largest or number or file or ..... */ $host = $argv[1]; $key = $argv[2]; file_put_contents("result", shell_exec("squidclient -h ${host} mgr:info")); $result = file("result"); switch($key){ case 'maximum': $maximum = preg_replace("/\\D/", "", $result[72]); //Maximum number of file descriptors echo $maximum; break; case 'largest': $largest = preg_replace("/\\D/", "", $result[73]); //Largest file desc currently in use echo $largest; break; case 'number': $number = preg_replace("/\\D/", "", $result[74]); //Number of file desc currently in use echo $number; break; case 'file': $file = preg_replace("/\\D/", "", $result[75]); //Files queued for open echo $file; break; case 'available': $available = preg_replace("/\\D/", "", $result[76]); //Available number of file descriptors echo $available; break; case 'reserved': $reserved = preg_replace("/\\D/", "", $result[77]); //Reserved number of file descriptors echo $reserved; break; case 'store': $store = preg_replace("/\\D/", "", $result[78]); //Store Disk files open echo $store; break; default: die(); }
https://gist.github.com/rluisr/76bf3845a5daafdb40c7
このファイルをさっきのディレクトリへ保存し
chmod 755 SquidInfo.php result chown zabbix:zabbix SquidInfo.php result
シェルスクリプトと、Pythonが割りとメジャーらしいけどどっちも分からないのでPHPで書くことにしました。
一度ファイルに保存してるのは行数指定で変数にぶち込みたかったから。
例えば Maximum number of file descriptors の数値が欲しい時は
php SquidInfo.php 192.168.x.x maximum
とすれば、数値(実際には文字列)だけが返ってきます。
php SquidInfo.php 192.168.x.x number
とすれば、Number of file desc currently in useが返ってきます。
Squidに登録
アイテムの追加から、こんな感じに設定すれば取得可能。
データ型は”文字列”でないと取得できません。
一つ一つアプリケーションを追加していくのはダルいのでテンプレートを作成しておくといいです。
トリガーとしては、Maximum number of file descriptorsが65535となっており
Number of file desc currently in useが65000を超えるとアクションを起こすように。
自動でSquidを再起動するようにアクションを仕掛けてもいいですね!!!