투

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

· 2007-07-06 (금) 18:30:20 · 4418 · 2
아래글에 이어 아파치와 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건
+
제목 글쓴이 날짜 조회
08-01-27 조회 3,804
08-01-26 조회 8,563
08-01-21 조회 3,312
08-01-08 조회 3,764
07-12-21 조회 4,705
07-12-14 조회 4,859
07-12-13 조회 6,306
07-12-10 조회 4,091
07-12-03 조회 3,249
07-12-03 조회 4,293
07-11-27 조회 5,788
07-11-26 조회 2,996
07-11-22 조회 5,112
07-11-21 조회 3,326
07-11-21 조회 1.1만
07-11-12 조회 4,071
07-11-07 조회 4,833
07-10-29 조회 3,584
07-10-25 조회 4,998
07-10-24 조회 3,791
07-10-23 조회 5,980
07-10-09 조회 4,142
07-10-09 조회 4,604
07-10-09 조회 3,201
07-10-09 조회 3,560
07-09-27 조회 3,862
07-09-27 조회 3,086
07-09-15 조회 4,015
07-09-13 조회 2,785
07-09-13 조회 3,248
07-08-07 조회 3,275
07-08-04 조회 3,419
07-07-30 조회 5,421
07-07-29 조회 3,786
07-07-29 조회 4,457
07-07-21 조회 3,101
07-07-20 조회 3,146
07-07-20 조회 4,305
07-07-07 조회 3,386
07-07-06 조회 5,208
07-07-06 조회 5,607
07-07-05 조회 6,746
07-07-04 조회 3,380
07-06-11 조회 3,898
07-06-04 조회 7,243
07-05-28 조회 4,872
07-05-14 조회 6,339
07-05-10 조회 5,284
07-05-09 조회 3,387
07-05-04 조회 3,684
07-04-27 조회 3,328
07-04-25 조회 4,648
07-04-19 조회 3,611
07-04-16 조회 3,217
07-04-13 조회 3,836
07-04-12 조회 4,557
07-04-12 조회 4,772
07-04-11 조회 3,401
07-04-08 조회 5,131
07-04-07 조회 3,235
07-03-29 조회 3,540
07-03-27 조회 3,747
07-03-21 조회 5,146
07-03-15 조회 3,282
07-03-11 조회 3,299
07-03-10 조회 4,938
07-03-09 조회 3,941
07-03-08 조회 4,822
07-03-05 조회 2,942
07-03-02 조회 3,032
07-03-02 조회 3,870
07-02-26 조회 2,918
07-02-26 조회 3,011
07-02-23 조회 4,261
07-02-23 조회 3,327
07-02-23 조회 3,328
07-02-23 조회 3,512
07-02-22 조회 3,152
07-02-21 조회 4,803
07-02-20 조회 4,602
07-02-14 조회 3,749
07-02-12 조회 5,340
07-02-11 조회 4,771
07-02-10 조회 4,079
07-02-09 조회 3,851
07-02-08 조회 4,518
07-02-03 조회 4,113
07-02-02 조회 3,488
07-01-09 조회 3,575
07-01-08 조회 3,943
06-12-26 조회 4,642
06-12-21 조회 3,751
06-12-15 조회 4,160
06-12-15 조회 7,439
06-12-15 조회 3,168
06-12-15 조회 3,188
06-12-15 조회 3,463
06-12-15 조회 3,119
06-12-15 조회 4,538
06-12-15 조회 3,136