logstash

logstash.conf

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
    file {
        # 支持glob(不管Linux还是Windows一定要使用/,否则监控不到文件)
        path => ["D:/WWW/api/storage/logs/*.log", "D:/WWW/api/storage/logs/master/*.log"]
        # 从什么位置开始读取文件数据 beginning end
        start_position => "beginning"
        # 示了针对多久的文件进行监控,默认一天,单位为秒(开启这个参数=0就监控不到文件了,不知道为什么 别开就对了)
        #ignore_older => 0
        # 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒
        discover_interval => 10
        # 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒
        stat_interval => 1
        # 每隔多久写一次 sincedb 文件,默认是 15 秒
        sincedb_write_interval => 10
        # 通过这个配置定义 sincedb 文件到其他位置
        #sincedb_path => "D:/elk/logstash-8.8.1/sincedb.txt"
        # 设置新事件的标志
        #delimiter => "\n"
        # 定义类型
        #type => "logs"
    }
}

filter {
    # 获取文件名称
    ruby {
        code => "
            path = event.get('log')['file']['path']
            #puts format('path = %<path>s', path: path)
            if (!path.nil?) && (!path.empty?)
                event.set('filename', path.split('/')[-1])
            end
        "
    }
    # 处理日志时间
    if [filename] =~ "lumen" {
        #mutate { replace => { type => "lumen" } }
        ruby {
            code => "
                if match = event.get('message').match(/^\[([0-9\-: ]+)\]/i)
                    event.set('logtime', match[1])
                end
            "
        }
    } else if [filename] =~ "master" {
        #mutate { replace => { type => "master" } }
        ruby {
            code => "
                if match = event.get('message').match(/^{\"time\":\"(([0-9\-: ]+)\.(\d+))\"/i)
                    event.set('logtime', match[2])
                    event.set('logtime_u', match[1])
                end
            "
        }
    }
    # 丢掉空行
    if [message] =~ /^\s*$/ {
        drop { }
    }
}

output {
    elasticsearch {
        hosts => ["http://localhost:9200"]
        #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
        index => "%{filename}"
        #user => "elastic"
        #password => "changeme"
    }
    #stdout { }
}