천

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

· 2015-11-23 (월) 20:22:05 · 3074

아래글에 이어 아파치와 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) {}
    }
}

?>

|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
16-03-21 조회 3,089
15-12-03 조회 2,942
14-09-21 조회 4,417
14-09-21 조회 3,902
14-09-20 조회 3,898
14-09-20 조회 3,808
14-09-20 조회 3,980
14-09-19 조회 3,910
14-09-19 조회 4,068
14-09-19 조회 3,960
14-09-19 조회 3,979
14-09-19 조회 3,908
14-09-19 조회 4,192
14-09-19 조회 3,930
14-09-19 조회 3,976
14-09-19 조회 3,957
14-09-18 조회 4,028
14-09-18 조회 3,991
14-09-18 조회 4,258
14-09-18 조회 4,230
14-09-18 조회 4,241
14-09-18 조회 4,936
14-07-25 조회 4,065
13-05-18 조회 5,789
13-03-13 조회 8,379
13-02-16 조회 6,955
13-02-05 조회 7,678
13-01-28 조회 6,822
13-01-28 조회 6,770
13-01-25 조회 5,144
13-01-25 조회 1.1만
13-01-24 조회 4,446
13-01-18 조회 3,987
13-01-18 조회 6,216
13-01-18 조회 5,895
13-01-17 조회 4,413
13-01-17 조회 5,179
13-01-14 조회 5,236
13-01-03 조회 1만
12-12-29 조회 4,616
12-11-29 조회 1.2만
12-11-16 조회 6,454
12-10-22 조회 8,527
12-09-11 조회 4,255
12-09-11 조회 3,910
12-09-11 조회 3,725
12-09-11 조회 3,690
12-09-03 조회 4,662
12-08-29 조회 3,601
12-08-27 조회 4,069
12-08-22 조회 3,512
12-08-19 조회 3,875
12-08-16 조회 3,423
12-08-02 조회 3,820
12-07-17 조회 3,565
12-07-14 조회 4,338
12-07-12 조회 4,376
12-07-10 조회 5,699
12-07-05 조회 3,482
12-06-08 조회 4,935
12-05-19 조회 3,422
12-05-18 조회 5,026
12-04-09 조회 4,760
12-04-05 조회 3,641
12-02-27 조회 3,831
12-02-11 조회 3,459
12-02-09 조회 3,925
12-02-09 조회 3,495
12-01-17 조회 5,192
12-01-10 조회 5,336
12-01-10 조회 5,509
12-01-10 조회 5,395
12-01-10 조회 5,296
11-12-23 조회 3,587
11-12-19 조회 6,254
11-12-19 조회 5,008
11-12-09 조회 4,155
11-12-09 조회 3,773
11-12-09 조회 3,974
11-12-09 조회 4,484