Elasticsearch+logstash+kibana实现日志分析(实验)


一、前言


  

  Elastic Stack(旧称ELK Stack),是一种能够从任意数据源抽取数据,并实时对数据进行搜索、分析和可视化展现的数据分析框架。(hadoop同一个开发人员)

  java 开发的开源的全文搜索引擎工具

  基于lucence搜索引擎的

  采用 restful - api 标准的

  高可用、高扩展的分布式框架

  实时数据分析的

  官方网站: https://www.elastic.co/products


  

为什么要用elk?

  服务器众多,组件众多,日志众多

  发现问题困难,技能要求高


  日志主要包括系统日志、应用程序日志和安全日志。

  系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。

  当务之急我们使用集中化的日志管理,例如:开源的 syslog ,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep 、 awk和 wc 等 Linux 命令能实现检索和统计,

  但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

  开源实时日志分析 ELK 平台能够完美的解决我们上述的问题, ELK 由 ElasticSearchLogstashKiabana 三个开源工具组成。



 二、安装过程


先安装java环境

[root@localhost ~]# yum install -y java-1.8.0-openjdk

 

上传在官网下载好的包(官网:https://www.elastic.co/downloads/elasticsearch

在解压目录下创建,log,data文件目录:

修改elastic.yaml:主机名字

node.name: node-1

 

修改elastic.yaml:监听主机

network.host: 192.168.113.193

 

开启 haed 插件

http.cors.enabled:true

http.cors.allow-origin:"*"

 

创建启动elasticsearch 的普通用户

[root@localhost ~]# useradd xhk

[root@localhost ~]# passwd xhk

 

给予用户目录的权限

[root@localhost ~]# chown -R xhk:xhk /usr/local/src/elasticsearch-5.6.3

 

启动之前,有几个参数要修改,否则会报错

问题1max file descriptors [4096] for elasticsearch process likely toolow, increase to at least [65536]

修改/etc/security/limits.conf添加或修改下列参数

*       hard    nofile           65536

*       soft    nofile           65536

 

 

 

问题2[1]: max virtual memory areas vm.max_map_count [65530] is too low,increase to at least [262144]

修改/etc/sysctl.conf添加或修改下列参数

vm.max_map_count=262144

添加后记得敲 sysctl -p ,使配置生效

 

接下来,切换到用户 xhk,启动elasticsearch

[root@localhost ~]# su – xhk

[xhk@localhost ~]$ /usr/local/src/elasticsearch-5.6.3/bin/elasticsearch

启动elastic:直接用curl访问9200端口成功即可


=====================================================================================


还可以为其安装一个head插件

安装需要的包

[root@localhost ~]# yum install -y git npm openssl

 

先在目录下创建一个名为 head 的文件夹

[root@localhost ~]# cd /usr/local/src/elasticsearch-5.6.3

[root@localhost elasticsearch-5.6.3]# mkdir head

[root@localhost head]# git clonegit://github.com/mobz/elasticsearch-head.git

[root@localhost head]# cd elasticsearch-head/

[root@localhost elasticsearch-head]# npm install

[root@localhost elasticsearch-head]# npm install -g grunt-cli

 

修改配置文件

[root@localhost ~]# vim /usr/local/src/elasticsearch-5.6.3/head/elasticsearch-head/Gruntfile.js

    server: {
           options: {
                 port: 9100,
                 hostname: '0.0.0.0',     #####添加这句。
                 base: '.',
                      keepalive: true
                             }
                    }
              }

 

启动服务,并用网页访问192.168.163.193:9100

[root@localhost elasticsearch-head]# grunt server

Elasticsearch+logstash+kibana实现日志分析(实验)_第1张图片

 

==============================================================================

接下来安装logstash,这个就很容易安装了,直接解压然后进入目录使用就行了

[root@localhost ~]# cd /usr/local/src

[root@localhost src]# tar xf logstash-5.6.3.tar.gz

[root@localhost src]# mkdir /logstash

[root@localhost src]# cd /logstash/

 

找一段nginx默认日志,并传入到elasticsearch

[root@localhost logstash]# vim input_output.conf

input {
   file {
       path => "/logstash/xhk.txt"
       type => "nginxlog"
       start_position => "beginning"
    }
}
filter{
   grok {
       match => {
       "message" => "%{IPORHOST:IP} - %{USER:User}\[%{HTTPDATE:Time}\] \"%{WORD:HTTP_Method} %{NOTSPACE:Request}HTTP/%{NUMBER:HTTP_Version}\" %{NUMBER:Status} (?:%{NUMBER:Bytes}|-)\"(?:%{URI:HTTP_Referer}|-)\"\"%{GREEDYDATA:User_Agent}\""
    }
    }
}
output{
    elasticsearch {
      action => "index"
      hosts  =>"192.168.163.193:9200"
      index  =>"xhk-%{+yyyy.MM.dd}"
   }
   stdout {
   codec => rubydebug
    }
}

 

执行命令传入命令

[root@localhost logstash]# /usr/local/src/logstash/bin/logstash -f input_output.conf


传入的时候,elasticsearch 可能会出现该报错

[2017-11-05T02:16:39,878][WARN][o.e.m.j.JvmGcMonitorService] [node-1] [gc][young][20][8] duration [2.5s],collections [1]/[2.6s], total [2.5s]/[3.4s], memory[69.8mb]->[65.9mb]/[1.9gb], all_pools {[young][39.3mb]->[18.1mb]/[66.5mb]}{[survivor] [8.3mb]->[6.9mb]/[8.3mb]}{[old][22.2mb]->[41.1mb]/[1.9gb]}

[2017-11-05T02:16:39,913][WARN ][o.e.m.j.JvmGcMonitorService][node-1] [gc][20] overhead, spent [2.5s] collecting in the last [2.6s]

 

解决:

[root@localhost ~]# vim /usr/local/src/elasticsearch-5.6.3/config/jvm.options

添加以下2个参数

Xmx=300m

Xms=300m

 

=====================================================================================


安装kibana

传入一个rpm包直接yum安装

[root@localhost ~]# cd /usr/local/src/

[root@localhost src]# ls

kibana-5.6.3-x86_64.rpm

[root@localhost src]# yum install -y kibana-5.6.3-x86_64.rpm

 

修改配置文件,指向elasticsearch

[root@localhost src]# vim /etc/kibana/kibana.yml

elasticsearch.url: http://192.168.163.194:9200

server.host: "192.168.163.196"

 

 

启动服务

[root@localhost src]# systemctl start kibana

 

使用浏览器访问 http://192.168.163.193:5601

创建图表,效果如下


Elasticsearch+logstash+kibana实现日志分析(实验)_第2张图片