ELK日志可视化快速搭建

在工作中随着业务量的增大和项目的增多,日志量随之增大,我们需要对日志进行集中化管理,将所有机器上的日志信息收集、汇总到一起。完整的日志数据具有非常重要的作用:
1)信息查找:通过检索日志信息,定位相应的bug,找出解决方案。
2)服务诊断:通过对日志信息进行统计、分析,了解服务器的负荷和服务运行状态,找出耗时请求进行优化等等。
3)数据分析:如果是格式化的log,可以做进一步的数据分析,统计、聚合出有意义的信息,比如根据请求中的商品id,找出TOP10用户感兴趣商品。
开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成:

1)ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。在elasticsearch中,所有节点的数据是均等的。

2)Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

3)Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志.

4)beats中的filebeat可以将多台机器的日志数据进行采集发送至logstash或elasticsearch,然后通过kiabana进行页面可视化展示。

(注:安装以上服务需要先安装JAVA,并配置好环境变量)
安装篇
系统环境:CentOS Linux release 7.4.1708 (Core)
软件下载:https://www.elastic.co/downloads (所需的软件都可以在该网站下载,所有软件版本都要保持一致)

1.Elasticsearch 源码包的安装与配置:

解压elasticsearch,我这里用的是elasticsearch-6.5.4:

tar –zvxf elasticsearch-6.5.4.tar.gz

将解压后的elasticsearch-6.5.4放到所需要的目录(自定义我这里放到了/usr/local/):

mv elasticsearch-6.5.4 /usr/loca l/ elasticsearch-6.5.4

到目录下对elasticsearch文件进行配置:

cd /usr/loca l/ elasticsearch-6.5.4

ll

vim config/elasticsearch.yml

对elasticsearch.yml文件内以下项进行修改:
cluster.name: elk # 组名(同一个组,组名必须一致)
node.name: elk-node1 # 节点名称,建议和主机名一致
path.data: /data/es-data # 数据存放的路径(日志路径可以自定义)
path.logs: /var/log/elasticsearch/ # 日志存放的路径
network.host: 0.0.0.0 # 网络设置
http.port: 9200 # 端口

关于elasticsearch 的启动需要创建一个普通组和用户进行启动,否则启动会报错。
 # groupadd elklog

adduser elk

 # useradd -g test phpq //新建phpq用户并增加到test工作组

 # passwd elklog
对/usr/local/elasticsearch-6.5.4进行赋权;
 # chown –R elklog.elklog  /usr/local/elasticsearch-6.5.4

用户名 密码 目录
切换用户:
# su elklog
启动 elasticsearch 服务,在/usr/local/elasticsearch-6.5.4目录下执行:
# ./bin/elasticsearch -d 后台执行
查看相关端口看是否启动:
# netstat –tunpl
默认为9200和9300端口

也可以通过浏览器进行验证:
http://IP:9200 出现如下页面表示安装成功启动成功。

2.为elasticsearch安装heard插件,安装之前要先安装nodjs插件:
elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等

下载heard:
# git clone git://github.com/mobz/elasticsearch-head.git
等待下载完成后执行以下命令安装grunt-cli :
# npm install -g grunt-cli 可不安装
执行以下命令安装grunt,要在head下载完成后进入到head的文件下执行:

cd elasticsearch-head #进入到head目录

npm install -g cnpm --registry=https://registry.npm.taobao.org

速度较慢或者安装失败,所以使用国内镜像

npm install grunt --save #安装grunt

安装npm依赖包:

npm install 必须要走,否则会缺包

所有包安装完成后对heard的Gruntfile.js配置文件进行修改:

vim Gruntfile.js

