• 微服务集成SPRING CLOUD SLEUTH、ELK 和 ZIPKIN 进行监控-spring cloud 入门教程


    与创建基于微服务的架构相关的最常提到的挑战之一是监控。每个微服务都应该在与其他微服务隔离的环境中运行,因此它不会与它们共享数据库或日志文件等资源。然而,微服务架构的基本要求是相对容易访问调用历史,包括能够查看多个微服务之间的请求传播。Grepping 日志不是该问题的正确解决方案。在使用 Spring Boot 和 Spring Cloud 框架创建微服务时,可以使用一些有用的工具,比如:Spring Cloud Sleuth,Zipkin 。

    Spring Cloud Sleuth – 作为 Spring Cloud 项目的一部分提供的库。允许您通过向 HTTP 请求添加适当的标头来跟踪后续微服务的进度。该库基于 MDC(Mapped Diagnostic Context)概念,您可以在其中轻松提取放入上下文的值并将其显示在日志中。

    Zipkin – 分布式跟踪系统,有助于为在独立服务之间传播的每个请求收集计时数据。它有简单的管理控制台,我们可以在其中找到后续服务生成的时间统计的可视化报告。

    ELK – Elasticsearch、Logstash、Kibana:通常一起使用的三种不同工具。它们用于实时搜索、分析和可视化日志数据。

    关于ELK更多内容请参阅作者的Elasticsearch从入门到精通 Kibana从入门到精通 logstash快速入门实战指南

    可能很多人,即使您之前没有接触过 Java 或微服务,也听说过 Logstash 和 Kibana。例如,如果您在hub.docker.com中查看最流行的images,您会发现上述工具。在我们的示例中,我们将使用这些工具。让我们从使用 Elasticsearch 运行容器开始。

    docker run -d -it --name es -p 9200:9200 -p 9300:9300 elasticsearch

    我们可以运行 Kibana 容器并将其链接到 Elasticsearch。

    docker run -d -it --name kibana --link es:elasticsearch -p 5601:5601 kibana

    最后,我们将启动 Logstash,并声明输入和输出。作为输入,我们声明 TCP,它与LogstashTcpSocketAppender在我们的示例应用程序中用作日志附加程序兼容作为输出,elasticsearch 已被声明。每个微服务都将以其名称为索引,并带有micro前缀。

    docker run -d -it --name logstash -p 5000:5000 logstash -e 'input { tcp { port => 5000 codec => "json" } } output { elasticsearch { hosts => ["192.168.99.100"] index => "micro-%{serviceName}"} }'

    现在我们可以看看示例微服务。这篇文章是我之前文章使用 Zuul、Ribbon、Feign、Eureka 和 Sleuth、Zipkin 创建简单spring cloud微服务用例-spring cloud 入门教程的延续。体系结构和公开的服务与前一个示例中的相同。就像之前提到的,我们将使用 Logback 库将日志数据发送到 Logstash。 除了三个 Logback 依赖项之外,我们还添加了用于 Zipkin 集成和 Spring Cloud Sleuth starter 的库。这是微服务的pom.xml片段。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-zipkin</artifactId>
    </dependency>
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>4.9</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.3</version>
    </dependency>

    Logback 配置文件位于src/main/resources目录下 。下面展现的是logback.xml文件内容片段。我们可以配置哪些日志字段发送到Logstash,我们还附加服务名称字段到索引中。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.99.100:5000</destination>
     
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <mdc />
                <context />
                <logLevel />
                <loggerName />
     
                <pattern>
                    <pattern>
                        {
                        "serviceName": "account-service"
                        }
                    </pattern>
                </pattern>
     
                <threadName />
                <message />
                <logstashMarkers />
                <stackTrace />
            </providers>
        </encoder>
    </appender>

    Spring Cloud Sleuth 的配置非常简单。我们只需要将spring-cloud-starter-sleuth依赖添加pom.xml,在采样的类上声明 @Bean

    1
    2
    3
    4
    @Bean
    public AlwaysSampler defaultSampler() {
      return new AlwaysSampler();
    }

    启动 ELK docker 容器后,我们需要运行我们的微服务。有 5 个 Spring Boot 应用程序需要运行discovery-serviceaccount-servicecustomer-servicegateway-servicezipkin-service全部启动后,我们可以尝试调用一些服务,例如http://localhost:8765/api/customer/customers/ {id},这会导致客户和帐户服务的调用。所有日志都将存储在带有micro-%{serviceName}索引的elasticsearch 中可以使用micro-*索引模式在 Kibana 中搜索它们索引模式在 Kibana 中的管理部分下创建->索引模式(Management -> Index patterns)。Kibana 的访问地址http://192.168.99.100:5601。第一次运行后,我们会提示输入索引模式,所以让我们输入micro-*。在“Discover(发现)”部分下,我们可以通过时间线可视化查看所有匹配类型模式的日志。

    Kibana 是相当直观且用户友好的工具。Kibana 的使用方法我就不详细介绍了,你自己看文档或者直接点击 UI 就可以很容易地找到了。最重要的是能够通过过滤条件搜索日志。下图中有一个通过X-B3-TraceId字段搜索日志的示例,该字段由 Spring Cloud Sleuth 添加到请求头中。Sleuth 还添加了X-B3-SpanId来标记单个微服务的请求。我们可以选择在结果列表中显示哪个字段——在这个示例中,我选择了messageserviceName,就像您在图片的左窗格中看到的那样。

    这是带有单个请求详细信息的图片。展开每个日志行后可见。

    Spring Cloud Sleuth 还将统计信息发送到 Zipkin。这是另一种数据报告形式,而不是存储在 Logstash 中。它展现的是每个请求的计时统计信息。Zipkin UI 非常简单。您可以按时间、服务名称、端点名称等条件过滤请求。这是使用 Kibana 可视化的具有相同请求的图片:http://localhost:8765/api/customer/customers/ {id}

    我们始终可以通过单击来查看每个请求的详细信息。然后你会看到类似于下面可见的图片。一开始,请求已经在 API 网关上进行了处理。然后网关在 Eureka 服务器上发现客户服务并调用该服务。客户服务也必须发现帐户服务,然后调用它。在此视图中,您可以轻松找出最耗时的操作。

    使用 Zuul、Ribbon、Feign、Eureka 和 Sleuth、Zipkin 创建简单spring cloud微服务用例-spring cloud 入门教程
    微服务集成SPRING CLOUD SLEUTH、ELK 和 ZIPKIN 进行监控-spring cloud 入门教程
    使用Hystrix 、Feign 和 Ribbon构建微服务-spring cloud 入门教程

    使用 Spring Boot Admin 监控微服务-spring cloud 入门教程

    基于Redis做Spring Cloud Gateway 中的速率限制实践-spring cloud 入门教程
    集成SWAGGER2服务-spring cloud 入门教程
    Hystrix 简介-spring cloud 入门教程
    Hystrix 原理深入分析-spring cloud 入门教程 
    使用Apache Camel构建微服务-spring cloud 入门教程
    集成 Kubernetes 来构建微服务-spring cloud 入门教程
    集成SPRINGDOC OPENAPI 的微服务实践-spring cloud 入门教程
    SPRING CLOUD 微服务快速指南-spring cloud 入门教程
    基于GraphQL的微服务实践-spring cloud 入门教程
    最火的Spring Cloud Gateway 为经过身份验证的用户启用速率限制实践-spring cloud 入门教程
  • 相关阅读:
    ABAP 获取当天的上一个工作日或下一个工作日
    ABAP 增强实战:Enhancement Implementation增强点实施例子
    ABAP Alv输出金额字段时,需要按国家的货币格式显示,列如:JPY
    ABAP 调用程序时获取的数量,金额和日期字段会出现 逗号,-,负号等非法字段,所需要进行转化
    ABAP 调用标准报表程序,获取程序输出list
    ABAP Alv Varient问题:可以更改alv字段布局然后存到Varient中
    ABAP 向下取整和向上取整及取余数
    传统视觉处理方法笔记
    图像特征与描述笔记
    图像预处理笔记
  • 原文地址:https://www.cnblogs.com/BlogNetSpace/p/15147875.html
Copyright © 2020-2023  润新知