分散型メモリキャッシュシステムの Memcached が正常に起動していることを監視するためのテンプレートを作成します。PHPなどのセッション情報の保存先を Memcached に指定している場合は、Memcached が起動していないとエラーが発生しWEBサイトを表示することができません。死活監視は11211番ポートにTCP接続ができることにより確認します。また、Memcached のメモリの使用状況やキャッシュアウト回数の監視設定も行います。
Memcached のメモリの使用状況やキャッシュアウト回数は memcached-tool コマンド等で確認することができます。
$ memcached-tool localhost stats
#localhost:11211 Field Value
accepting_conns 1
auth_cmds 0
auth_errors 0
bytes 0
bytes_read 1040
bytes_written 160485
cas_badval 0
cas_hits 0
cas_misses 0
cmd_flush 0
cmd_get 0
cmd_set 0
cmd_touch 0
conn_yields 0
connection_structures 11
crawler_reclaimed 0
curr_connections 10
curr_items 0
decr_hits 0
decr_misses 0
delete_hits 0
delete_misses 0
evicted_unfetched 0
evictions 0
expired_unfetched 0
get_hits 0
get_misses 0
hash_bytes 524288
hash_is_expanding 0
hash_power_level 16
incr_hits 0
incr_misses 0
libevent 2.0.21-stable
limit_maxbytes 67108864
listen_disabled_num 0
lrutail_reflocked 0
malloc_fails 0
pid 955
pointer_size 64
reclaimed 0
reserved_fds 20
rusage_system 9.026627
rusage_user 11.601236
threads 4
time 1416032899
total_connections 199
total_items 0
touch_hits 0
touch_misses 0
uptime 154829
version 1.4.21
上の出力のように Memcached の色々な状態を確認することができます。今回はこの中から、メモリ最大容量(limit_maxbytes)、メモリ使用量(bytes)、キャッシュアウト回数(evictions)の監視設定を行います。memcached-tool コマンド出力の見方は下記のサイトを参考にさせて頂きました。
▽ Memcacheのstatsコマンド | 祈れ、そして働け ~ Ora et labora
http://d.hatena.ne.jp/tetsuyai/20111221/1324441717
Zabbixの標準では、Memcachedの状態を監視するアイテムキーはありませんので、Memcachedの状態を取得するスクリプトを作成しそれをユーザーパラメータとして登録します。
テンプレートの作成
[設定]→[テンプレート]→[テンプレートの作成]をクリックします。

[テンプレート]タブを選択 下記を入力し「追加」をクリックすればテンプレートが作成されます。
テンプレート名:A_Template_App_Memcached グループ:A_Templates グループを作成する

アプリケーションの作成
[設定]→[テンプレート] 「A_Template_App_Memcached」行の「アプリケーション」をクリックします。

名前に「memcached」を入力し「追加」をクリックすればアプリケーションが作成されます。

ポート監視アイテムの作成
まずはMemcachedの死活監視の設定です。
[設定]→[テンプレート] 「A_Template_App_Memcached」行の「アイテム」をクリックします。

下記を設定し「追加」をクリックすればアイテムが作成されます。

---(設定箇所)---------------------------
名前:2040_memcached ポート監視
タイプ:シンプルチェック
キー:net.tcp.service[tcp,,11211]
更新間隔(秒):60
値のマッピングの使用:Service state(0 ⇒ Down, 1 ⇒ Up と表示されます)
アプリケーション:memcached
------------------------------
アイテムキー net.tcp.service のパラメータ
net.tcp.service[service,<ip>,<port>]
service - ssh、 ntp、ldap、smtp、ftp、http、pop、nntp、imap、tcp、https、telnetの何れか1つ
ip - Zabbixのホストの定義のIPアドレス
port - ポート番号(デフォルトでは標準のサービスポート番号が使用されます)
詳細は公式マニュアル 5 シンプルチェック | Zabbix Documentaion 2.2 を参照してください。
Memcachedの状態監視アイテム作成
Memcachedの状態を取得するスクリプトを作成しそれをユーザーパラメータとして登録します。スクリプトはPHPのmemcacheモジュールを利用して作成することにします。
memcachedの状態取得スクリプト作成
memcacheモジュールのインストール
sudo yum -y install php-pecl-memcache
適当な場所にスクリプトの保存先を作成します。
sudo mkdir /etc/zabbix/bin
memcachedの状態取得スクリプトを作成します。
sudo mkdir /etc/zabbix/bin
sudo vi /etc/zabbix/bin/memcached_status.php
#!/usr/bin/php
<?php
$key = $argv[1];
$memcache = new Memcache;
$memcache->connect('localhost', 11211);
$status = $memcache->getStats();
echo $status[$key];
作成したスクリプトのオーナーを zabbix に変更して実行権限を付けます
sudo chown zabbix:zabbix /etc/zabbix/bin/memcached_status.php sudo chmod 700 /etc/zabbix/bin/memcached_status.php
スクリプト本体の動作確認をします。
sudo /etc/zabbix/bin/memcached_status.php limit_maxbytes 67108864
memcached-toolコマンドと同じ出力結果が表示されていればOKです。
ユーザーパラメータの登録
作成したスクリプトを Zabbixエージェントの設定ファイルにユーザーパラメーター(UserParameter)として登録します。
sudo vi /etc/zabbix/zabbix_agentd.conf
---(下記を変更)--------------------------- Include=/etc/zabbix/zabbix_agentd.d/ ↓ # Include=/etc/zabbix/zabbix_agentd.d/ ---(下記を最終行に追加)--------------------------- # Memcachedの状態監視 UserParameter=memcached.status[*],/etc/zabbix/bin/memcached_status.php "$1"
・Zabbixエージェントを再起動します。
sudo service zabbix-agent restart
ユーザーパラメータの書式は「UserParameter=<アイテムキー名>,<実行するコマンド>」になります。実行するコマンドはフルパスで指定するのがよいでしょう。
例えば今回登録したユーザーパラメータは、Zabbixサーバで「memcached.status[<キー>]」アイテムキーを実行すると、監視対象サーバ上で「/etc/zabbix/bin/memcached_status.php <キー>」コマンドが実行され出力結果をZabbixサーバに返します。
詳細は公式マニュアル 4 ユーザーパラメータ | Zabbix Documentation 2.2 をご参照ください。
動作確認
Zabbixサーバ上で zabbix_get コマンドを実行して動作確認をします。ユーザーパラメータで指定したコマンドと同じ出力結果が返ってくればOKです。
$ zabbix_get -s 172.16.1.20 -p 10050 -k memcached.status[limit_maxbytes] 67108864 $ zabbix_get -s 172.16.1.20 -p 10050 -k memcached.status[bytes] 0 $ zabbix_get -s 172.16.1.20 -p 10050 -k memcached.status[evictions] 0
アイテムの作成
[設定]→[テンプレート] 「A_Template_App_Memcached」行の「アイテム」をクリックします。

