内容简介:在微服务架构中,会部署众多的应用,其中有基础应用,比如:网关,服务发现等。同时还有大量的业务应用。所以,如何有效的收集它们的日志,并且方便查询,同时提供友好的可视化展示,对于应对微服务架构的复杂性有很大的帮助。在高复杂度的系统中,对于定位线上问题,日志非常重要。ELK(ElasticSearch+Logstash+Kibana),可以使用说是目前最流行的日志平台构建方案,之所以深受开发者喜爱,主要是因为它解决了大规模系统的日志收集的各种痛点。ELK(ElasticSearch+Logstash+Kiban
1 概述
在微服务架构中,会部署众多的应用,其中有基础应用,比如:网关,服务发现等。同时还有大量的业务应用。所以,如何有效的收集它们的日志,并且方便查询,同时提供友好的可视化展示,对于应对微服务架构的复杂性有很大的帮助。在高复杂度的系统中,对于定位线上问题,日志非常重要。ELK(ElasticSearch+Logstash+Kibana),可以使用说是目前最流行的日志平台构建方案,之所以深受开发者喜爱,主要是因为它解决了大规模系统的日志收集的各种痛点。
2 ELK Stack
ELK(ElasticSearch+Logstash+Kibana),主要包含三个组件:
-
ElasticSearch
-
Logstash
-
Kibana
2.1 ElasticSearch
ElasticSearch是一个开源的分布式的搜索引擎,它主要基于Apache Lucene。在整个ELK Stack中,ElasticSearch是最核心的组件,它存储数据,并且提供了许多灵活而实用的Rest API,所以,上层应用可以根据需要去查询数据,使用数据,分析数据。在日志平台中,所有的日志数据都存储到ElasticSearch中,借助其强大的搜索能力,可以很灵活的查询日志。
2.2 Logstash
Logstash主要用于收集数据,并将数据保存到ElasticSearch中。
Logstash有丰富插件,并且易于扩展,所以,可以使用Logstash收集到数据后,可以做很多处理,最终再将数据输出到ElasticSearch中。在日志平台中,它主要复杂采集应用的日志。
2.3 Kibana
Kibana主要负责读取ElasticSearch中的数据,并进行可视化展示。并且,它还自带Tool,可以方便调用ElasticSearch的Rest API。在日志平台中,我们通过Kibana查看日志。
3 架构
使用ELK构建了一个日志平台架构:
这是一个最简化版的日志收集架构,很多基于ELK的日志架构是从它演化而来,核心的问题就是日志数据都保存到ElasticSearch中。比如说,可以先将日志收集到Kafka中,然后再由Logstash采集数据输出到ElasticSearch中,引入了Kafka,就给使用数据增加了很多可能性。
4 搭建日志平台
系统:Ubuntu16.06 64
去官网下载ElasticSearch、Logstash、Kibana,注意尽量保持版本一致,此处使用6.0的大版本,为了便于演示,全部ELK程序和 Java 应用都安装到一台机器上,目录如下:
noone@ubuntu:/opt$ tree -L 1 . ├── elasticsearch-6.0.0 ├── gs-spring-boot-0.1.0.jar ├── kibana-6.0.1-linux-x86_64 ├── logs └── logstash-6.0.1
4.1 配置
为了方便管理,使用systemd管理ElasticSearch、Kibana,配置如下:
/etc/systemd/system/elasticsearch.service
[Service]
Environment=ES_HOME=/opt/elasticsearch-6.0.0
Environment=ES_PATH_CONF=/opt/elasticsearch-6.0.0/config
Environment=PID_DIR=/var/run/elasticsearch
WorkingDirectory=/opt/elasticsearch-6.0.0
User=noone
Group=nonone
ExecStart=/opt/elasticsearch-6.0.0/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet
# StandardOutput is configured to redirect to journalctl since
# some error messages may be logged in standard output before
# elasticsearch logging system is initialized. Elasticsearch
# stores its logs in /var/log/elasticsearch and does not use
# journalctl by default. If you also want to enable journalctl
# logging, you can simply remove the "quiet" option from ExecStart.
StandardOutput=journal
StandardError=inherit
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Specifies the maximum number of processes
LimitNPROC=4096
# Specifies the maximum size of virtual memory
LimitAS=infinity
# Specifies the maximum file size
LimitFSIZE=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM
# Send the signal only to the JVM rather than its control group
KillMode=process
# Java process is never killed
SendSIGKILL=no
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
/etc/systemd/system/kibana.service
[Unit] Description=Kibana [Service] Type=simple User=noone Environment=CONFIG_PATH=/opt/kibana-6.0.1-linux-x86_64/config/kibana.yml Environment=NODE_ENV=dev ExecStart=/opt/kibana-6.0.1-linux-x86_64/bin/kibana [Install] WantedBy=multi-user.target
创建一个SpringBoot应用,需要在 pom.xml 中引入依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.1</version>
</dependency>
然后配置日志, logback-spring.xml
<configuration scan="true">
<include resource="org/springframework/boot/logging/logback/base.xml" />
<appender name="STASH" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/opt/logs/logback/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/logs/logback/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<appender-ref ref="STASH" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
需要注意日志的名字以及路径,这个后续要和Logstash的配置匹配。这样做,主要是将日志按照格式输出到指定的文件中,方便Logstash监控日志文件,实时获取日志数据。
接下来配置Logstash, /opt/logstash-6.0.1/config/logstash.conf
input {
file {
path => "/opt/logs/logback/*.log"
codec => "json"
type => "logback"
}
}
output {
if [type]=="logback" {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "logback-%{+YYYY.MM.dd}"
}
}
}
4.2 使用
启动ElasticSearch和Kibana
sudo systemctl start elasticsearch.service sudo systemctl start kibana.service
启动SpringBoot应用,然后启动Logstash
sudo bin/logstash -f config/logstash.conf
打开Kibana,稍作配置,就可以查询应用的日志了。
5 小结
本文主要介绍了基于ELK的日志平台搭建,这只是一个最基础的架构,当然,它也不仅仅是适用于基于SpringCloud的微服务架构。随着系统业务量的提升,可以在此基础上继续演进,适配更多的业务架构,处理海量的日志,并且根据业务需求从日志数据中提取更多的信息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 在 Android Studio 里使用构建分析器提升构建性能
- 使用 Docker 构建
- 使用 webpack 构建应用
- 使用Dockerfile构建镜像
- 使用模式构建:总结
- 使用 AutoAI 自动构建模型
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Designing for Emotion
Aarron Walter / Happy Cog / 2011-10-18 / USD 18.00
Make your users fall in love with your site via the precepts packed into this brief, charming book by MailChimp user experience design lead Aarron Walter. From classic psychology to case studies, high......一起来看看 《Designing for Emotion》 这本书的介绍吧!