找到以下信息,增加hostname项:
更改前:
connect: {
server: {
options: {
port: 9100,
base: ‘.’,
keepalive: true
}
}
更改后:
connect: {
server: {
options: {
hostname:’0.0.0.0’,
port: 9100,
base: ‘.’,
keepalive: true
}
}

以上都更改完成后需要添加以下两行到/usr/local/elasticsearch-6.5.4/config/ elasticsearch.yml下面实现可以正常访问:

      http.cors.enabled: true

http.cors.allow-origin: “*”

启动heard插件,要在该插件目录下执行以下命令进行启动:
# grunt server
执行后出现以下输出说明启动成功:
Running “connect:server” (connect) task
Waiting forever…
Started connect web server on http://localhost:9100
可通过浏览器进行访问测试一下:

3.安装logstash,也是从https://www.elastic.co/downloads 下载的源码包(所需的软件都可以在该网站下载,所有软件版本都要保持一致)
解压

tar -zvxf logstash-6.5.4.tar.gz

mv logstash-6.5.4 /usr/local/ logstash-6.5.4 #所放目当可自定

1.编辑配置文件,可自行在logstash/conf下创建一个自己需要的.conf文件:

touch logstash.conf

vim logstash.conf

我的配置内容如下:

也可用下面这个
然后做好input ,filter,output三大块, 其中input是吸取logs文件下的所有log后缀的日志文件,filter是一个过滤函数,这里不用配置,output配置了导入到
hosts为127.0.0.1:9200的elasticsearch中,每天一个索引。

input {
file {
type => “log”
path => “/logs/*.log”
start_position => “beginning”
}
}

output {
stdout {
codec => rubydebug { }
}

elasticsearch {
hosts => “127.0.0.1”
index => “log-%{+YYYY.MM.dd}”
}
}
3.

配置完成后启动logstash:

./bin/logstash -e config/XXX.conf

关于logstash的配置,下面做一下介绍:
(1)Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理和转发日志的工具,支持处理所有可以抛出来的日志类型。
(2)Input:输入数据到logstash,file是从文件系统中读取,redis是从缓存中读取,beats是从filebeat中读取。
(3)Filters:数据中间处理,对数据进行操作。
(4)outputs是logstash处理管道的最末端组件。一个event可以在处理过程中经过多重输出,elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。file:将event数据保存到文件中。
graphite:将event数据发送到图形化组件中,一个很流行的开源存储图形化展示的组件。
codecs 是基于数据流的过滤器,它可以作为input,output的一部分配置,Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。

4.安装kibana , 从https://www.elastic.co/downloads 下载的源码包(所需的软件都可以在该网站下载,所有软件版本都要保持一致)
解压

tar –zvxf kibana-6.5.4.tar.gz

mv kibana-6.5.4 /usr/local/kibana

修改配置文件:
# vim /usr/local/kibana/config/kibana.yml

 更改如下:
    server.port: 5601  #放开端口

server.host: “0.0.0.0”

    server.name: "kabba-server"  #kibana服务名
     
     elasticsearch.url: http://IP:9200  # elasticsearch服务的IP地址   

配置完成后启动kibana:
# ./bin/kibana
启动后可以在浏览器进行一下测试访问:

我的kibana因为之前在logstash里做过日志导入到elasticsearch里,所有已经有LOG分析的数据进行展现了。

5.filebeat的安装配置:
从https://www.elastic.co/downloads 下载的源码包(所需的软件都可以在该网站下载,所有软件版本都要保持一致)
安装很简单,就是将filebeat的源码包解压放到你指定的目录下就行:
# tar –zvxf filebeat-6.5.4.tar.gz
# mv filebeat-6.5.4 /usr/local/filebeat-6.5.4

  配置filebeat:
     # vim  filebeat.yml
  • type: log #日志的默认type

          enabled: true  
          paths:
             - /tem/logs/*/nod_*.log  #配置所要获取的日志路径
        fields:
              service: nod_log        #定义日志的名称
          tail_files: true
    

output.logstash:
hosts: [“1.1.1.1:5044”] #将filebeat获取到的日志转到logstash处理

       配置完成后启动filebeat:
       # nohup ./filebeat -e -c filebeat.yml > /dev/null 2>&1 &   #后端启动 
       
       启动后可以到logstash上看出正在对日志处理:

同时通过kibana也能看到filebeat通过logstash处理后的日志:

后台启动方式
nohup ./kibana &exit
nohup ./logstash -f spring-boot.conf &

filebeat文件的配置样例:

filebeat.prospectors:

  • type: log
    enabled: true
    paths:
    • /tmep/logs//.log
      fields:
      service: nod_log
      tail_files: true

      output.logstash:
      hosts: [“139.224.151.76:5044”]

Logstash文件配置样例:

input {
beats {
port => 5044
}
}

filter {
if [fields][service] == ‘nod_log’ {
grok {
match => [“message”,"%{DATA:logtime}|%{DATA:std}|%{NUMBER:loss}|%{NUMBER:delay}$"]
}

           date {
               match => ["logtime", "yyyy-MM-dd HH:mm:ss"]
               target => "@timestamp"
               remove_field => ["logtime","message","[beat][version]","[beat][name]","offset","prospector","tags","source"]
            }
            mutate {
              convert => [
                  "loss" , "float",
                  "delay" , "integer" ]
            }

}
}

output {
if [fields][service] == “pping_log” {
if “_grokparsefailure” not in [tags] {
elasticsearch {
hosts => [“139.224.151.76:9200”]
index => “logstash-ppinglog-%{+YYYY.MM.dd}”
}
}
}

}

猜你喜欢

转载自blog.csdn.net/liuxiangyang_/article/details/89185695