前言
在微服务架构中服务众多,每个微服务都会产生大量的日志数据,服务的调用错综复杂,如何才能快速定位到BUG?所以日志收集是微服务项目不可或缺的。为了方便日志分析,我们需要对微服务的日志数据进行存储,同时提供一个友好的可视化界面方便分析。存储到文件和数据库都不太合适因为数据量太大,也不好查阅。ELK是一个较为成熟的分布式日志解决方案。
什么是ELK
ELK不是一个框架,而是包含三款产品的组合:Elasticsearch、Logstash、Kibana : 下面是对这三个技术的解释
- Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
- logstash是一种分布式日志收集框架,开发语言是JRuby,当然是为了与Java平台对接,不过与Ruby语法兼容良好,非常简洁强大,经常与ElasticSearch,Kibana配置,组成著名的ELK技术栈,非常适合用来做日志数据的分析。作为日志收集软件,它可以收集日志到多种存储系统或临时中转系统,如ElasticSearch,MySQL,Redis,Kakfa,HDFS, Lucene,Solr等
- Kibana是一个开源分析和可视化平台,旨在与Elasticsearch协同工作。您使用Kibana搜索,查看和与存储在Elasticsearch索引中的数据进行交互。您可以轻松执行高级数据分析,并在各种图表,表格和地图中可视化您的数据
简单理解就是:我们通过Logstash来收集数据,然后Logstash把数据存储到ElasticSearch中,在使用Kibana可视化工具和ElasticSearch交互,提供友好的界面来方便分析和统计数据。流程如下
ELK服务器安装
我们采用Docker来安装ELK服务器,所以需要先安装Docker,然后安装ELK
安装Docker
在准备好的linux机器上安装好Docker
# yum源指定[root@localhost ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装docker[root@localhost ~]# sudo yum -y install docker-ce#启动dokcer[root@localhost ~]# sudo systemctl start docker
使用阿里云镜像加速
[root@localhost ~]# vi /etc/docker/daemon.json#加入如下内容{"registry-mirrors":["https://5pfmrxk8.mirror.aliyuncs.com"]}
重启Docker
[root@localhost ~]# systemctl restart docker
安装ELK服务器
这里使用ELK镜像:sebp/elk:6.8.22 ,该镜像中已经包含了ELK所需要的三个组件。
# 下载elk镜像[root@localhost ~]# docker pull sebp/elk:6.8.22# 启动ELK容器 ,指定最小内存和最大内存,并映射相关端口[root@localhost ~]# docker run --name elk --restart always -d -p 5601:5601 -p 9200:9200 -p 5044:5044 -e ES_MIN_MEM=128m -e ES_MAX_MEM=1024m -m 2048M sebp/elk:6.8.22# 关闭防火墙,我这里使用定时vm虚拟机,如果是云服务器记得开放端口[root@localhost ~]# systemctl stop firewalld
启动比较慢,需要等几分钟,访问测试:我的linux机器的ip是:192.168.119.129:5601
我们还需要对容器中的logstash进行配置,对数据输入和输出做配置
# 进入到ELK容器中[root@localhost ~]# docker exec -it elk /bin/bash#修改logstash配置
root@79823af789f6:/# vim /etc/logstash/conf.d/02-beats-input.conf
编辑文件
/etc/logstash/conf.d/02-beats-input.conf
删掉已有内容,把下面的内容粘贴进去
input{
tcp{
port => 5044
codec=> json_lines
}
}
output{
elasticsearch{
hosts => ["localhost:9200"]
}
}
大概含义是:
- input代表数据输入配置 , logstatsh的开放端口是 5044
- output代表数据输出配置,输出到elasticsearch, hosts是es的地址localhost:9200
然后退出容器 : exit ,重启ELK容器
[root@localhost ~]# docker restart elk
到这里ELK服务器安装成功,接下来就是微服务把日志收集到ELK服务器了。
微服务集成ELK
接下来就是微服务把日志收集到ELK服务器了,实现原理就是通过logstash来收集logback日志框架打印的日志,然后发送到云服务器ELK中。首先我们需要导入 logstash 整合 logback 的依赖
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>5.2</version></dependency>
然后为微服务添加日志配置文件
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?><configuration><includeresource="org/springframework/boot/logging/logback/base.xml"/><!--输出到控制台--><appendername="console"class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appendername="stash"class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!-- logstash服务器地址--><destination>192.168.119.129:5044</destination><encoderclass="net.logstash.logback.encoder.LogstashEncoder"/></appender><rootlevel="info"additivity="false"><appender-refref="console"/><appender-refref="stash"/></root></configuration>
到这里配置完毕,启动程序进行访问,程序就会把日志自动发送到
192.168.119.129:5044
服务器中。然后我们可以直接通过kibana可视化工具进行分析。 这里我们点击:discover 创建 index pattern
按照timestamp 过滤
然后再次点击Discover 就可以看到日志数据
到这里文章就结束了,喜欢的话:点赞好评加收藏!!!
版权归原作者 墨家巨子@俏如来 所有, 如有侵权,请联系我们删除。