【从零学ELK系列目录】
从零学ELK系列(一):为什么要跟我学从零学ELK系列
从零学ELK系列(二):VMware安装Centos(超详细图文教程)
从零学ELK系列(三):Centos安装Docker(超详细图文教程)
从零学ELK系列(四)Docker安装Elasticsearch(超详细图文教程)
从零学ELK系列(五):Docker安装kibana(超详细图文教程)
从零学ELK系列(六):Docker安装Logstash(超详细图文教程)
从零学ELK系列(七):Centos安装Filebeat(超详细图文教程)
从零学ELK系列(八):SpringBoot项目接入ELK(超详细图文教程)
从零学ELK系列(九):Nginx接入ELK(超详细图文教程)
【前言】
在前几篇博文中将ELK+Filebeat收集SpringBoot项目日志搭建完毕,本次我们将展示如何将Nginx接入我们搭建的日志系统,把步骤记录下来,一是方便自己以后安装,二是可以为大家做参考共享。
【一句总结一张架构图】
一、一句话总结学完本篇博文,你将学到什么?
Nginx接入ELK+Filebeat收集系统,Kibana设置展示日志
二、架构图
![9406356a9ceb57c29a4d0a6a26fc2822.png](https://i-blog.csdnimg.cn/blog_migrate/fe458f4b38d531e81fcb22e2eae7378c.jpeg)
【SpringBoot接入ELK】
一、环境:
1、Windows系统(本人是win10环境)
2、VMware10.0.1
3、Centos 7.4
4、Xshell5
5、Docker 19.03
6、Elasticsearch 7.2.0
7、Kibana 7.2.0
8、Logstash 7.2.0
9、Filebeat 7.2.0
10、SpringBoot项目 (项目地址:https://github.com/dangnianchuntian/springboot 版本号1.7.0-Release)
11、Nginx 1.16.1
二、Nginx接入步骤:
1、CentOS安装Nginx
(1)安装Nginx组件epel
yum install epel-release
![05a48b43ea330832dbfbc8c74c1e0bd2.png](https://i-blog.csdnimg.cn/blog_migrate/f3c69846e07de1f3e38b94a7e187f70a.jpeg)
(2)yum安装nginx
yum -y install nginx
![6568b8d1a47ff777608f6b73fcda8b50.png](https://i-blog.csdnimg.cn/blog_migrate/963a47f9c4aa9ee4d85de342aa1e8118.jpeg)
(3)启动nginx
nginx
(4)检查nginx是否启动成功
curl localhost
![81650692e7acbd396acb56349af90bd7.png](https://i-blog.csdnimg.cn/blog_migrate/2a01c2304d79f3afc4c0d7b2bc332fdd.jpeg)
2、配置Nginx
(1)查找nginx的配置文件
find / -name nginx.conf
![6bc1de0c4691e2ff22df15b4581983cc.png](https://i-blog.csdnimg.cn/blog_migrate/f341f7f9a9fe965a84d84c368900643f.jpeg)
(2)编辑配置文件增加日志输出的格式
vim /etc/nginx/nginx.conf
user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;events { worker_connections 1024;}http { log_format json '{ "@timestamp": "$time_iso8601", ' '"time": "$time_iso8601", ' '"remote_addr": "$remote_addr", ' '"remote_user": "$remote_user", ' '"body_bytes_sent": "$body_bytes_sent", ' '"request_time": "$request_time", ' '"status": "$status", ' '"host": "$host", ' '"request": "$request", ' '"request_method": "$request_method", ' '"uri": "$uri", ' '"http_referrer": "$http_referer", ' '"body_bytes_sent":"$body_bytes_sent", ' '"http_x_forwarded_for": "$http_x_forwarded_for", ' '"http_user_agent": "$http_user_agent" ' '}'; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf;}
(3)编辑项目配置文件
vim /etc/nginx/conf.d/zh_boot.conf
server { listen 8081; server_name 192.168.37.129; location / { proxy_pass http://192.168.37.129:8080; } access_log /elklogs/nginx-log/nginx_access.json json; }
(4)创建Nginx访问日志目录
mkdir /elklogs/nginx-log/ -p
(5)检查nginx配置文件是否正确
nginx -t
![1a9a8ea505446e76461d66b9506ab681.png](https://i-blog.csdnimg.cn/blog_migrate/56c08eb6e31aec9780b3a4eece12aefc.jpeg)
(6)重启nginx
nginx -s reload
3、启动项目(zh-boot)
//为防止影响将springadmin的client关闭java -jar -Dspring.boot.admin.client.enabled=false zh-boot.jar
![9aa1b202f9f4a0d8d9ddb7c8e5ee032c.png](https://i-blog.csdnimg.cn/blog_migrate/2842118688d6f997daad9bd8e5878800.jpeg)
4、通过nginx访问项目swagger验证nginx配置正确
http://192.168.37.129:8081/swagger-ui.html
![0f873e5a44682188f161fcec9fc75355.png](https://i-blog.csdnimg.cn/blog_migrate/a89abfb42e44128b59730a09f2ae3362.jpeg)
5、ELK+Filebeat增加nginx访问请求的收集
(1)在原来Logstash基础上增加收集nginx请求日志
a.编辑logstash配置文件
vim /data/elk/logstash/logstash.conf
input { beats { port => 5045 codec => json }}filter { if [fields][service] == "zhboot" { date { match => [ "requestTime" , "yyyy-MM-dd HH:mm:ss" ] target => "@timestamp" } mutate { remove_field => "parent" remove_field => "meta" remove_field => "trace" remove_field => "tags" remove_field => "prospector" remove_field => "span" remove_field => "fields" remove_field => "severity" remove_field => "@version" remove_field => "exportable" remove_field => "input" remove_field => "pid" remove_field => "thread" remove_field => "beat" remove_field => "host" remove_field => "offset" remove_field => "log" } }}output { if [fields][service] == "nginx_zhboot" { elasticsearch { hosts => ["172.17.0.2:9200"] index => "nginx_zhboot_%{+YYYYMM}" } } elasticsearch { hosts => ["172.17.0.2:9200"] index => "%{[esindex]}_%{+YYYYMM}" }}
b.停止logstash容器
docker stop lst
c.将配置文件copy到logstash容器内
docker cp logstash.conf lst:/usr/share/logstash/config/
d.启动logstash容器
docker start lst
(2)在原来Filebeat基础上增加收集nginx请求日志
a.编辑Filebeat配置文件
vim /data/elk/filebeat-7.2.0-linux-x86_64/filebeat.yml
filebeat.inputs:- type: log enabled: true paths: - /elklogs/zh-boot-allrequest-log/*.json fields: service: zhbootfilebeat.config.modules: path: /data/elk/filebeat-7.2.0-linux-x86_64/modules.d/*.yml reload.enabled: falseoutput.logstash: hosts: ["172.17.0.4:5045"]processors: - add_host_metadata: ~ - add_cloud_metadata: ~filebeat.inputs:- type: log enabled: true paths: - /elklogs/nginx-log/*.json fields: service: nginx_zhbootfilebeat.config.modules: path: /data/elk/filebeat-7.2.0-linux-x86_64/modules.d/*.yml reload.enabled: falseoutput.logstash: hosts: ["172.17.0.4:5045"]processors: - add_host_metadata: ~ - add_cloud_metadata: ~
b.启动filebeat
sh /data/elk/filebeat-7.2.0-linux-x86_64/start.sh
三、进行验证:
1、正常请求的验证
(1)用Postman进行访问一下(用swagger直接访问的话不通过nginx)
![21b820b7516d27ae8456df79f3a9b331.png](https://i-blog.csdnimg.cn/blog_migrate/4aa06586765eb6485efaf0684d45e198.jpeg)
(2)在Kibana中创建索引
a.create index pattern
![c748800aa2d1bf9de1c73f6155cd84bd.png](https://i-blog.csdnimg.cn/blog_migrate/55ce20ab0116fb10817e778ac9a17dd9.jpeg)
b.Define index pattern
![4e4a2d2fdc67a0b5c2db6cccb1934c76.png](https://i-blog.csdnimg.cn/blog_migrate/1e46227bc506a2b467f7397e6ef32b61.jpeg)
c.Configure settings
![4f3b4bda9c265f7ef72f3a9ee5961617.png](https://i-blog.csdnimg.cn/blog_migrate/967348248c9c198b75cecddeb45e5331.jpeg)
d.在Discover中查看刚才的访问
![eae9736c7b719b3ae1e00510862dae1e.png](https://i-blog.csdnimg.cn/blog_migrate/81af25d877dce1098ef6b118d699ff4b.jpeg)
2、异常请求的演示
a.用postman模拟不存在的url
![f700eaa3fa403cb454d0e11ab6aafae8.png](https://i-blog.csdnimg.cn/blog_migrate/9255e9192b400d9676c69e0040f05b90.jpeg)
b.在Kibana中查看
![6f494fdd41f43e9b0dcabf102aba6a34.png](https://i-blog.csdnimg.cn/blog_migrate/0fa8743d4ee14cbd47a5a7e72f23a349.jpeg)
【总结】
Nginx做为流量的入口,通过对入口的日志收集以及接下来配合相关错误的监控,可以有效的避免攻击,快速排错(比如和第三方交互,可以通过Nginx的日志确认第三方是否发起请求)。