微服务架构开发实战:ElasticStack实现日志集中化

2024-04-27 17:58

本文主要是介绍微服务架构开发实战:ElasticStack实现日志集中化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

常见日志集中化的实现方式

有许多现成的可用于实现集中式日志记录的解决方案,它们使用不同的方法、体系结构和技术。理解所需的功能并选择满足需求的正确解决方案非常重要。

日志托运

有一些日志托运组件可以与其他工具结合起来建立一个端到端的日志管理解决方案。不同日志托运工具的功能不同。

· Logstash:是一个功能强大的数据管道工具,可用于收集和发送日志文件。它充当经纪人,提供了一种机制来接受来自不同来源的流数据,并将其汇集到不同的目的地。Log4j和Logbackappender也可以用来直接从Spring Boot微服务发送日志消息到Logstash。Logstash的另一端将连接到Elasticsearch、HDFS或任何其他数据库。

·Fluentd:是一个与Logstash非常相似的工具。Logspout是Logstash的另一个日志管理工具,但是在Docker基于容器的环境中它更合适。

微服务架构开发实战:ElasticStack实现日志集中化

 

日志存储

实时日志消息通常存储在Elasticsearch中,它允许客户端根据基于文本的索引进行查询。除了Elasticsearch外,HDFS还常用于存储归档的日志消息。MongoDB或Cassandra用于存储汇总数据,

如每月汇总的交易次数。

脱机日志处理可以使用Hadoop 的map reduce程序完成。

日志流处理器

日志流处理器可用于处理日志流。例如,如果连续收到404错误作为对特定服务调用的响应,则意味着该服务出现问题。这种情况必须尽快处理。流处理器在这种情况下非常方便,因为与传统的反应分析相比,流处理器能够对某些事件流做出及时响应。

日志流处理器的典型架构是将Flume和Kafka结合在一起,并与Storm或Spark Streaming结合使用。Log4j有Flume appender,可以用于收集日志消息。这些消息将被推送到分布式Kafka消息队列中。流处理器从Kafka收集数据,并在发送给Elasticsearch和其他日志存储之前进行处理。

Spring Cloud Stream和Spring Cloud Data Flow也可用于构建日志流处理器。

日志仪表板

日志分析最常用的仪表板是使用Elasticsearch数据存储的Kibana。

Graphite和 Grafana也被用来显示日志分析报告。


Elastic Stack 实现日志集中化

本节将基于Elastic Stack 6.0来实现日志的集中化管理。Elastic Stack原来称为“ELK”。“ELK”是3个开源项目(Elasticsearch、Logstash和Kibana)的首字母缩写。

有关ELK Stack 与 Elastic Stack 的异同点可以参阅笔者的博客(https:/waylau.com/elk-statck-and-elastic-stack/ )。

Elasticsearch的安装和使用

( 1)下载Elasticsearch,网址为

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.zipo

(2)解压。解压安装包为elasticsearch-6.0.0.zip。

( 3)运行。执行:.lbinlelasticsearch。

(4)访问。网址为http://localhost:9200/,能看到如下界面显示。

"name":"DwV60B2",

"cluster name":"elasticsearch",

"cluster uuid":"FOIG6cxCSlesYal7jdAxqg",

"version":{

"number":"6.0.0",

"build_hash" :"8f0685b",

"build date":"2017-11-10T18:41:22.859z",

"build_snapshot" :false,

"lucene_version":"7.0.1",

"minimum_ wire_compatibility_version" :"5.6.0",

"minimumindex compatibility version":"5.0.0"}

"tagline":"You Know, for Search"

}

Kibana的安装和使用

(1)下载Kibana,网址为

https://artifacts.elastic.co/downloads/kibana/kibana-6.0.O-windows-x86_64.zipo.

(2)解压。解压安装包为kibana-6.0.0-windows-x86_64.zip。

(3)运行。执行: .lbinlkibana。

(4)访问。网址为http://localhost:5601/,能看到Kibana的管理界面。

Logstash的安装和使用

(1)下载Logstash,网址为

https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.zip。

( 2)解压。解压安装包为logstash-6.0.0.zip。

