Zabbix2.2系のスクリーンにグラフの幅を設定したときの挙動

幅によって情報量や描画速度が変わる

Zabbixの特徴として、自由にレイアウトできるスクリーンという機能がある。
特に、Zabbix1.8系ではテンプレートにホストスクリーンを含めることができなかったので、
ざっとそのサーバのステータスを見ようとするとグラフをプルダウンメニューから選んで切り替えてみるか
スクリーンにサーバごととか、ホストグループごととかの単位でグラフを張り付けて一覧を作るという作業をしていた。

2列4行ぐらいのスクリーンならそれほど苦ではないのだが、2列16行とか4列8行とかのスクリーンを作ろうとすると
作業テンポの悪さに閉口してきた。なぜなら、スクリーンのセルを変更する作業は次の流れになるから。

グラフをスクリーンに張り付ける作業とはこのような流れ

1.空いているセルを選んで「変更」のリンクボタンを押す。

・値がPOSTされて、画面描画をやり直す。
・もしも、既にグラフなどが設定されている場合、Javascriptによる遅延表示でグラフ画像がそれぞれ描画される。

2.セルに入れたいグラフを選ぶ

・別ウィンドウが開き、ホストグループ → ホストと選んでからグラフを選択する。
・保存を押すと再度POSTされて画面描画をやり直す。(1と同じ時間がかかる。画像はキャッシュされないから)

最初は画像が設定されていないので、クリックするたびに待つのは1秒以内だが、8とか超えてくると明らかに待ち時間が発生する。10秒とか。
僕は長く待つのはできるが、「ちょっと待つ」のができない性格なので、イライラっとする。

イライラが募ってしまったので、グラフの大きさを初期の「幅500、高さ100」から変えてみたらどうだろう?
と思って、「幅400、高さ150」にしてみた時に軽く驚いた。明らかに描画が早くなったから。
そして、情報量が変わっている事にも気が付いた。

幅500<->幅400、高さ100<->高さ150の比較

幅500、高さ100のCPUグラフ(パターン:デフォルト)

Linuxテンプレート(Template OS Linux)のグラフ「CPU utilization」の「トリガーを表示」は有効にしているところだけ、デフォルトのグラフ定義と違う。
2014-11-28_153025

幅400、高さ150のCPUグラフ(パターン:拡張)

上のグラフと同じもの。大きさだけ違う。
2014-11-28_145808

違っている箇所を列挙

1.グラフの左の%が高さ100(パターン:デフォルト)だと「0,50,100」の3つに比べ、高さ150だと「0,20,40,60,80,100」
2.時間の表示が幅500(パターン:デフォルト)だと「2分刻み」に比べ、幅400だと「5分刻み」
3.トリガーの項目表示が行われている(パターン:拡張)

Chromeの開発ツールで見た結果

幅500、高さ100のCPUグラフ(パターン:デフォルト)

2014-11-28_150117

幅400、高さ150のCPUグラフ(パターン:拡張)

2014-11-28_150111

特徴を列挙

・幅500(パターン:デフォルト)22.9KB 483ms/454ms
・幅400(パターン:拡張)   27.2KB 431ms/399ms

上記のように、幅500のほうがファイルサイズは小さいのに、Time/Latency は遅いという結果に。
念のために5回ほど繰り返してみる。

2回目

・幅500(パターン:デフォルト)23.6KB 487ms/460ms
・幅400(パターン:拡張)   27.7KB 438ms/413ms

3回目

・幅500(パターン:デフォルト)23.6KB 449ms/420ms
・幅400(パターン:拡張)   27.7KB 434ms/404ms

4回目

・幅500(パターン:デフォルト)23.6KB 534ms/507ms
・幅400(パターン:拡張)   27.9KB 488ms/462ms

5回目

・幅500(パターン:デフォルト)23.6KB 499ms/489ms
・幅400(パターン:拡張)   27.8KB 425ms/394ms

デフォルトのパターンは拡張よりも早くなることはなかった。
文字の埋め込みって思ったよりも時間がかかるもんなのかな?それともグラフ描画データのサンプリングに変化があるんだろうか?
という追っかけてみたいテーマはできたけれど、謎を深く追うのはこれまで。

スクリーンでグラフを選ぶときのデフォルトの大きさを変更

※ 注意!プログラム改造なので、一般的ではないのと、rpmバージョンアップで初期化されるため自分で何とかできる人しかやらないでください。

どこでこんな値を入れているんだろうと調査

見つけたグラフの設定項目初期化をしているファイル

/usr/share/zabbix/include/views/configuration.screen.constructor.edit.php

    61  else {
    62          $resourceType   = get_request('resourcetype', 0);
    63          $resourceId             = get_request('resourceid', 0);
    64          $width                  = get_request('width', 500);
    65          $height                 = get_request('height', 100);
    66          $colspan                = get_request('colspan', 1);
    67          $rowspan                = get_request('rowspan', 1);
    68          $elements               = get_request('elements', 25);
    69          $valign                 = get_request('valign', VALIGN_DEFAULT);
    70          $halign                 = get_request('halign', HALIGN_DEFAULT);
    71          $style                  = get_request('style', 0);
    72          $url                    = get_request('url', '');
    73          $dynamic                = get_request('dynamic', SCREEN_SIMPLE_ITEM);
    74          $sortTriggers   = get_request('sort_triggers', SCREEN_SORT_TRIGGERS_DATE_DESC);
    75          $application    = get_request('application', '');
    76  }

セルの上中下を定義しているファイル

/usr/share/zabbix/include/defines.inc.php

   555  define('VALIGN_DEFAULT',        0);
   556  define('VALIGN_MIDDLE',         0);
   557  define('VALIGN_TOP',            1);
   558  define('VALIGN_BOTTOM',         2);

こちらを確認したのは、すべてのセルを上に付ける形にしたかったから。グラフの表示項目が多いとか少ないで
ガタガタになるパターンがあったため。

変更した値を抜粋

    64          $width                  = get_request('width', 400);
    65          $height                 = get_request('height', 150);
    69          $valign                 = get_request('valign', VALIGN_TOP);

これで、毎回グラフを作るたびにいちいち大きさを入れなくても良いという事に。
自分以外も使うならば作業後に戻しておくなども必要かと。