천

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

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

아래글에 이어 아파치와 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건
+
제목 글쓴이 날짜 조회
15-12-13 조회 2,916
15-12-11 조회 3,381
15-12-11 조회 3,078
15-12-11 조회 2,910
15-12-11 조회 2,563
15-12-11 조회 2,526
15-12-11 조회 2,529
15-12-10 조회 2,484
15-12-10 조회 2,552
15-12-10 조회 2,523
15-12-10 조회 2,771
15-12-09 조회 2,690
15-12-08 조회 3,616
15-12-08 조회 2,897
15-12-08 조회 2,646
15-12-08 조회 2,924
15-12-07 조회 3,008
15-12-07 조회 2,723
15-12-07 조회 3,103
15-12-07 조회 2,756
15-12-06 조회 2,879
15-12-06 조회 2,588
15-12-06 조회 2,828
15-12-05 조회 2,754
15-12-05 조회 3,007
15-12-05 조회 2,779
15-12-04 조회 2,647
15-12-04 조회 2,756
15-12-04 조회 2,809
15-12-03 조회 2,765
15-12-03 조회 2,796
15-12-03 조회 2,826
15-12-03 조회 2,904
15-12-03 조회 3,169
15-12-03 조회 2,689
15-12-02 조회 2,909
15-12-02 조회 2,856
15-12-02 조회 2,849
15-12-02 조회 2,993
15-12-02 조회 3,040
15-12-01 조회 2,735
15-12-01 조회 2,529
15-12-01 조회 2,605
15-11-30 조회 2,799
15-11-30 조회 2,955
15-11-30 조회 2,853
15-11-29 조회 2,621
15-11-29 조회 2,877
15-11-29 조회 2,685
15-11-28 조회 2,617
15-11-28 조회 2,646
15-11-28 조회 2,679
15-11-27 조회 2,771
15-11-27 조회 2,625
15-11-27 조회 2,638
15-11-26 조회 2,803
15-11-26 조회 3,663
15-11-25 조회 2,763
15-11-25 조회 2,715
15-11-25 조회 2,773
15-11-25 조회 2,569
15-11-25 조회 2,925
15-11-23 조회 2,838
15-11-23 조회 2,986
15-11-23 조회 2,814
15-11-21 조회 2,713
15-11-21 조회 2,608
15-11-21 조회 2,554
15-11-20 조회 2,555
15-11-20 조회 2,502
15-11-20 조회 2,631
15-11-20 조회 2,885
15-11-18 조회 2,784
15-11-18 조회 2,664
15-11-18 조회 2,649
15-11-17 조회 2,849
15-11-17 조회 2,608
15-11-17 조회 2,748
15-11-16 조회 2,635
15-11-16 조회 2,599
15-11-16 조회 2,785
15-11-15 조회 2,799
15-11-15 조회 2,657
15-11-15 조회 2,745
15-11-13 조회 3,601
15-11-12 조회 3,486
15-11-12 조회 2,940
15-11-12 조회 3,613
15-11-11 조회 2,745
15-11-11 조회 3,006
15-11-11 조회 3,260
15-11-09 조회 2,761
15-11-09 조회 2,990
15-11-09 조회 2,959
15-11-09 조회 2,717
15-11-09 조회 2,765
15-11-09 조회 3,010
15-11-06 조회 3,355
15-11-05 조회 2,814
15-11-05 조회 2,699