在工作中随着业务量的增大和项目的增多,日志量随之增大,我们需要对日志进行集中化管理,将所有机器上的日志信息收集、汇总到一起。完整的日志数据具有非常重要的作用:
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 | tar –zvxf elasticsearch-6.5.4.tar.gz |
将解压后的elasticsearch-6.5.4放到所需要的目录(自定义我这里放到了/usr/local/):
1 | mv elasticsearch-6.5.4 /usr/loca l/ elasticsearch-6.5.4 |
到目录下对elasticsearch文件进行配置:
1 | cd /usr/local/ elasticsearch-6.5.4 |
1 | ll |
1 | vim config/elasticsearch.yml |
对elasticsearch.yml文件内以下项进行修改:
1 | cluster.name: elk # 组名(同一个组,组名必须一致) |
1 | 关于elasticsearch 的启动需要创建一个普通组和用户进行启动,否则启动会报错。 |
1 | groupadd elklog |
1 | 对/usr/local/elasticsearch-6.5.4进行赋权; |
1 | chown –R elklog.elklog /usr/local/elasticsearch-6.5.4 |
用户名 密码 目录
切换用户:
1 | su elklog |
启动 elasticsearch 服务,在/usr/local/elasticsearch-6.5.4目录下执行:
1 | ./bin/elasticsearch -d 后台执行 |
查看相关端口看是否启动:
1 | netstat-tunpl |
默认为9200和9300端口
也可以通过浏览器进行验证:
http://IP:9200 出现如下页面表示安装成功启动成功。
2.为elasticsearch安装heard插件,安装之前要先安装nodjs插件:
elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等
下载heard:
1 | git clone git://github.com/mobz/elasticsearch-head.git |
等待下载完成后执行以下命令安装grunt-cli :
1 | npm install -g grunt-cli |
执行以下命令安装grunt,要在head下载完成后进入到head的文件下执行:
1 | cd elasticsearch-head #进入到head目录 |
1 | npm install grunt --save #安装grunt |
安装npm依赖包:
1 | # npm install 必须要执行,否则会缺包 |
所有包安装完成后对heard的Gruntfile.js配置文件进行修改:
1 | vim Gruntfile.js |
找到以下信息,增加hostname项:
更改前:
1 | connect: { |
以上都更改完成后需要添加以下两行到/usr/local/elasticsearch-6.5.4/config/ elasticsearch.yml下面实现可以正常访问:
1 | http.cors.enabled: true |
启动heard插件,要在该插件目录下执行以下命令进行启动:
1 | 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 | tar -zvxf logstash-6.5.4.tar.gz |
1.编辑配置文件,可自行在logstash/conf下创建一个自己需要的.conf文件:
1 | touch logstash.conf |
我的配置内容如下:
也可用下面这个(纯净版)
1 | input { |
然后做好input ,filter,output三大块, 其中input是吸取logs文件下的所有log后缀的日志文件,filter是一个过滤函数,这里不用配置,output配置了导入到
hosts为127.0.0.1:9200的elasticsearch中,每天一个索引。
3.配置完成后启动logstash:
1 | ./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 | tar –zvxf kibana-6.5.4.tar.gz |
修改配置文件:
1 | vim /usr/local/kibana/config/kibana.yml |
1 | 更改如下: |
配置完成后启动kibana:
1 | ./bin/kibana |
启动后可以在浏览器进行一下测试访问:
我的kibana因为之前在logstash里做过日志导入到elasticsearch里,所有已经有LOG分析的数据进行展现了。
5.filebeat的安装配置:
从https://www.elastic.co/downloads 下载的源码包(所需的软件都可以在该网站下载,所有软件版本都要保持一致)
安装很简单,就是将filebeat的源码包解压放到你指定的目录下就行:
1 | tar –zvxf filebeat-6.5.4.tar.gz |
1 | 配置filebeat: |
- type: log #日志的默认type
1
2
3
4
5
6enabled: 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”]
- /tmep/logs//.log
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}”
}
}
}
}
```