투

[서버운영] 아파치로그] sql로 바로 저장.

아래글에 이어 아파치와 php-cli 를 연계하여 로그를 바로 sql 에 저장한다.
예제이므로 DB 클래스와 에러제어 부분은 따로 표기하지 않는다.

PostgreSQL 기준.

httpd.conf

CustomLog "| /etc/apache2/shjsqllog.php" shjsqllog

CREATE TABLE shjlog (
seq SERIAL NOT NULL,
ip CIDR NOT NULL,
port SMALLINT NOT NULL,
bytes BIGINT NOT NULL,
inbytes BIGINT NOT NULL,
outbytes BIGINT NOT NULL,
protocol VARCHAR(30) NOT NULL,
method VARCHAR(10) NOT NULL,
host VARCHAR(200) NOT NULL,
file VARCHAR(300) NOT NULL,
uri VARCHAR(500) NOT NULL,
status SMALLINT NOT NULL,
phpsessid CHAR(32) NOT NULL,
useragent VARCHAR(200) NOT NULL,
referer VARCHAR(500) NOT NULL,
responsetime INTEGER NOT NULL,
datetime TIMESTAMPTZ NOT NULL,
PRIMARY KEY (seq)
);

CREATE INDEX ip_dex ON shjlog (ip);
CREATE INDEX host_dex ON shjlog (host);
CREATE INDEX uri_dex ON shjlog (uri);
CREATE INDEX phpsessid_dex ON shjlog (phpsessid);
CREATE INDEX useragent_dex ON shjlog (useragent);
CREATE INDEX referer_dex ON shjlog (referer);


#!/usr/bin/php
<?php

include_once 'SHJ/debug.inc.php';
include_once 'SHJ/DB/PDOExt.inc.php';

$db = new SHJPDOExt('pgsql', '/etc/apache2/shjlog.ini');
$fields->ip = '';
$fields->port = '';
$fields->bytes = '';
$fields->inbytes = '';
$fields->outbytes = '';
$fields->protocol = '';
$fields->method = '';
$fields->host = '';
$fields->file = '';
$fields->uri = '';
$fields->status = '';
$fields->phpsessid = '';
$fields->useragent = '';
$fields->referer = '';
$fields->responsetime = '';
$fields->datetime = '';
$stmt = $db->insert('shjlog', $fields);

$fp = fopen('php://stdin', 'r');

while(true) {
    $line = fgets($fp, 4096);
    if(!preg_match('/^ip:"(.*?)" port:"(.*?)" bytes:"(.*?)" inbytes:"(.*?)" outbytes:"(.*?)" protocol:"(.*?)" method:"(.*?)" host:"(.*?)" file:"(.*?)" uri:"(.*?)" status:"(.*?)" phpsessid:"(.*?)" useragent:"(.*?)" referer:"(.*?)" responsetime:"(.*?)" datetime:"(.*?)"$/s', $line, $matches)) {
        continue;
    }
    $fields->ip = $matches[1];
    $fields->port = $matches[2];
    $fields->bytes = $matches[3];
    $fields->inbytes = $matches[4];
    $fields->outbytes = $matches[5];
    $fields->protocol = $matches[6];
    $fields->method = $matches[7];
    $fields->host = $matches[8];
    $fields->file = $matches[9];
    $fields->uri = $matches[10];
    $fields->status = $matches[11];
    $fields->phpsessid = $matches[12];
    $fields->useragent = $matches[13];
    $fields->referer = $matches[14];
    $fields->responsetime = $matches[15];
    $fields->datetime = $matches[16];
    try {
        $stmt->exec();
    } catch(Exception $e) {
        $fp2 = fopen('/etc/apache2/shjlogerr.txt', 'w');
        fwrite($fp2, $e->getMessage());
        fclose($fp2);
        $db = new SHJPDOExt('pgsql', '/etc/apache2/shjlog.ini');
        $stmt = $db->insert('shjlog', $fields);
        try {
            $stmt->exec();
        } catch(Exception $e) {}
    }
}

?>
[이 게시물은 관리자님에 의해 2011-10-31 17:30:25 Apache에서 이동 됨]
|

댓글 2개

newline 이 올경우 로그 누락이 있던거 같던데??

그 문제는 없는건가요~?
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
07-07-31 조회 4,624
07-07-30 조회 5,055
07-07-30 조회 5,502
07-07-30 조회 5,426
07-07-29 조회 3,846
07-07-29 조회 3,571
07-07-29 조회 4,522
07-07-29 조회 4,368
07-07-28 조회 4,585
07-07-26 조회 4,486
07-07-25 조회 6,168
07-07-24 조회 6,426
07-07-21 조회 4,540
07-07-21 조회 3,892
07-07-21 조회 4,093
07-07-21 조회 3,407
07-07-21 조회 3,242
07-07-21 조회 3,178
07-07-20 조회 4,300
07-07-20 조회 3,446
07-07-20 조회 3,519
07-07-20 조회 3,202
07-07-20 조회 3,668
07-07-20 조회 4,385
07-07-18 조회 5,364
07-07-18 조회 4,580
07-07-16 조회 3,169
07-07-16 조회 3,101
07-07-13 조회 4,087
07-07-12 조회 2,806
07-07-09 조회 3,195
07-07-07 조회 3,429
07-07-07 조회 3,323
07-07-07 조회 3,432
07-07-06 조회 5,250
07-07-06 조회 2,971
07-07-06 조회 5,660
07-07-06 조회 4,235
07-07-06 조회 3,422
07-07-06 조회 4,451
07-07-06 조회 4,067
07-07-05 조회 4,047
07-07-05 조회 6,810
07-07-04 조회 3,430
07-07-02 조회 4,588
07-06-30 조회 4,481
07-06-29 조회 4,862
07-06-29 조회 4,404
07-06-28 조회 3,598
07-06-23 조회 3,242
07-06-21 조회 3,699
07-06-20 조회 7,383
07-06-20 조회 3,994
07-06-20 조회 5,740
07-06-19 조회 3,192
07-06-19 조회 1.1만
07-06-17 조회 3,647
07-06-16 조회 2,753
07-06-15 조회 4,143
07-06-12 조회 4,099
07-06-11 조회 3,958
07-06-11 조회 3,269
07-06-05 조회 3,609
07-06-05 조회 4,149
07-06-05 조회 4,169
07-06-05 조회 5,275
07-06-04 조회 7,315
07-05-31 조회 3,217
07-05-30 조회 3,322
07-05-29 조회 3,029
07-05-29 조회 2,751
07-05-29 조회 3,763
07-05-29 조회 2,845
07-05-29 조회 2,666
07-05-29 조회 5,901
07-05-29 조회 2,929
07-05-29 조회 2,962
07-05-29 조회 2,977
07-05-29 조회 3,088
07-05-29 조회 4,766
07-05-29 조회 2,771
07-05-29 조회 2,637
07-05-29 조회 2,457
07-05-29 조회 2,989
07-05-29 조회 3,018
07-05-28 조회 4,922
07-05-26 조회 3,213
07-05-20 조회 4,247
07-05-18 조회 6,014
07-05-18 조회 4,077
07-05-17 조회 9,199
07-05-17 조회 5,245
07-05-17 조회 3,915
07-05-16 조회 2,662
07-05-16 조회 3,792
07-05-15 조회 6,207
07-05-14 조회 6,385
07-05-13 조회 3,230
07-05-11 조회 5,542
07-05-10 조회 5,282