在工作中随着业务量的增大和项目的增多,日志量随之增大,我们需要对日志进行集中化管理,将所有机器上的日志信息收集、汇总到一起。完整的日志数据具有非常重要的作用:
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 (所需的软件都可以在该网站下载,所有软件版本都要保持一致)
,以下提供下载地址:

elasticsearch:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.1.tar.gz

logstash:https://artifacts.elastic.co/downloads/logstash/logstash-5.4.1.tar.gz

kibana:https://artifacts.elastic.co/downloads/kibana/kibana-5.4.1-linux-x86_64.tar.gz
filebeat:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.1-linux-x86_64.tar.gz

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

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

1
2
tar –zvxf elasticsearch-6.5.4.tar.gz

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

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

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

1
2
cd /usr/local/ elasticsearch-6.5.4

1
2
ll

在这里插入图片描述

1
2
vim config/elasticsearch.yml

对elasticsearch.yml文件内以下项进行修改:

1
2
3
4
5
6
7
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 # 端口

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

1
2
3
4
5
groupadd elklog
adduser elk
useradd -g test phpq //新建phpq用户并增加到test工作组
passwd elklog

1
2
对/usr/local/elasticsearch-6.5.4进行赋权;

1
2
chown –R elklog.elklog  /usr/local/elasticsearch-6.5.4

用户名 密码 目录
切换用户:

1
2
su elklog

启动 elasticsearch 服务,在/usr/local/elasticsearch-6.5.4目录下执行:

1
2
./bin/elasticsearch -d  后台执行

查看相关端口看是否启动:

1
2
netstat-tunpl

默认为9200和9300端口
在这里插入图片描述

也可以通过浏览器进行验证:
http://IP:9200 出现如下页面表示安装成功启动成功。
在这里插入图片描述

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

下载heard:

1
2
git clone git://github.com/mobz/elasticsearch-head.git

等待下载完成后执行以下命令安装grunt-cli :

1
2
npm install -g grunt-cli   

执行以下命令安装grunt,要在head下载完成后进入到head的文件下执行:

1
2
3
4
cd elasticsearch-head  #进入到head目录
npm install -g cnpm --registry=https://registry.npm.taobao.org
速度较慢或者安装失败,所以使用国内镜像

1
2
npm install grunt --save  #安装grunt

安装npm依赖包:

1
2
# npm install      必须要执行,否则会缺包

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

1
2
vim Gruntfile.js

找到以下信息,增加hostname项:
更改前:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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下面实现可以正常访问:

1
2
3
4
http.cors.enabled: true
http.cors.allow-origin: "*"
备注后面的值别忘了有空格哦

启动heard插件,要在该插件目录下执行以下命令进行启动:

1
2
grunt server

执行后出现以下输出说明启动成功:
Running “connect:server” (connect) task
Waiting forever…
Started connect web server on http://localhost:9100
可通过浏览器进行访问测试一下:
在这里插入图片描述
3.安装logstash,也是从https://www.elastic.co/downloads 下载的源码包(所需的软件都可以在该网站下载,所有软件版本都要保持一致)
解压

1
2
3
tar -zvxf  logstash-6.5.4.tar.gz
mv logstash-6.5.4 /usr/local/ logstash-6.5.4 #所放目当可自定

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

1
2
3
touch logstash.conf
vim logstash.conf

我的配置内容如下:
在这里插入图片描述
也可用下面这个(纯净版)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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}"
}
}

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

1
2
./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 下载的源码包(所需的软件都可以在该网站下载,所有软件版本都要保持一致)
解压

1
2
3
tar –zvxf  kibana-6.5.4.tar.gz
mv kibana-6.5.4 /usr/local/kibana

修改配置文件:

1
2
vim /usr/local/kibana/config/kibana.yml

1
2
3
4
5
6
7
8
9
更改如下:
server.port: 5601 #放开端口

server.host: "0.0.0.0"

server.name: "kabba-server" #kibana服务名

elasticsearch.url: http://IP:9200 # elasticsearch服务的IP地址

配置完成后启动kibana:

1
2
./bin/kibana

启动后可以在浏览器进行一下测试访问:
在这里插入图片描述

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

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

1
2
3
tar –zvxf filebeat-6.5.4.tar.gz
mv filebeat-6.5.4 /usr/local/filebeat-6.5.4

1
2
3
配置filebeat:
# vim filebeat.yml

  • type: log #日志的默认type
    1
    2
    3
    4
    5
    6
          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上看出正在对日志处理:

1
2
3
4
5
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190410162316905.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdXhpYW5neWFuZ18=,size_16,color_FFFFFF,t_70)  
同时通过kibana也能看到filebeat通过logstash处理后的日志:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190410162326494.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdXhpYW5neWFuZ18=,size_16,color_FFFFFF,t_70)


用的时候最好用后台启动方式
nohup ./kibana &exit
nohup ./logstash -f spring-boot.conf &

1

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}”
}
}
}

}

```