/LogFarmer

Real-Time and Event-Driven Log Transfer Module.

Primary LanguageGo

LogFarmer

Real-Time and Event-Driven Log Transfer Module.

我们不生产日志,我们只做日志的实时搬运工。

功能

事件驱动

使用inotify完成,有日志传日志,15s判断一次当前文件是否已经读完需要换个文件句柄。

断点续传

进程退出保存文件偏移量和文件名,保存到本地文件,下次启动优先读对应的偏移量。

日志发送

脚本内kafka功能删掉了,就创建生产者和发送信息就行,往kafka.Kchan里打数据就可以。

输出到其他地方也一样,换啥改啥就行。功能在main函数里改伪代码。

nginx按小时分割日志

再记录个在http{}里生效按小时保存日志的配置,不用在每个server{}里改。

之前喜欢把日志格式化成json,所以预设一下json变量。

http{

    map $request_uri $nohealthlog {
        /health/check 0;
        default 1;
    }
    map $time_iso8601 $logdate {
        '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
        default 'default';
    }
    map $time_iso8601 $hour {
        default '00';
        "~^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})" $4;
    }
    map "" $json {
      default "";
    }
    
    log_format main escape=json '$json';
    access_log "/data0/waf_log/access.$logdate-$hour.log" main if=$nohealthlog;
    
}