( 3)运行。执行:.1bin\logstash。

综合示例演示

1.创建hello-world-log

在本节hello-world 应用的基础上,创建一个hello-world-log应用作为示例。

其中,须改写HelloController.java。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.slf4j-Logger;
import org.slf4j.LoggerFactory;
/**
*Hello controller.
*
*@since 1.0.0 2017年12月24日
* @author <a href="https://waylau.com">Way Lau</a>
*/
@RestController
public class HelloController {
private static final Logger logger = LoggerFactory.getLogger(Hello
Controller.class);
@RequestMapping("/hello")
public String hello()
logger.info("hello world");
return "Hello World! welcome to visit waylau.com!";
}
}

主要修改项在于添加了一行日志。日志非常简单,记录了一条“hello world”日志。

⒉.添加Logback JSON编码器

Logback JSON编码器用于创建与Logstash一起使用的JSON格式的日志。

dependencies {
//...
//添加Logback JSON编码器
compile('net.logstash.logback:logstash-logback-encoder:4.11')
//...
}

3.添加logback.xml

在应用的src/main/resources目录下,创建logback.xml文件。

<?xml version="1.0"encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/
defaults.xml"/>
<include
resource="org/springframework/boot/logging/logback/console-
appender . xml"/>
<appender name="stash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender"
<destination>localhost:4560</destination>
<!--编码器-->
<encoder class="net.logstash.logback.encoder.LogstashEncoder"
/>
</appender>
<root level="工NFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="stash"/>
</root>
</configuration>

该文件会覆盖Spring Boot中默认的配置项。

4.创建logstash.conf

在Logstash的bin目录下,创建logstash.conf文件,用于配置Logstash。

input {
tcp {
port=>4560
host=>localhost
}
output {
elasticsearch  hosts => ["localhost: 9200"]}
stdout codec =>rubydebug }
)

5.启动Elastic Stack

按以下顺序执行命令行来启动Elastic Stack。

.binllasticsearch

.bin\kibana

.\binllogstash -f logstash.conf

其中“-f”用于指定Logstash配置文件。

6.启动hello-world-log

启动成功之后,在浏览器访问http:/localhost:8080/hello,就能触发程序来记录日志。

此时,能在Logstash控制台看到如下信息,说明日志已经被Logstash处理了。

{
"@version"=>"1",
"host" =>"127.0.0.1",
"@timestamp"=>2017-12-24T15:58:09.008z,
"@metdata" ->{
"ip_address" =>"127.0.0.1"
},
"message" =>"{\"@timestamp\":\"2017-12-24T23:58:09.007+08:00\",
"@version\":1,\"message\":\ "hello world\", \"logger_name \ ":\"com.waylau.
spring.cloud.weather.controller.HelloController\",\"thread_name\":
"http-nio-8080-exec-5\",\"level\":\"INFO\",\"level_value\":20000}\r",
"port"=>10512
}

7. Kibana分析日志

在浏览器访问http://localhost:5601,进入Kibana管理界面。初次使用Kibana,会被重定向到如图12-3所示的配置索引界面。

微服务架构开发实战:ElasticStack实现日志集中化

 

单击“Create”按钮来保存配置,并切换到Discover界面。在该界面就能按照关键字来搜索日志了。

图12-4展示了在Kibana中搜索关键字的界面。

微服务架构开发实战:ElasticStack实现日志集中化

 

集中式日志管理系统的展望

虽然本节只是挑选了一个最简单的Spring Boot微服务作为例子,但是可以完整地呈现如何使用Elastic Stack技术来搭建一个完整的集中式日志管理系统的整个过程。读者可以举一反三,将天气预报系统中的其他微服务实例做相应的操作,实现天气预报系统的集中化日志管理改造。为节约篇幅,就不再对这个改造做详细的描述。

源码

本节示例所涉及的源码见hello-world-log。

本篇文章内容给大家讲解的是常见日志集中化的实现方式和ElasticStack 实现日志集中化

  1. 下篇文章给大家讲解的是微服务的集中化配置;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

这篇关于微服务架构开发实战:ElasticStack实现日志集中化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941161

相关文章

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的