精通springcloud:分布式日志记录和跟踪使用,ELK Stack集中日志

“appName”: "order- service”

sthreadName />

现在再回来看一看我们的示例系统。开发人员仍然可以在同一个Git 存储库( htp:/ithb com/piomin/sample- spring-cloud-comm.git)和feign. with. discovery分支(

http:/ithb.co/pioin/saople-spring-cloudo comm/ree/feign. with _discovery) 找到该示例。笔者已根据第9.1节“微服务的最佳8志记录实践”中提出的建议在源代码中添加了一些日志记录条目。以下是order-service服务中POST方法的当前版本。笔者已经通过从rgsg4fjLoggeFactory调用getLogger方法将SLF4J上的Logback用作日志记录程序。

@PostMapping

public Order prepare (8RequestBody Order order): throws

JaonProcess ingException {

int price一0;

List products =

productClient. findByIds (order .getProductIds();

LOGGER. info (“Products found: 1”,mapper . writeValueAsString (products));

Customer customer 一

customerClient. findByIdWithAccounts (order. getCustomerId());

LOGGER. info (“Customer found: (}”, mapper . writeValueAsString (customer));

for (Product product : products)

price ± product .getPrice();

final int priceDiscounted = priceDiscount (price, customer) ;

LOGGER. info ("Discounted price: ()”,

mapper .writeValueAsString (Collect ions. singletonMap (“price”,

priceDiscounted))) :

Optional account = cus tomer .getAccounts() .stream() .filter(a - >

(a.getBalance() > priceDiscounted)) .findFirsto ;

if (account. isPresent() {

order.setAccountId (account.get() .getId()) :

order . setStatus (Orde rStatus。ACCEPTED) ;

order .setPrice (priceDiscounted) ;LOGGER. info ("Account found: { ”,

mapper .writevalueAsString (account.get))) :

F else

order.setStatus (OrderStatus。REJECTED) ;

LOGGER. info("Account not found: { F”,

mapper.writeValueAsstring (customer。getAccounts())) ;

}

return repository.add (order) ;

}

现在来看一看如图9.1所示的Kibana仪表板。它可以在htp://92. 168.99.100:5601处获得。在该仪表板中可以轻松发现和分析应用程序日志。在页面左侧的菜单中可以选择所需的索引名称(在图9.1的屏幕截图中标记为1)。日志统计信息显示在时间线图(标记为2).上。可以通过单击具体条或选择一组条来缩小搜索参数所采用的时间。给定时间段内的所有日志都显示在图表下方的面板上(标记为3)。

精通springcloud:分布式日志记录和跟踪使用,ELK Stack集中日志

可以扩展每个条目以查看其详细信息。在详细的Table (表)视图中,我们可以看到诸如Elasticsearch索引(_ index) 的名称以及微服务的级别或名称(appName) 。大多数这些字段都已经通过

LoggingEventCompositeJsonEncoder设置。我们只定义了一个特定于应用程序的字段appName,如图9.2所示。

精通springcloud:分布式日志记录和跟踪使用,ELK Stack集中日志

Kibana提供了搜索特定条目的强大功能。开发人员可以仅通过单击所选条目来定义过滤器,以便定义一组搜索条件。在图9.2中,可以看到如何使用传入的HTTP请求过滤掉所有条目。如前文所述,

org.springframework.web.filter.CommonsRequestIL oggingFilter类负责记录这些日志。我们刚刚定义了一个过滤器,其名称等于完全限定的日志记录器类名称。如图9.3所示是笔者的Kibana仪表板屏幕,它显示了仅由CommonsRequestI oggingiter生成的日志。

精通springcloud:分布式日志记录和跟踪使用,ELK Stack集中日志

2.使用AMQP追加器和消息代理

使用SpringAMQP追加器和消息代理的配置比使用简单TCP追加器的方法要稍微复杂一些。首先,开发人员需要在本地计算机上启动消息代理。本书已经在第5章“使用Spring Cloud Config进行分布式配置”中详细介绍了此过程,其中还专门介绍了RabbitMQ, 以便使用Spring Cloud Bus重新加载动态配置。如果开发人员已在本地或作为Docker容器启动了RabitMQ实例,则可以继续进行配置。必须创建-个队列来发布传入事件,然后将其绑定到交换消息( Exchange)。要实现此目的,应该先登录Rabbit管理控制台,然后转到Queues (队列)部分。我们已经创建了一个名为q logstash 的队列,并且使用名称ex. logstash 定义了新的Exchange消息,如图9.4所示。对于所有示例微服务,队列都已经使用路由键值绑定到该Exchange消息。

精通springcloud:分布式日志记录和跟踪使用,ELK Stack集中日志

在启动并配置了RabbitMQ的实例之后,即可开始在应用程序端集成。首先,开发人员必须在项目依赖项中包含spring bostarer-amqp,,以提供AMQP客户端和AMQP追加器的实现。

org. springframework. boot

spring-boot-starter-amqp</arti factId>

然后,唯一要做的就是使用Logback配置文件中的org. springframnework amp.rabit.logback. AmqpAppender类来定义追加器。需要设置的最重要的属性是RabbitMQ网络地址( host和port).已声明的交换消息名称( exchangeName )和路由键值( routingKeyPatterm),该键值必须和已声明交换消息绑定的键值之一匹配。与TCP追加器相比,这种方法的缺点是需要自己准备发送给Logstash的JSON消息。以下是order-service 服务的Logback配置的一个片段。

<appender name- “AMQP”

class=“org. springf ramework。amqp. rabbit。1 ogback . AmqpAppender”>

<1ayout>

spattern>

“time”: “8date{IS086011”,

“thread”; “'thread” ,

“level”: “号level”,

“class”: “%logger(36}”,

“message”:” tmessage"

192.168.99.100

5672

guest

guest

order-service

order-service</ routingKeyPattern>

t rue</ declareExchange>

direct

ex_ logstash

true

UTF- 8

true

PERSISTENT</de1 iveryMode>

</ appender>

Logstash可以通过声明rabbitmq (logstash-input-rabitmq) 输入轻松地与RabbitMQ集成。

input {

rabbitmq (

host - “192.168.99.100”

port => 5672

durable -> true

exchange => “ex_ logstash”
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

分享一些系统的面试题,大家可以拿去刷一刷,准备面试涨薪。

这些面试题相对应的技术点:

  • JVM
  • MySQL
  • Mybatis
  • MongoDB
  • Redis
  • Spring
  • Spring boot
  • Spring cloud
  • Kafka
  • RabbitMQ
  • Nginx

大类就是:

  • Java基础
  • 数据结构与算法
  • 并发编程
  • 数据库
  • 设计模式
  • 微服务
  • 消息中间件

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?

程序员,每个月给你发多少工资,你才会想老板想的事?
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
转存中…(img-DZWiKaA3-1712504422762)]

[外链图片转存中…(img-W2DkAr7R-1712504422763)]

[外链图片转存中…(img-IyKKINsf-1712504422763)]

[外链图片转存中…(img-3LNVjT4U-1712504422763)]

[外链图片转存中…(img-85BhmxXa-1712504422763)]

[外链图片转存中…(img-Glyynhlc-1712504422764)]

[外链图片转存中…(img-6vuaiHSz-1712504422764)]

[外链图片转存中…(img-UgeJIGDY-1712504422764)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值