下記を設定し「追加」をクリックすれば Memcachedのメモリ最大容量(limit_maxbytes)監視アイテムが作成されます。

---(設定箇所)---------------------------
名前:3020_memcached メモリ最大容量
キー:memcached.status[limit_maxbytes]
単位:B
更新間隔(秒):60
アプリケーション:memcached
------------------------------
同様にメモリ使用量(bytes)とキャッシュアウト回数(evictions)の監視アイテムを作成します。
同じようなアイテムを作成する場合は、先に作成したアイテムを複製して異なる部分のみ設定するのが便利ですよ(^^)
---(設定箇所)---------------------------
名前:3021_memcached メモリ使用量
キー:memcached.status[bytes]
単位:B
更新間隔(秒):60
アプリケーション:memcached
------------------------------
---(設定箇所)---------------------------
名前:3022_memcached キャッシュアウト回数
キー:memcached.status[evictions]
単位:Item
更新間隔(秒):60
保存時の計算:差分
アプリケーション:memcached
------------------------------
キャッシュアウト回数は Memcachedを起動してからの累積数になりますので、保存時の計算を「差分」にしておきます。
トリガーの作成
Memcachedが起動していない場合は通知するようにトリガーを設定します。
[設定]→[テンプレート] 「A_Template_App_Memcached」行の「トリガー」をクリックします。

下記を設定し「追加」をクリックすればトリガーが作成されます。

---(設定箇所)---------------------------
名前:{HOST.NAME} memcached
条件式:{A_Template_App_Memcached:net.tcp.service[tcp,,11211].last()}=0
深刻度:致命的な障害
------------------------------
条件式末尾の「0」は Memcached が起動していないことを示します。
トリガーの名前にはマクロが使用できます。上の設定 {HOST.NAME} はホストの表示名がトリガー名に表示されます。
条件式は、{<テンプレート名>:<アイテムキー>.<トリガー関数>}=<値> の形式です。手入力してもかまいませんが、なかなか複雑な書式ですので、条件式の「追加」ボタンをクリックして対象のアイテムの選択と関数を選択、Nにしきい値を入力して「挿入」ボタンをクリックすれば条件式を生成してくれます。

▽ サポートされているトリガー関数 | Zabbix Documentaion 2.2
https://www.zabbix.com/documentation/2.2/jp/manual/appendix/triggers/functions
グラフの作成
[設定]→[テンプレート] 「A_Template_App_Memcached」行の「グラフ」をクリックします。

「グラフ」タブを選択し、アイテムの「追加」をクリックします。

グラフに表示したいアイテムを選択し「選択」をクリックします。

下記を設定してアイテムが追加されていることを確認し「追加」をクリックすれば memcachedメモリ使用量のグラフが作成されます。

---(設定箇所)---------------------------
名前:memcached メモリ使用量
アイテム1:A_Template_App_Memcached: 3020_memcached メモリ最大容量
グラフの形式:破線
色:C80000
アイテム2:A_Template_App_Memcached: 3021_memcached メモリ使用量
グラフの形式:グラデーションライン
色:C80000
------------------------------
同様に memcached キャッシュアウト回数のグラフも作成します。
---(設定箇所)---------------------------
名前:memcached キャッシュアウト回数
アイテム:A_Template_App_Memcached: 3022_memcached キャッシュアウト回数
------------------------------
特に memcached キャッシュアウト回数が多い場合は、memcachedに割り当てているメモリが不足していますので、割り当てメモリを増やしてあげましょう。
割り当てメモリは memcached の設定ファイルの「CACHESIZE」で指定します。単位はMBです。
sudo vi /etc/sysconfig/memcached
CACHESIZE="64" ↓ CACHESIZE="1024"
・Memcachedを再起動
sudo service memcached restart
スクリーンの作成
作成したグラフをスクリーンに登録します。
[設定]→[テンプレート] 「A_Template_App_Memcached」行の「スクリーン」をクリックします。

---(設定箇所)---------------------------
名前:memcached
列:2
行:1
----------------------------
作成したスクリーンの名前「memcached」をクリックします。

スクリーンセルの設定が開きますので、グラフ名の「選択」をクリックします。

グラフの名前「memcached メモリ使用量」をクリックします。

グラフ名が「A_Template_App_Memcached: memcached メモリ使用量」になっていることを確認して「追加」をクリックすれば登録終了です。他の値は特に変更する必要はありませんがお好みで調整してください。

同様に「memcached キャッシュアウト回数」のグラフも登録します。
最後に作成した監視テンプレートの動作確認をして作業完了です。














コメント