logstash收集nginx日志

因为我的nginx日志是通过filebeat采集的,所以这里就借用大佬的文章,他的这两篇ELK的文章给了我很大帮助,以下是他的链接地址:
https://blog.51cto.com/zero01/2082794

和收集syslog一样,首先需要编辑配置文件,这一步在logstash服务器上完成:

[root@data-node1 ~]# vim /etc/logstash/conf.d/nginx.conf  # 增加如下内容
input {
  file {  # 指定一个文件作为输入源
    path => "/tmp/elk_access.log"  # 指定文件的路径
    start_position => "beginning"  # 指定何时开始收集
    type => "nginx"  # 定义日志类型,可自定义
  }
}
filter {  # 配置过滤器
    grok {
        match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"}  # 定义日志的输出格式
    }
    geoip {
        source => "clientip"
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => ["192.168.77.128:9200"]
        index => "nginx-test-%{+YYYY.MM.dd}"
  }
}

同样的编辑完配置文件之后,还需要检测配置文件是否有错:

[root@data-node1 ~]# cd /usr/share/logstash/bin
[root@data-node1 /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK
[root@data-node1 /usr/share/logstash/bin]# 

检查完毕之后,进入你的nginx虚拟主机配置文件所在的目录中,新建一个虚拟主机配置文件:

[root@data-node1 ~]# cd /usr/local/nginx/conf/vhost/
[root@data-node1 /usr/local/nginx/conf/vhost]# vim elk.conf
server {
      listen 80;
      server_name elk.test.com;

      location / {
          proxy_pass      http://192.168.77.128:5601;
          proxy_set_header Host   $host;
          proxy_set_header X-Real-IP      $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }

      access_log  /tmp/elk_access.log main2;
}

配置nginx的主配置文件,因为需要配置日志格式,在 log_format 那一行的下面增加以下内容:

[root@data-node1 ~]# vim /usr/local/nginx/conf/nginx.conf
log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$upstream_addr" $request_time';

完成以上配置文件的编辑之后,检测配置文件有没有错误,没有的话就reload重新加载:

[root@data-node1 ~]# /usr/local/nginx/sbin/nginx -t
nginx: [warn] conflicting server name "aaa.com" on 0.0.0.0:80, ignored
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@data-node1 ~]# /usr/local/nginx/sbin/nginx -s reload

由于我们需要在windows下通过浏览器访问我们配置的 elk.test.com 这个域名,所以需要在windows下编辑它的hosts文件增加以下内容:

192.168.77.130 elk.test.com

这时在浏览器上就可以通过这个域名进行访问了:
在这里插入图片描述
访问成功后,查看生成的日志文件:

[root@data-node1 ~]# ls /tmp/elk_access.log 
/tmp/elk_access.log
[root@data-node1 ~]# wc -l !$
wc -l /tmp/elk_access.log
45 /tmp/elk_access.log

如上,可以看到,nginx的访问日志已经生成了。

重启logstash服务,生成日志的索引:

systemctl restart logstash

重启完成后,在es服务器上检查是否有nginx-test开头的索引生成:

[root@master-node ~]# curl '192.168.77.128:9200/_cat/indices?v' 
health status index                 uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana               6JfXc0gFSPOWq9gJI1ZX2g   1   1          2            0     14.4kb          7.2kb
green  open   system-syslog-2018.03 bUXmEDskTh6fjGD3JgyHcA   5   1        902            0      1.1mb        608.9kb
green  open   nginx-test-2018.03.04 GdKYa6gBRke7mNgrh2PBUA   5   1         45            0      199kb         99.5kb

可以看到,nginx-test索引已经生成了,那么这时就可以到kibana上配置该索引:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置完成之后就可以在 “Discover” 里进行查看nginx的访问日志数据了:
在这里插入图片描述
ES优化:

当有大量索引存进ES后,有可能会报这个错误,然后无法继续写入

“status”=>400, “error”=>{“type”=>“validation_exception”, “reason”=>"Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [1000]/[1000] maximum shards open

这是因为elasticsearch7版本以上的,默认只允许1000个分片,因为集群分片数不足引起的。

解决方式是

curl -XPUT -H "Content-Type:application/json" -d '{"transient":{"cluster":{"max_shards_per_node":10000}}}' -u elastic:ES密码 'http://127.0.0.1:9200/_cluster/settings'

这样就可以将分片数量扩大到10000了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值