TOP ▲
itcore TOP
> TIPS
> log_put.php
タグ:api ログサーバ basic認証 ip制限 php シェル curl REST API でログサーバを作る。 | itcore 2017年
複数のサーバの管理情報をDBとして集めたいニーズは良くあります。
しかしそのためにFireWallや各種の通信設定をするのは面倒です。(サーバが増える毎に設定が必要)
そこで、ログサーバにHTTP(S)経由のREST APIを用意して、各サーバからそれを叩くと、簡単にサーバ情報を集中管理することができます。
セキュリティとしてBASIC認証とアクセス元IPで制限をかけています。
ログサーバ REST-API log_put.php
<?php
//------------------------------------------------------
$self_id = 'log_put';
$mode = uForm("mode");
$dir_data = "$self_id"; // データ用ディレクトリ
$dir_log = "$dir_data/log"; // ログ保管用ディレクトリ
//------------------------------------------------------
// ログ受け入れ処理 BASIC認証あり
//------------------------------------------------------
ini_set( 'display_errors', 1 ); // エラーを画面に出す。
date_default_timezone_set('Asia/Tokyo'); $dt = date("Y-m-d H:i:s");
$host = trim(str_replace(array("\n", "\r"), " ", uForm("host"))); // 改行は空白へ変換、前後空白削除 ホスト名
$data = trim(str_replace(array("\n", "\r"), " ", uForm("data"))); // 改行は空白へ変換、前後空白削除 ログデータ
$a_ip = array();
$a_ip[] = "x.x.x.x"; // オフィス
$a_ip[] = "x.x.x."; // データセンター
$ip = $_SERVER["REMOTE_ADDR"];
echo "ip=$ip<br>\n";
$hit = 0;
foreach ($a_ip as $ip1) {
$len = strlen($ip1); // x.x.x.
if (substr($ip1, 0, $len) == substr($ip, 0, $len)) {
$hit = 1;
break;
}
}
if (0 == $hit) {
echo "このIPは許可されていません。ip=$ip<br>\n";
file_put_contents("$dir_data/error.log", "$dt IP-ERROR ip=$ip host=$host data=$data\n", FILE_APPEND | LOCK_EX);
exit;
}
if ("" == $host) {
echo "ホスト名が指定されていません<br>\n";
file_put_contents("$dir_data/error.log", "$dt HOST-ERROR ip=$ip host=$host data=$data\n", FILE_APPEND | LOCK_EX);
exit;
}
echo "OK<br>\n";
file_put_contents("$dir_log/$host", "$dt\t$ip\t$host\t$data\n", FILE_APPEND | LOCK_EX); // タブ区切り
exit;
// uForm フォーム変数の受取
function uForm($var) {
if (isset($_POST[$var])) return $_POST[$var];
if (isset($_GET[$var])) return $_GET[$var];
return "";
}
?>
各サーバ ログ情報の送信 log_put.sh
バックアップRsyncの結果を送信します。
# vi /root/log_put.sh
data1=[cron]`crontab -l | grep rsync`
data2=[rsync]`ls -l /root/rsync.log`
data3=[sent]`tail -1 /root/rsync.log`
curl -k -s -S -X POST "https://[host]/log_put.php" \
--data-urlencode "host=`hostname`" \
--data-urlencode "data=$data1 $data2 $data3" \
-u "user:password"
:wq
# chmod +x /root/log_put.sh
# /root/log_put.sh