当前位置 主页 > 服务器问题 > nginx问题汇总 >

    详解用ELK来分析Nginx服务器日志的方法(2)

    栏目:nginx问题汇总 时间:2018-09-29 16:09

    好了,现在进一步配置了。

    nginx中的日志存储格式

    nginx由于有get请求,也有post请求,get请求的参数是会直接显示在日志的url中的,但是post请求的参数呢,却不会在access日志中体现出来。那么我想要post的参数也进行存储纪录下来。就需要自己定义一个log格式了。

    复制代码 代码如下:

    log_format logstash '$http_host $server_addr $remote_addr [$time_local] "$request" $request_body $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time $upstream_response_time';


    这里的requestbody里面存放的就是POST请求的body了,然后GET请求的参数在requestbody里面存放的就是POST请求的body了,然后GET请求的参数在request里面。具体怎么分析,我们在indexer中再想。

    这里的server_addr存放的是当前web机器的IP,存这个IP是为了分析日志的时候可以分析日志的原始来源。

    下面是一个GET请求的例子:

    复制代码 代码如下:

    api.yejianfeng.com 10.171.xx.xx 100.97.xx.xx [10/Jun/2015:10:53:24 +0800] "GET /api1.2/qa/getquestionlist/?limit=10&source=ios&token=12343425324&type=1&uid=304116&ver=1.2.379 HTTP/1.0" - 200 2950 "-" "TheMaster/1.2.379 (iPhone; iOS 8.3; Scale/2.00)" 0.656 0.654


    下面是一个POST请求的例子:

    复制代码 代码如下:

    api.yejianfeng.com 10.171.xx.xx 100.97.xx.xx [10/Jun/2015:10:53:24 +0800] "POST /api1.2/user/mechanicupdate/ HTTP/1.0" start_time=1276099200&lng=110.985723&source=android&uid=328910&lat=35.039471&city=140800 200 754 "-" "-" 0.161 0.159


    顺便说下,这里知识在nginx.conf中定义了一个日志格式,还要记得在具体的服务中加入日志存储。比如

    listen    80;server_name api.yejianfeng.com;access_log /mnt/logs/api.yejianfeng.com.logstash.log logstash;

    log_agent的配置

    这个配置就是往redis队列中塞入日志就行。output的位置设置为redis就行。

    input {
            file {
                    type => "nginx_access"
                    path => ["/mnt/logs/api.yejianfeng.com.logstash.log"]
            }
    }
    output {
            redis {
                    host => "10.173.xx.xx"
                    port => 8001
                    password => pass
                    data_type => "list"
                    key => "logstash:redis"
            }
    }
    log_indexer的配置

    log_indexer的配置就比较麻烦了,需要配置的有三个部分