精华内容
下载资源
问答
  • zipkin安装

    2018-01-02 17:37:38
    很好的例子,可以借鉴。花了很久的时间,才总结的哟。。。。。。。。
  • zipkin 安装及配置

    千次阅读 2019-01-31 18:40:34
    zipkin 安装及配置zipkin 安装配置1.1 服务端 安装及运行1.2 配置修改建立 startup.sh 文件内容如下:1.2 客户端1.2.1 maven配置1.2.2 application.yml配置 zipkin 安装配置 1.1 服务端 安装及运行 # 安装 curl -sSL...

    zipkin 安装配置

    1.1 服务端 安装及运行

    # 安装
    curl -sSL https://zipkin.io/quickstart.sh | bash -s
    # 运行
    java -jar zipkin.jar
    

    1.2 配置修改

    建立 startup.sh 文件

    与zipkin.jar 在同一个目录下。

    内容如下:

    #!/usr/bin/env bash
    
    # DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
    
    SOURCE="${BASH_SOURCE[0]}"
    while [[ -h "$SOURCE" ]]; do # resolve $SOURCE until the file is no longer a symlink
    DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
    SOURCE="$(readlink "$SOURCE")"
    [[ ${SOURCE} != /* ]] && SOURCE="$DIR/$SOURCE"
    done
    
    DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
    cd ${DIR}
    
    # export HTTP_COLLECTOR_ENABLED=true
    export STORAGE_TYPE=elasticsearch
    # elasticsearch 配置 不用可屏蔽
    export ES_HOSTS=http://xxx.xxx.xxx.xxx:9200
    export ES_INDEX=zipkin
    export ES_INDEX_SHARDS=1
    export ES_INDEX_REPLICAS=0
    export ES_USERNAME=elastic
    export ES_PASSWORD=elastic
    # http收集
    export HTTP_COLLECTOR_ENABLED=true
    # mq 配置 不用可屏蔽
    export RABBIT_ADDRESSES=xxx.xxx.xxx.xxx:5672
    export RABBIT_USER=admin
    export RABBIT_PASSWORD=admin
    export RABBIT_QUEUE=zipkin
    export RABBIT_VIRTUAL_HOST=infrastructure
    
    export JAVA_OPTS="-Xms1024m -Xmx1024m"
    

    1.2 客户端

    1.2.1 maven配置

        <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>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>
    

    1.2.2 application.yml配置

    spring:
        application:
        name: test-1
        sleuth:
            web:
            client:
                enabled: true
            sampler:
            probability: 1.0 # 将采样比例设置为 1.0,也就是全部都需要。默认是 0.1
        zipkin:
            base-url: http://xxx.xxx.xxx.xxx:9411/ # 指定了 Zipkin 服务器的地址
            rabbitmq:
            queue: zipkin
        rabbitmq:
            host: 10.2.100.11
            port: 5672
            username: admin
            password: admin
            virtual-host: infrastructure
            publisher-confirms: true
            #connection-timeout: 1000ms
            template:
            retry:
                enabled: true
            listener:
            simple:
                acknowledge-mode: auto
    
    
        server:
        port: 8088
    
    展开全文
  • 【集群运维篇】链路追踪工具Zipkin安装及使用 前言 Zipkin 是一个开放源代码分布式的跟踪系统,每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图。 Zipkin提供了可插拔数据存储方式...

    【集群运维篇】链路追踪工具Zipkin安装及使用

    前言

    Zipkin 是一个开放源代码分布式的跟踪系统,每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图。

    Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。为了方便在开发环境我直接采用了In-Memory方式进行存储,生产数据量大的情况则推荐使用Elasticsearch。

    基本操作

    Zipkin是一个分布式跟踪系统。它有助于收集解决服务体系结构中的延迟问题所需的时序数据。功能包括该数据的收集和查找。

    如果日志文件中有跟踪ID,则可以直接跳至该跟踪ID。否则,您可以基于属性进行查询,例如服务,操作名称,标签和持续时间。将为您总结一些有趣的数据,例如在服务中花费的时间百分比以及操作是否失败。

    跟踪视图屏幕截图

    Zipkin UI还提供了一个依赖关系图,该关系图显示了每个应用程序中跟踪了多少个请求。这对于识别包括错误路径或对不赞成使用的服务的调用在内的汇总行为可能会有所帮助。

    依赖图屏幕截图

    构建zipkin服务端

    构建zipkin 服务有三种构建方式,Docker容器是推荐方式jar安装源码打包安装

    使用docker容器安装运行

    docker run -d -p 9411:9411 openzipkin/zipkin
    #或者增加es存储环境
    docker run -d -p 9411:9411 \
    --env STORAGE_TYPE=elasticsearch \
    --env ES_HOSTS=http://192.168.0.100:9200 \
    openzipkin/zipkin
    

    使用ElasticSearch进行存储,默认启动方式会将日志数据存在内存中,一旦服务重启会清空数据,建议使用es进行持久化存储。启动示例参数如下:

    STORAGE_TYPE=elasticsearch ES_HOSTS=http://192.168.0.100:9200

    另外还有一些其它可配置参数

    * `ES_HOSTS`: A comma separated list of elasticsearch base urls to connect to ex. http://host:9200.
                  Defaults to "http://localhost:9200".
    * `ES_PIPELINE`: Only valid when the destination is Elasticsearch 5+. Indicates the ingest
                     pipeline used before spans are indexed. No default.
    * `ES_TIMEOUT`: Controls the connect, read and write socket timeouts (in milliseconds) for
                    Elasticsearch Api. Defaults to 10000 (10 seconds)
    * `ES_MAX_REQUESTS`: Only valid when the transport is http. Sets maximum in-flight requests from
                         this process to any Elasticsearch host. Defaults to 64.
    * `ES_INDEX`: The index prefix to use when generating daily index names. Defaults to zipkin.
    * `ES_DATE_SEPARATOR`: The date separator to use when generating daily index names. Defaults to '-'.
    * `ES_INDEX_SHARDS`: The number of shards to split the index into. Each shard and its replicas
                         are assigned to a machine in the cluster. Increasing the number of shards
                         and machines in the cluster will improve read and write performance. Number
                         of shards cannot be changed for existing indices, but new daily indices
                         will pick up changes to the setting. Defaults to 5.
    * `ES_INDEX_REPLICAS`: The number of replica copies of each shard in the index. Each shard and
                           its replicas are assigned to a machine in the cluster. Increasing the
                           number of replicas and machines in the cluster will improve read
                           performance, but not write performance. Number of replicas can be changed
                           for existing indices. Defaults to 1. It is highly discouraged to set this
                           to 0 as it would mean a machine failure results in data loss.
    * `ES_USERNAME` and `ES_PASSWORD`: Elasticsearch basic authentication, which defaults to empty string.
                                       Use when X-Pack security (formerly Shield) is in place.
    * `ES_HTTP_LOGGING`: When set, controls the volume of HTTP logging of the Elasticsearch Api.
                         Options are BASIC, HEADERS, BODY
    

    服务启动后默认可以通过9411端口访问zipkin的监控页面

    http://localhost:9411/zipkin/

    注:zipkin会在es中创建以zipkin开头日期结尾的index,并且默认以天为单位分割,使用该存储模式时,zipkin中的依赖信息会无法显示,需要通过zipkin-dependencies工具包计算。

    使用jar运行

    如果您安装了Java 8或更高版本,那么最快速的安装方法是以独立的可执行jar形式获取最新版本

    curl -sSL https://zipkin.io/quickstart.sh | bash -s
    java -jar zipkin.jar
    

    使用源码安装运行

    如果要开发新功能,则可以从源代码运行Zipkin。为此,您需要获取Zipkin的源代码并进行构建。

    # 获取最新源码git地址
    git clone https://github.com/openzipkin/zipkin
    cd zipkin
    # mvn编译打包
    ./mvnw -DskipTests --also-make -pl zipkin-server clean install
    # jar包运行
    java -jar ./zipkin-server/target/zipkin-server-*exec.jar
    

    zipkin-dependencies生成依赖链

    zipkin-dependencies基于spark job来生成全局的调用链,下载地址:https://github.com/openzipkin/zipkin-dependencies

    STORAGE_TYPE=elasticsearch ES_HOSTS=127.0.0.1:9200 java -jar zipkin-dependencies.jar &

    下载完成后通过上述命令启动zipkin-dependencies,这里要注意的是程序只会根据当日的zipkin数据实时计算一次依赖关系,并以索引zipkin:dependency-2020-9-28方式存入es中,然后就退出了,因此要做到实时更新依赖的话需要自己想办法实现周期性执行zipkin-dependencies`。

    依赖配置

    <properties> 
    	<spring.cloud-version>Hoxton.SR8</spring.cloud-version> 
    </properties>
    
    <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-dependencies</artifactId>
                  <version>${spring.cloud-version}</version>
                  <type>pom</type>
                  <scope>import</scope>
              </dependency>
          </dependencies>
    </dependencyManagement>
    
    
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
    
    

    参数配置

    spring:
      zipkin:
        base-url: http://127.0.0.1:9411
    

    这里的base-url是zipkin服务端的地址,默认地址也是http://localhost:9411/ ,配置好后,我们访问我们服务的API,点击run query即可有如下图追踪信息。

    屏幕快照 2020-09-29 上午10.00.35

    商业化链路追踪产品推荐

    阿里云商业链路追踪(TracingAnalysis)为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具。能够帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。

    img

    商业化产品架构

    链路追踪的产品架构如图所示。

    图 1. 链路追踪产品架构Tracing Analysis Workflow

    主要工作流程为:

    • 客户侧的应用程序通过集成链路追踪的多语言客户端 SDK 上报服务调用数据。链路追踪支持多种开源社区的 SDK,且支持 OpenTracing 标准。
    • 数据上报至链路追踪控制台后,链路追踪组件进行实时聚合计算和持久化,形成链路明细、性能总览、实时拓扑等监控数据。您可以据此进行问题排查与诊断。
    • 调用链数据可对接下游阿里云产品,例如 LogSearch、CloudMonitor、MaxCompute 等,用于离线分析、报警等场景。

    商业化产品功能

    链路追踪的主要功能有:

    • 分布式调用链查询和诊断:追踪分布式架构中的所有微服务用户请求,并将它们汇总成分布式调用链。
    • 应用性能实时汇总:通过追踪整个应用程序的用户请求,来实时汇总组成应用程序的单个服务和资源。
    • 分布式拓扑动态发现:用户的所有分布式微服务应用和相关 PaaS 产品可以通过链路追踪收集到的分布式调用信息。
    • 多语言开发程序接入:基于 OpenTracing 标准,全面兼容开源社区,例如 Jaeger 和 Zipkin。
    • 丰富的下游对接场景:收集的链路可直接用于日志分析,且可对接到 MaxCompute 等下游分析平台。

    使用文档见阿里云官方链路追踪文档-点击查看

    展开全文
  • zipkin安装使用

    2020-09-04 11:09:18
    In this section we’ll walk through building and starting an instance of Zipkin for checking out Zipkin locally. There are three options: using Java, Docker or running from source. If you are ...

    以下是官方文档给出的操作步骤

    Quickstart
    In this section we’ll walk through building and starting an instance of Zipkin for checking out Zipkin locally. There are three options: using Java, Docker or running from source.
    
    If you are familiar with Docker, this is the preferred method to start. If you are unfamiliar with Docker, try running via Java or from source.
    
    -- Regardless of how you start Zipkin, browse to http://your_host:9411 to find traces!
    
    -- Docker
    The Docker Zipkin project is able to build docker images, provide scripts and a docker-compose.yml for launching pre-built images. The quickest start is to run the latest image directly:
    
    docker run -d -p 9411:9411 openzipkin/zipkin
    -- Java
    If you have Java 8 or higher installed, the quickest way to get started is to fetch the latest release as a self-contained executable jar:
    
    curl -sSL https://zipkin.io/quickstart.sh | bash -s
    java -jar zipkin.jar
    
    or 下载jar包运行 https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
    
    java -jar zipkin-server-2.12.2-exec.jar --logging.level.zipkin2=INFO
    后台运行
    
    --Running from Source
    Zipkin can be run from source if you are developing new features. To achieve this, you’ll need to get Zipkin’s source and build it.
    
    # get the latest source
    git clone https://github.com/openzipkin/zipkin
    cd zipkin
    # Build the server and also make its dependencies
    ./mvnw -DskipTests --also-make -pl zipkin-server clean install
    # Run the server
    
    java -jar ./zipkin-server/target/zipkin-server-*exec.jar
    Stop by and socialize with us on gitter, if you end up making something interesting!
    
    展开全文
  • Zipkin安装和使用

    2020-12-01 11:44:35
    在前面的blog中介绍过apm原理和开源apm框架,这里继续介绍Zipkin安装使用。 Zipkin官网:https://zipkin.io/pages/quickstart。 前文导航: 分布式跟踪系统选型与实践 Elastic APM安装和使用 Cat的安装和使用 .....

    在前面的blog中介绍过apm原理和开源apm框架,这里继续介绍Zipkin的安装使用。
    Zipkin官网:https://zipkin.io/pages/quickstart。

    前文导航:
    分布式跟踪系统选型与实践
    Elastic APM安装和使用
    Cat的安装和使用


    Zipkin服务端部署

    根据官网文档,服务端部署有两种方式:
    1.Java8及以上版本的,可以直接下载官方包运行:

    curl -sSL https://zipkin.io/quickstart.sh | bash -s
    java -jar zipkin.jar
    

    2.下载源码自己打包

    # get the latest source
    git clone https://github.com/openzipkin/zipkin
    cd zipkin
    # Build the server and also make its dependencies
    ./mvnw -DskipTests --also-make -pl zipkin-server clean install
    # Run the server
    java -jar ./zipkin-server/target/zipkin-server-*exec.jar
    

    博主下载的官方包运行后会报错,因此按照第二种方式运行zipkin服务端。

    Zipkin使用

    官方支持的客户端:
    在这里插入图片描述
    社区支持的客户端就更多了,几乎主流语言都支持,具体可参见官网:
    https://zipkin.io/pages/tracers_instrumentation.html。

    下面以python为例说明。环境为:python2.7,使用py_zipkin库。

    创建第一个服务:

    import time
    
    import requests
    from flask import Flask
    from flask import request
    from py_zipkin.zipkin import zipkin_span, create_http_headers_for_new_span, ZipkinAttrs
    
    app = Flask(__name__)
    
    app.config.update({
        "ZIPKIN_HOST": "127.0.0.1",
        "ZIPKIN_PORT": "9411",
        "APP_PORT": 5000,
    })
    
    
    def do_stuff():
        time.sleep(0.5)
        headers = create_http_headers_for_new_span()
        requests.get('http://localhost:8000/service1/', headers=headers)
        return 'OK'
    
    
    def http_transport(encoded_span):
        # encoding prefix explained in https://github.com/Yelp/py_zipkin#transport
        # body = b"\x0c\x00\x00\x00\x01"+encoded_span
        body = encoded_span
        zipkin_url = "http://127.0.0.1:9411/api/v1/spans"
        # zipkin_url = "http://{host}:{port}/api/v1/spans".format(
        #   host=app.config["ZIPKIN_HOST"], port=app.config["ZIPKIN_PORT"])
        headers = {"Content-Type": "application/x-thrift"}
    
        # You'd probably want to wrap this in a try/except in case POSTing fails
        r = requests.post(zipkin_url, data=body, headers=headers)
        print(type(encoded_span))
        print(encoded_span)
        print(body)
        print(r)
        print(r.content)
    
    
    @app.route('/')
    def index():
        with zipkin_span(
                service_name="webapp",
                zipkin_attrs=ZipkinAttrs(
                    trace_id=request.headers.get('X-B3-TraceID', None),
                    span_id=request.headers.get('X-B3-SpanID', None),
                    parent_span_id=request.headers.get('X-B3-ParentSpanID', None),
                    flags=request.headers.get('X-B3-Flags', None),
                    is_sampled=request.headers.get('X-B3-Sampled', None),
                ),
                span_name='index',
                transport_handler=http_transport,
                port=5000,
                sample_rate=100,  # 0.05, # Value between 0.0 and 100.0
        ) as zipkin_context:
            with zipkin_span(service_name="webapp", span_name='do_stuff'):
                do_stuff()
            print zipkin_context.zipkin_attrs.trace_id
            time.sleep(1)
    
        return 'OK', 200
    
    
    if __name__ == '__main__':
        app.run(host="0.0.0.0", port=5000, debug=True)
    
    

    创建第二个服务:

    # coding=utf-8
    import time
    
    import requests
    from flask import Flask
    from flask import request
    from py_zipkin.zipkin import zipkin_span, ZipkinAttrs
    
    app = Flask(__name__)
    app.config.update({
        "ZIPKIN_HOST": "127.0.0.1",
        "ZIPKIN_PORT": "9411",
        "APP_PORT": 8000,
    })
    
    
    def do_stuff():
        time.sleep(0.5)
        with zipkin_span(service_name="service1", span_name='service1_db_search'):
            db_search()
        return 'OK'
    
    
    def db_search():
        time.sleep(2)
          
    def http_transport(encoded_span):
        # encoding prefix explained in https://github.com/Yelp/py_zipkin#transport
        # body = b"\x0c\x00\x00\x00\x01" + encoded_span
        body = encoded_span
        zipkin_url = "http://127.0.0.1:9411/api/v1/spans"
        # zipkin_url = "http://{host}:{port}/api/v1/spans".format(
        #    host=app.config["ZIPKIN_HOST"], port=app.config["ZIPKIN_PORT"])
        headers = {"Content-Type": "application/x-thrift"}
    
        # You'd probably want to wrap this in a try/except in case POSTing fails
        requests.post(zipkin_url, data=body, headers=headers)
    
    
    @app.route('/service1/')
    def index():
        with zipkin_span(
                service_name="service1",
                zipkin_attrs=ZipkinAttrs(
                    trace_id=request.headers.get('X-B3-TraceID', None),
                    span_id=request.headers.get('X-B3-SpanID', None),
                    parent_span_id=request.headers.get('X-B3-ParentSpanID', None),
                    flags=request.headers.get('X-B3-Flags', None),
                    is_sampled=request.headers.get('X-B3-Sampled', None),
                ),
                span_name='index_service1',
                transport_handler=http_transport,
                port=8000,
                sample_rate=100,  # 0.05, # Value between 0.0 and 100.0
        ) as zipkin_context:
            with zipkin_span(service_name="service1", span_name='service1_do_stuff'):
                do_stuff()
            print zipkin_context.zipkin_attrs.trace_id
        return 'OK', 200
    
    
    if __name__ == '__main__':
        app.run(host="0.0.0.0", port=8000, debug=True)
    

    访问http://127.0.0.1:5000/,然后登录zikin后台http://127.0.0.1:9411/可以看到如下界面:

    在这里插入图片描述
    点击搜索按钮,可以看到调用信息:
    在这里插入图片描述
    点击show进入调用链路可以看到消息树:
    在这里插入图片描述
    注意:zipkin版本必须为py_zipkin==0.20.0(ubuntu+python2.7),当使用0.20.1时,部分服务名为显示为UNKNOWN:
    在这里插入图片描述

    Zipkin存储方式

    按照上文的部署,zipkin的数据默认是存在内存中的。重启服务时数据会丢失。下面将存储方式改为mysql。

    新建zipkin数据库,在源码的zipkin-storage/mysql-v1/src/main/resources目录下找到sql脚本(https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql),执行sql脚本创建好数据表。

    启动zipkin服务端时指定数据库参数:

    STORAGE_TYPE=mysql MYSQL_USER=root MYSQL_PASS=123456 MYSQL_HOST=127.0.0.1 MYSQL_TCP_PORT=3306 java -jar zipkin-server-*exec.jar
    

    这样埋点数据就会存储到数据库中。zipkin_spans数据如下:
    在这里插入图片描述

    参考资料:

    [1]https://zipkin.io/
    [2]https://www.cnblogs.com/xiao987334176/p/12074335.html

    展开全文
  • Zipkin安装与初识

    千次阅读 2018-05-24 10:04:59
    Zipkin Zipkin是一个分布式跟踪系统。它有助于收集用于解决微服务架构中的延迟问题所需的时序数据。它管理数据的收集和查找。Zipkin的设计是基于Google Dapper paper。 应用程序被用来向Zipkin报告定时数据。...
  • Zipkin安装与项目配置

    2020-06-23 15:52:26
    安装Zipkin 注意:在 SpringBoot 2.x 版本后就不推荐自定义 zipkin server 了,推荐使用官网下载的 jar 包方式 下载地址 https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=...
  • Zipkin Server安装教程

    2021-05-13 22:00:54
    文章目录Zipkin Server安装教程下载启动 Zipkin Server安装教程 干什么 分布式链路调用监控。 下载 从中央仓库下载最新版zipkin-server。打开cmd,输入 ...
  • zipkin安装部署 1、下载zipkin安装包,下载url如下https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec 2、如果是自己指定的用户名和密码可以参考下面的启动...
  • Docker安装Zipkin

    2021-04-05 14:46:52
    一、Zipkin简介 通过Seuth产生的调用链监控信息,可以得知微服务之间的调用链路,但监控...二、Docker安装Zipkin docker run -d -p 9411:9411 openzipkin/zipkin 三、整合Zipkin 3.1 引入依赖 3.2 添加Z
  • Zipkin安装启动 下载最新版本 curl -sSL https://zipkin.io/quickstart.sh | bash -s 后台启动 nohup java -jar zipkin.jar & 访问控制台:http://127.0.0.1:9411 Sleuth配置 引入jar包 <!--...
  • Spring cloud Zipkin 链路追踪安装配置和使用,SpringCloud Zipkin server 下载安装 ================================ ©Copyright 蕃薯耀2021-03-29 https://www.cnblogs.com/fanshuyao/ 一、Spring cloud Zipkin ...
  • centos安装zipkin

    千次阅读 2018-07-17 14:42:37
    安装JDK1.8.0以上版本 [simon@localhost ~]$ mkdir -p data/release/zipkin &amp;amp;&amp;amp; cd &quot;$_&quot; [simon@localhost zipkin]$ wget -O zipkin.jar '...
  • docker 安装zipkin

    2021-03-05 14:09:52
    docker run -itd -p 9411:9411 openzipkin/zipkin
  • docker安装zipkin

    千次阅读 2019-12-05 16:19:22
    docker pull openzipkin/zipkin:2.12.9 docker run -d --name zipkin --restart=always -e KAFKA_BOOTSTRAP_SERVERS=10.18.0.39:9092 -e STORAGE_TYPE=elasticsearch -e ES_HOSTS=...
  • Centos7安装Zipkin

    千次阅读 2019-01-05 19:44:50
    在使用Zipkin之前,保证已安装好docker和Docker Compose工具 使用vi命令创建docker-compose.yml文件 vi docker-compose.yml 编辑内容如下: version: '2' services: # The zipkin process services the UI, ...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 325
精华内容 130
关键字:

zipkin安装