こんにちは、LinuCエバンジェリストこと、鯨井貴博@opensourcetechです。
Zabbix 4.0 LTSのグラフで、単位を丸めずに表示する方法に関するメモです。
デフォルト表示
デフォルトのグラフ表示ですが、
以下のように、1,000であれば1Kなどに丸められてしまいます。
表示する値が気圧など詳細を見たいものの場合、ちょっと不便です。
原因
原因というかZabbixでグラフの単位表示をどのように処理しているかというと、
「/usr/share/zabbix/include/func.inc.php」の673行目にある「$blackList = ['%', 'ms', 'rpm', 'RPM'];」で指定された単位のみ丸められないようになっています。
1 <?php
2 /*
3 ** Zabbix
4 ** Copyright (C) 2001-2019 Zabbix SIA
5 **
6 ** This program is free software; you can redistribute it and/or modify
7 ** it under the terms of the GNU General Public License as published by
8 ** the Free Software Foundation; either version 2 of the License, or
9 ** (at your option) any later version.
10 **
11 ** This program is distributed in the hope that it will be useful,
12 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ** GNU General Public License for more details.
15 **
16 ** You should have received a copy of the GNU General Public License
17 ** along with this program; if not, write to the Free Software
18 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 **/
.
.
.
省略
.
.
.
644 function convert_units($options = ) {
645 $defOptions = [
646 'value' => null,
647 'units' => null,
648 'convert' => ITEM_CONVERT_WITH_UNITS,
649 'byteStep' => false,
650 'pow' => false,
651 'ignoreMillisec' => false,
652 'length' => false
653 ];
654
655 $options = zbx_array_merge($defOptions, $options);
656
657 // special processing for unix timestamps
658 if ($options['units'] == 'unixtime') {
659 return zbx_date2str(DATE_TIME_FORMAT_SECONDS, $options['value']);
660 }
661
662 // special processing of uptime
663 if ($options['units'] == 'uptime') {
664 return convertUnitsUptime($options['value']);
665 }
666
667 // special processing for seconds
668 if ($options['units'] == 's') {
669 return convertUnitsS($options['value'], $options['ignoreMillisec']);
670 }
671
672 // black list of units that should have no multiplier prefix (K, M, G etc) applied
673 $blackList = ['%', 'ms', 'rpm', 'RPM'];
674
675 // add to the blacklist if unit is prefixed with '!'
676 if ($options['units'] !== null && $options['units'] !== '' && $options['units'][0] === '!') {
677 $options['units'] = substr($options['units'], 1);
678 $blackList = $options['units'];
679 }
680
.
.
.
省略
単位表示の変更方法
以下の記事で設定したアイテムの単位欄にちょっと手を加えることで対応できます。
zabbix_senderでRaspberry PiのセンサーデータをZabbix Serverへ送信する(1) - Opensourcetechブログ
zabbix_senderでRaspberry PiのセンサーデータをZabbix Serverへ送信する(2) - Opensourcetechブログ
変更方法は、単位の前に「!(エクスクラメーションマーク)」を付与するだけ。
無事に変更できました!
一応、Zabbix Officialのドキュメントにも載っています。
https://www.zabbix.com/documentation/4.2/manual/config/items/item
なおZabbix 4.0より前のバージョンでは、
上記方法ではなく「/usr/share/zabbix/include/func.inc.php」の「$blackList = ['%', 'ms', 'rpm', 'RPM'];」に使用したい単位を追加することで対応できるとのことです。
※未検証