• logstash 添加nginx日志


    选择需求分类废话少说直接上图

    第一张图:

      

    2.此图搭配的日志格式是:

       

      

    log_format main '$remote_addr - $remote_user [$time_local] $http_host $request_method "$uri" "$query_string" '
    '$status $body_bytes_sent "$http_referer" $upstream_status $upstream_addr $request_time $upstream_response_time '
    '"$http_user_agent" "$http_cdn_src_ip" "$http_x_forwarded_for"' ;

    3.写正则放在那里呢?

    放在logstash 解压目录下,创建一个 patterns/nginx文件

    URIPARM1 [A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?-[]]*
    URIPATH1 (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%&_- ]*)+
    URI1 (%{URIPROTO}://)?(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
    HOSTPORT %{IPORHOST}:%{POSINT}

    NGINXACCESS %{IPORHOST:remote_ip} - (%{USERNAME:user}|-) [%{HTTPDATE:log_timestamp}] %{HOSTNAME:http_host} %{WORD:request_method} "%{URIPATH1:uri}" "%{URIPARM1:param}" %{BASE10NUM:http_status} (?:%{BASE10NUM:body_bytes_sent}|-) "(?:%{URI1:http_referrer}|-)" (%{BASE10NUM:upstream_status}|-) (?:%{HOSTPORT:upstream_addr}|-) (%{BASE16FLOAT:upstream_response_time}|-) (%{BASE16FLOAT:request_time}|-) (?:%{QUOTEDSTRING:user_agent}|-) "(%{IPV4:client_ip}|-)" "(%{WORD:x_forword_for}|-)"

    第二类 nginx默认log格式:

    1.日志格式

    (1)

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

    (2)

    log_format logstash '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent $request_time "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

      

    2.patterns/nginx

    (1)
    WZ ([^ ]*)
    NGINXACCESS %{IP:remote_ip} - - [%{HTTPDATE:timestamp}] "%{WORD:method} %{WZ:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:agent} %{QS:xforward}

     (2)

    NGINXACCESS %{IP:remote_ip} - - [%{HTTPDATE:timestamp}] "%{WORD:method} %{WZ:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} %{BASE16FLOAT:request_time} %{QS:referer} %{QS:agent} "%{IP:xforward}"

    (2)tomcat

     3.一段小代码

    input {
    file {
    path => [ "/var/log/nginx/access.log" ]
    start_position => "beginning"
    ignore_older => 0
    }
    }

    filter {
    grok {
    match => { "message" => "%{NGINXACCESS}" }

    }
    geoip {
    source => "remote_ip"
    target => "geoip"
    database => "/etc/logstash/GeoLiteCity.dat"
    add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
    add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
    }

    mutate {
    convert => [ "[geoip][coordinates]", "float" ]
    convert => [ "response","integer" ]
    convert => [ "bytes","integer" ]
    replace => { "type" => "nginx_access" }
    remove_field => "message"
    }

    date {
    match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z"]

    }
    mutate {
    remove_field => "timestamp"

    }


    }
    output {
    elasticsearch {
    hosts => ["elk01:9200","elk02:9200","elk03:9200"]
    index => "logstash-nginx-access-%{+YYYY.MM.dd}"
    }
    stdout {codec => rubydebug} #调试的时候用的
    }

    以上两种都已经测试了

    使用json添加nginxlogstash


    log_format logstash_json '{ "@timestamp": "$time_iso8601",'
    '"@version":"1",'
    '"client": "$http_x_forwarded_for",'
    '"request_method": "$request_method",'
    '"request_uri": "$request_uri",'
    '"status": $status,'
    '"host": "$server_addr",'
    '"size": $body_bytes_sent,'
    '"responsetime": $request_time'
    '}';

    input {
    file {
    path => "/hwdata/logs/nginx/access_json.log"
    type => "appstore-accesslog"
    codec => "json"
    }
    }
    filter {
    mutate {
    gsub => [
    "client", ",*", "",
    "client", "-", "本机IP"
    ]
    }
    geoip {
    source => "client"
    add_tag => [ "geoip" ]
    database => "/etc/logstash/GeoLiteCity.dat"
    fields => ["country_name", "country_code2","region_name", "city_name", "real_region_name", "latitude", "longitude"]
    remove_field => [ "[geoip][longitude]", "[geoip][latitude]" ]
    add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
    add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
    }
    mutate {
    convert => [ "[geoip][coordinates]", "float"]
    }
    }
    output {
    redis {
    host => "redis_IP"
    port => "6379"
    db => "6"
    data_type => "list"
    key => "appstore-accesslog"
    }
    }

  • 相关阅读:
    Java + Element-UI 实现简单的树形菜单
    简单了解一下 Nginx
    使用阿里云 OSS 存储、访问图片(Java)
    JSR 303 进行后台数据校验
    SpringBoot 常用注解
    12、js——轮播图
    11、js——定时调用和延时调用
    11、js——BOM
    10、js——事件
    9、js——样式相关的操作
  • 原文地址:https://www.cnblogs.com/lize3379/p/6083895.html
Copyright © 2020-2023  润新知