前言

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。
Filebeat 内置有多种模块(Apache、Cisco ASA、Microsoft Azure、NGINX、MySQL 等等),可针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。
Elasticsearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。
Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
(来着官方网站的介绍)
本文一到四步骤分别介绍filebeat和ELK的配置第五步介绍核心过程。

结构图
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图1

准备

1.系统版本
本实验使用的系统情况:
Nginx+filebeat——64位Linux
ELK——64位Windows7
2.Nginx的搭建和安装(这里不再演示)
3.filebeat及EIK的下载
在官方网站下载最新或其他历史版本filebeat、Elasticsearch、Logstash、Kibana的。这里我们都选择7.5.1版本。注意它们的版本要保持一致。下载好后直接解压即可。
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图2

Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图3

一、安装配置Elasticsearch

1.修改配置文件。
(配置顺序无先后,启动顺序下文说明。)
一般配置可以默认,若需可修改数据路径、日志路径和端口号,这里我们选择接受Logstash发送的数据不再修改默认设置。默认的端口仍为9200。
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图4
2.启动。
打开bin文件中的elasticsearch.bat即可启动。
在浏览器打开http://localhost:9200/即可看到以下配置,启动正常。
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图5

二、安装配置Kibana

1.修改配置文件
1)打开配置文件kibana.yml。Kibana端口号和启动路径可默认也可根据所需进行配置。
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图6
2)注意elasticsearch地址的配置。我这里Elasticsearch和Kibana在同一台电脑所以配置为elasticsearch.hosts: [“http://localhost:9200"]。结合实际情况改为自己需要的地址和端口。
2.启动
双击bin中的kibana.bat即可启动。
3.打开Kibana界面。
在浏览器中输入配置的地址和端口号即可。默认为loadhost:5061,我这里有所改动。当出现Kibana界面即配置成功。
添加索引模式在后文演示。

三、安装配置filebeat

1.修改配置文件
在Linux(本实验使用的为虚拟机)解压下载的文件后,找到配置文件filebeat.yml,也可自己新建配置文件进行编辑。
首先我们要通过Nginx接受数据。修改路径。 注意enable改为true。路径改为Nginx的日志路径,根据自己情况修改。

  1. - type: log
  2. # Change to true to enable this input configuration.
  3. enabled: true
  4. # Paths that should be crawled and fetched. Glob based paths.
  5. paths:
  6. - /usr/local/nginx/logs/access.log

2) 然后我们修改输入地址,在这里我们将Elasticsearch output 都注释掉,使用Logstash output。去掉多余的#, 在hosts: [“xxx.xxx.xxx.xxx:5044”]添加Logstash地址及端口号。若是本地即为loadhost:5044,不是则一定要修改到相应地址。

  1. #================================ Outputs =====================================
  2. # Configure what output to use when sending the data collected by the beat.
  3. #-------------------------- Elasticsearch output ------------------------------
  4. #output.elasticsearch:
  5. # Array of hosts to connect to.
  6. #hosts: ["localhost:9200"]
  7. # Optional protocol and basic auth credentials.
  8. #protocol: "https"
  9. #username: "elastic"
  10. #password: "changeme"
  11. #----------------------------- Logstash output --------------------------------
  12. output.logstash:
  13. # The Logstash hosts
  14. hosts: ["xxx.xxx.xxx.xxx:5044"]
  15. # Optional SSL. By default is off.
  16. # List of root certificates for HTTPS server verifications
  17. #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
  18. # Certificate for SSL client authentication
  19. #ssl.certificate: "/etc/pki/client/cert.pem"
  20. # Client Certificate Key
  21. #ssl.key: "/etc/pki/client/cert.key"

其他配置可根据自己需要修改。
2.启动
进入filebeat文件下,输入filebeat -e -c filebeat.yml即可启动。
注意:
1) filebeat服务启动应在Logstash服务后,后文演示。
2) 启动时一定要选着自己相应的配置文件,这里是filebeat.yml。
若启动正常,filebeat默认每30秒检查数据的更新。如图:
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图7

四、简单配置Logstash

1.修改配置文件(重点)
1)这里我直接将配置文件写在bin文件夹。(启动方便,你也可以写在config文件夹中)新建配置文件logstash-test.conf。基本内容如下:

Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图8
这个是我基本完成后的配置,先跳过,下文我们逐步进行。
2.启动
配置完成后,在命令行中输入
logstash.bat -f logstash-test.conf config.test_and_exit
测试配置文件是否正确,显示OK说明配置正确。
在命令行中输入
logstash.bat -f logstash-test.conf 启动服务
如图—config.reload.automatic 设置自动加载(修改配置文件无需重启)
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图9

五、系统启动过程及相关配置。

