ZabbixAPIですが通常ではログが出せなくデバックが辛いのでlog4phpを使ってなんとかならないかと試してみました。
取り敢えず、インストール
yum -y install php-pear
pear channel-discover pear.apache.org/log4php
pear install log4php/Apache_log4php
で、設定ファイルの作成。
zlog4と言うロガーを作りました。
ログは/tmp/ZabbixAPI.logに出力します。
/usr/share/zabbix/log4php.xml
<configuration xmlns="http://logging.apache.org/log4php/">
<appender name="myConsoleAppender" class="LoggerAppenderConsole" />
<appender name="myFileAppender" class="LoggerAppenderFile">
<layout class="LoggerLayoutPattern">
<param name="conversionPattern" value="%date{Y-m-d H:i:s,u} [%logger] %message%newline" />
</layout>
<param name="file" value="/tmp/ZabbixAPI.log" />
</appender>
<logger name="zlog4">
<appender_ref ref="myFileAppender" />
</logger>
<root>
<level value="DEBUG" />
<appender_ref ref="myConsoleAppender" />
</root>
</configuration>
2016年7月4日api_jsonrpc.phpのみにlog4phpの設定を入れるとWebインタフェースの画面が表示されなくなる事象が発生。
内部でapi_jsonrpc.php通らずにhost.getが呼ばれているようです。
と言う訳で、下記の様に変更しました。
Z.phpでロガーを設定し…
/usr/share/zabbix/include/classes/core/Z.php
<?php
/*
** Zabbix
** Copyright (C) 2001-2015 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
require_once dirname(__FILE__).'/ZBase.php';
require_once('log4php/Logger.php'); <-- log4phpの設定
Logger::configure('/usr/share/zabbix/log4php.xml'); <-- log4phpの設定
$zbxlog4php = Logger::getLogger('zlog4'); <-- log4phpの設定
global $zbxlog4php; <-- log4phpの設定
/**
* A wrapper for the ZBase class.
*
* Feel free to modify and extend it to change the functionality of ZBase.
*/
class Z extends ZBase {
}
api_jsonrpc.phpの最後の一行にshutdownを設定
/usr/share/zabbix/api_jsonrpc.php
…略…
echo CJs::encodeJson($response);
}
$zbxlog4php->shutdown(); <-- log4phpの設定
これで準備OK
テストはhost.getで行いました。
開始直後とSQL実行と終了直線でログを出力します。
/usr/share/zabbix/api/classes/CHost.php
…略…
public function get($options = array()) {
$result = array();
$userType = self::$userData['type'];
$userid = self::$userData['userid'];
global $zbxlog4php;
$zbxlog4php->info("host.get start");
…略…
$sqlParts = $this->applyQueryOutputOptions($this->tableName(), $this->tableAlias(), $options, $sqlParts);
$sqlParts = $this->applyQuerySortOptions($this->tableName(), $this->tableAlias(), $options, $sqlParts);
$sqlParts = $this->applyQueryNodeOptions($this->tableName(), $this->tableAlias(), $options, $sqlParts);
$zbxlog4php->info($sqlParts);
$res = DBselect($this->createSelectQueryFromParts($sqlParts), $sqlParts['limit']);
while ($host = DBfetch($res)) {
…略…
// removing keys (hash -> array)
if (is_null($options['preservekeys'])) {
$result = zbx_cleanHashes($result);
}
$zbxlog4php->info("host.get end");
return $result;
}
/**
* Get Host ID by Host name
*
* @param array $host_data
* @param string $host_data['host']
*
* @return int|boolean
*/
public function getObjects($hostData) {
…略…
下記が実行結果
]# cat /tmp/ZabbixAPI.log
2016-07-03 09:34:37,850 [zlog4] host.get start
2016-07-03 09:34:37,853 [zlog4] Array
(
[select] => Array
(
[0] => h.*
)
[from] => Array
(
[hosts] => hosts h
)
[where] => Array
(
[flags] => h.flags IN (0,4)
[status] => h.status IN (0,1)
[filter] => h.host='Zabbix server'
)
[group] => Array
(
)
[order] => Array
(
)
[limit] =>
)
2016-07-03 09:34:37,853 [zlog4] host.get end
これで画面も表示できてデバック情報出すことで着ました。
因みに画面からhost.get呼ばれる場合もこれでログが出ます。