暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

搭建ELK日志分析平台

小东IT技术分享 2019-03-11
241

为什么用到ELK:

一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

收集-能够采集多种来源的日志数据 传输-能够稳定的把日志数据传输到中央系统 存储-如何存储日志数据 分析-可以支持 UI 分析 警告-能够提供错误报告,监控机制 ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

ELK简介:

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

Filebeat隶属于Beats。目前Beats包含四种工具:

Packetbeat(搜集网络流量数据) Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据) Filebeat(搜集文件数据) Winlogbeat(搜集 Windows 事件日志数据)

本篇文章工作

1.安装kibana

2.安装logstash

3.配置logstash

4.kibana上查看日志

5.收集nginx日志

6.使用beats采集日志

上一篇 参考Elasticsearch的使用

安装kibana

可以通过官网下载然后上传到服务器

也可以服务器下载 解压即可

  1. wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.1-linux-x86_64.tar.gz

  2. tar zxvf kibana-6.2.1-linux-x86_64.tar.gz

复制

安装完成后,对kibana进行配置:

  1. vim /usr/local/elk/kibana/config/kibana.yml # 增加以下内容

  2. server.port: 5601 # 配置kibana的端口

  3. server.host: ip # 配置监听ip

  4. elasticsearch.url: "http://ip:9200" # 配置es服务器的ip,如果是集群则配置该集群中主节点的ip

  5. logging.dest: /var/log/kibana.log # 配置kibana的日志文件路径,不然默认是messages里记录日志

复制

创建日志文件:

  1. touch /var/log/kibana.log; chmod 777 /var/log/kibana.log

复制

启动kibana服务,并检查进程和监听端口:

  1. cd /usr/local/elk/kibana/bin

  2. ./kibana

  3. ps aux |grep kibana


  4. netstat -lntp |grep 5601

复制

注:由于kibana是使用node.js开发的,所以进程名称为node

然后在浏览器里进行访问,如:http://192.168.77.128:5601/ ,由于我们并没有安装x-pack,所以此时是没有用户名和密码的,可以直接访问的:

到此我们的kibana就安装完成了,很简单,接下来就是安装logstash,不然kibana是没法用的。

安装logstash

安装方法和kibnan一样 通过下载安装包解压

  1. wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.1.tar.gz

  2. tar -zxvf logstash-6.2.1.tar.gz

复制

安装完之后,先不要启动服务,先配置logstash收集nginx日志:

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

  1. vim /usr/local/elk/logstash/conf.d/nginx.conf # 增加如下内容

  2. input {

  3. file { # 指定一个文件作为输入源

  4. path => "/tmp/elk_access.log" # 指定文件的路径

  5. start_position => "beginning" # 指定何时开始收集

  6. type => "nginx" # 定义日志类型,可自定义

  7. }

  8. }

  9. filter { # 配置过滤器

  10. grok {

  11. 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}"} # 定义日志的输出格式

  12. }

  13. geoip {

  14. source => "clientip"

  15. }

  16. }

  17. output {

  18. stdout { codec => rubydebug }

  19. elasticsearch {

  20. hosts => ["ip:9200"]

  21. index => "nginx-test-%{+YYYY.MM.dd}"

  22. }

  23. }

复制

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

  1. cd /usr/local/elk/logstash/bin

  2. ./logstash --path.settings /usr/local/elk/logstash/ -f /usr/local/elk/logstash/conf.d/nginx.conf --config.test_and_exit

  3. Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties

  4. Configuration OK

复制

命令说明: --path.settings 用于指定logstash的配置文件所在的目录 -f 指定需要被检测的配置文件的路径 --config.testandexit 指定检测完之后就退出,不然就会直接启动了 检查完毕之后,进入你的nginx主机配置文件所在的目录中,修改配置文件:

  1. server {

  2. listen 80;

  3. #server_name '';


  4. location / {

  5. proxy_pass http://192.168.77.128:5601;

  6. proxy_set_header Host $host;

  7. proxy_set_header X-Real-IP $remote_addr;

  8. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  9. }


  10. access_log /tmp/elk_access.log main2;

  11. }

复制

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

  1. vim /usr/local/nginx/conf/nginx.conf

  2. log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" '

  3. '$status $body_bytes_sent "$http_referer" '

  4. '"$http_user_agent" "$upstream_addr" $request_time';

复制

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

  1. /usr/local/nginx/sbin/nginx -t

  2. nginx: [warn] conflicting server name "aaa.com" on 0.0.0.0:80, ignored

  3. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

  4. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

复制

这时在浏览器上就可以通过这个域名进行访问了

直接输入ip地址即可因为是80端口

访问成功后,查看生成的日志文件:

  1. ls /tmp/elk_access.log

  2. /tmp/elk_access.log

  3. wc -l !$

  4. wc -l /tmp/elk_access.log

  5. 45 /tmp/elk_access.log

复制

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

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

  1. cd /usr/local/elk/logstash/bin

  2. ./logstash -f /usr/local/elk/logstash/conf.d/nginx.conf #对应的文件也要进行加载

复制

通过浏览器访问

http://ip:9200/_cat/indices?v 出现

可以看到,nginx-test索引已经生成了,那么这时就可以到kibana上配置该索引:



配置完成之后就可以在 “Discover” 里进行查看nginx的访问日志数据了:

使用beats采集日志

之前也介绍过beats是ELK体系中新增的一个工具,它属于一个轻量的日志采集器,以上我们使用的日志采集工具是logstash,但是logstash占用的资源比较大,没有beats轻量,所以官方也推荐使用beats来作为日志采集工具。而且beats可扩展,支持自定义构建。

官方介绍:

https://www.elastic.co/cn/products/beats

在 主节点 上安装filebeat,filebeat是beats体系中用于收集日志信息的工具:

安装方法一样 官网下载/服务器下载

服务器下载

  1. wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.1-linux-x86_64.tar.gz

  2. tar -zxvf filebeat-6.2.1-linux-x86_64.tar.gz

复制

安装完成之后编辑配置文件:

  1. vim /etc/filebeat/filebeat.yml


  2. - type: log


  3. # Change to true to enable this prospector configuration.

  4. #enabled: false


  5. # Paths that should be crawled and fetched. Glob based paths.

  6. paths:

  7. - /tmp/elk_access.log


  8. output.elasticsearch:

  9. # Array of hosts to connect to.

  10. hosts: ["ip:9200"] # 并配置es服务器的ip地址

复制

修改完成后就可以启动filebeat服务了:

  1. cd /usr/local/elk/filebeat

  2. ./filebeat

复制

启动成功后,到es服务器上查看索引,可以看到新增了一个以filebeat-6.0.0开头的索引,这就代表filesbeat和es能够正常通信了:

es服务器能够正常获取到索引后,就可以到kibana上配置这个索引了:



以上这就是如何使用filebeat进行日志的数据收集,可以看到配置起来比logstash要简单,而且占用资源还少。


文章转载自小东IT技术分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论