注意:启动时应按照先Elasticsearch在Logstash后filebeat,最后Kibana。这样既不会报错,也容易看出结果。
1.日志格式修改
1)
我们先测试一下自己的Nginx是否正常读取日志信息。
tail -f 在日志文件路径
我这里为: tail -f /vusr/local/nginx/access.log即可看到不到更新的日志信息。(若服务器访问数量较少可自己动手刷新几下。)
2)
打开自己的Nginx配置文件nginx.conf修改中日志格式为:

  1. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  2. '$status $body_bytes_sent "$http_referer" '
  3. '"$http_user_agent" "$http_x_forwarded_for"';
  4. access_log logs/access.log main;

也有的版本本身就存在看情况。
2.Logstash配置详解
1)
输入无需改正

  1. input {
  2. beats {
  3. port => 5044
  4. }
  5. }

2)
在Logstash文件bin中添加格式文件nginx-patterns.txt(位置随意,但是注意引用),内容为:

  1. NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[% {HTTPDATE:time_local}\] \"%{DATA:request}\" %{INT:status} %{NUMBER:bytes_sent} \"% {DATA:http_referer}\" \"%{DATA:http_user_agent}\" \"%{DATA:http_x_forwarded_for}\"

这个格式是对应上面你的日志文件。你可以根据自己需要的服务器的访问信息进行编写。(小鬼我在之前也不懂,不过一分钟改好了。)
3)
下面我们就详细的说明一下过滤——filter。

  1. filter {
  2. grok {
  3. patterns_dir => "nginx-patterns.txt"
  4. match => { "message" => "%{NGINX_ACCESS}"}
  5. remove_tag => [ "_grokparsefailure" ]
  6. add_tag => [ "nginx_access" ]
  7. }
  8. }
  1. patterns_dir => "nginx-patterns.txt"
  2. match => { "message" => "%{NGINX_ACCESS}"}

这两行是控制信息格式。

  1. remove_tag => [ "_grokparsefailure" ]
  2. add_tag => [ "nginx_access" ]

这两行是标签。
(哈,估计你通过上面内容都看懂了,过滤就是这么简单,根据需要自己编写吧。)
4)
为了是确保日志可通过filebeat采集到,我们先修改Logstash配置使其输出到控制台而不是Elasticsearch。

  1. output {
  2. stdout { codec => rubydebug }
  3. }

3.采集数据测试
完成以上第二步中的四个小步骤我们就可以检测一下结果了。
1)
先启动Logstash,在启动filebeat(怎么启动上文有写)。
2)
当我们启动filebeat后就可以发现Logstash获取的信息输出到控制台。如果,没有出现这样的信息,那就再检测一下自己的配置是否写的正确。Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图10
4.转发数据到elasticsearch
完成上图测试后再次修改Logstash的配置文件是数据输入到elasticearch中。

  1. output {
  2. elasticsearch {
  3. hosts => ["localhost:9200"]
  4. index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  5. }
  6. }

其中hosts是输出地址;index是索引,这是就是Kibana看到的索引。

  1. index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"

这条索引获取了beat方式和版本信息,数据以每天为单位创建新的索引。格式可以根据自己的需求来改动。
5.添加索引模式
1)
在浏览器中输入Kibana的地址。
点开添加索引模式,如图
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图11
2)
这是你就发现出现一条索引,直接添加索引。注意只写前缀加“*”就可匹配到。
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图12
下一步设置时间戳。
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图13
3)
这是点击Discover就可所搜到自己创建的模式。
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图14
做到这时就可以看到采集的数据了。如果服务器访问量较少的话可以动手修改每次刷新的时间等。
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图15

六、出错问题分享

1.Logstash在控制台输出信息为空
如图:
Nginx filebeat Elasticsearch Logstash Kibana日志收集分析系统搭建过程详解 - 图16
解决:遇到这样的情况很明显Logstash启动了配置文件是格式没有问题。我们基本可以断定是没有采集到数据。可以检测input是否写错了,或filebeat是否启动成功,路径是否正确等。若是多行数据显示空,比如点击这里这是中文乱码问题。
2.Kibana不能创建索引模式
Elasticsearch没有传递数据的时候是不能创建索引,所以没有创建索引的提示。还是要检测是哪里没有数据传递。
3.没有启动对应的配置文件
filebeat和Logstash启动时要加上自己写的或修改的配置文件,一旦忘记了启动默认配置文件可能与自己想要的结果不符。
还有几个logstash启动的问题分享,点击这里查看。

总结

到这里基础的日志系统搭建完成了。假期前慌着回家学习过程中一直出现各种低级的小问题,在家搭建的时候发现其实过程很简单。我在初期是“全网”查找资料,所以现在写下这份相比较详细的过程希望更够帮助更多读者。因为文字的局限性很多,很多小问题知识点没有解释清楚,比如:Kibana仪表盘数据展示分析等,大家想要了解的话可以自行深入学习。
本人小鬼(也是小白),文档中有什么编辑问题或解释不清楚的地方希望大家在指正,一起讨论学习哦。

参考
https://blog.csdn.net/zhouxinhong/article/details/86518015
https://www.bilibili.com/video/av53652729