最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解

 更新時(shí)間:2023年03月03日 16:29:57   作者:janrs_com  
這篇文章主要為大家介紹了Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

作為分布式系統(tǒng)(或任何系統(tǒng))的一個(gè)組成部分,監(jiān)測(cè)基礎(chǔ)設(shè)施的重要性怎么強(qiáng)調(diào)都不過(guò)分。監(jiān)控不僅要跟蹤二進(jìn)制的 "上升 "和 "下降 "模式,還要參與到復(fù)雜的系統(tǒng)行為中。監(jiān)測(cè)基礎(chǔ)設(shè)施的設(shè)置可以讓人們深入了解性能、系統(tǒng)健康和長(zhǎng)期的行為模式。

這篇文章介紹了監(jiān)控基礎(chǔ)設(shè)施的一個(gè)方面--分布式跟蹤。

微服務(wù)架構(gòu)中的可觀(guān)察性

Kubernetes已經(jīng)成為微服務(wù)基礎(chǔ)設(shè)施和部署的事實(shí)上的協(xié)調(diào)器。這個(gè)生態(tài)系統(tǒng)非常豐富,是開(kāi)源社區(qū)中發(fā)展最快的系統(tǒng)之一。帶有Prometheus、ElasticSearch、Grafana、Envoy/Consul、Jaeger/Zipkin的監(jiān)控基礎(chǔ)設(shè)施構(gòu)成了一個(gè)堅(jiān)實(shí)的基礎(chǔ),以實(shí)現(xiàn)整個(gè)堆棧的指標(biāo)、日志、儀表盤(pán)、服務(wù)發(fā)現(xiàn)和分布式跟蹤。

分布式追蹤

分布式跟蹤能夠捕獲請(qǐng)求,并建立一個(gè)從用戶(hù)請(qǐng)求到數(shù)百個(gè)服務(wù)之間互動(dòng)的整個(gè)調(diào)用鏈的視圖。它還能對(duì)應(yīng)用程序的延遲(每個(gè)請(qǐng)求花了多長(zhǎng)時(shí)間)進(jìn)行檢測(cè),跟蹤網(wǎng)絡(luò)調(diào)用的生命周期(HTTP、RPC等),并通過(guò)獲得瓶頸的可見(jiàn)性來(lái)確定性能問(wèn)題。

下面的章節(jié)將介紹在Kubernetes設(shè)置中使用Jaeger對(duì)gRPC服務(wù)進(jìn)行分布式跟蹤。Jaeger Github Org有專(zhuān)門(mén)的Repo,用于Kubernetes中Jaeger的各種部署配置。這些都是很好的例子,我將嘗試分解每個(gè)Jaeger組件和它的Kubernetes部署。

Jaeger組件

Jaeger是一個(gè)開(kāi)源的分布式跟蹤系統(tǒng),實(shí)現(xiàn)了OpenTracing規(guī)范。Jaeger包括存儲(chǔ)、可視化和過(guò)濾跟蹤的組件。

架構(gòu)圖

Jaeger客戶(hù)端

應(yīng)用程序跟蹤儀表從Jaeger客戶(hù)端開(kāi)始。下面的例子使用Jaeger Go庫(kù)從環(huán)境變量初始化追 蹤 器配置,并啟用客戶(hù)端指標(biāo)。

package tracer
import (
    "io"
    "github.com/uber/jaeger-client-go/config"
    jprom "github.com/uber/jaeger-lib/metrics/prometheus"
)
func NewTracer() (opentracing.Tracer, io.Closer, error) {
    // load config from environment variables
    cfg, _ := jaegercfg.FromEnv()
	// 博客原來(lái):janrs.com
    // create tracer from config
    return cfg.NewTracer(
        config.Metrics(jprom.New()),
    )
}

Go客戶(hù)端使通過(guò)環(huán)境變量初始化Jaeger配置變得簡(jiǎn)單。一些需要設(shè)置的重要環(huán)境變量包括JAEGER_SERVICE_NAME、JAEGER_AGENT_HOST和JAEGER_AGENT_PORT。Jaeger Go客戶(hù)端支持的環(huán)境變量的完整列表列在這里

為了給你的gRPC微服務(wù)添加追蹤功能,我們將使用gRPC中間件來(lái)啟用gRPC服務(wù)器和客戶(hù)端的追蹤功能。 grpc-ecosystem/go-grpc-middleware有一個(gè)很棒的攔截器集合,包括支持OpenTracing提供者的服務(wù)器端和客戶(hù)端的攔截器。

grpc_opentracing包暴露了opentracing攔截器,可以用任何opentracing.Tracer實(shí)現(xiàn)來(lái)初始化。在這里,我們用連鎖的單項(xiàng)和流攔截器初始化了一個(gè)gRPC服務(wù)器。啟用它將創(chuàng)建一個(gè)根serverSpan,對(duì)于每個(gè)服務(wù)器端的gRPC請(qǐng)求,追 蹤 器將為服務(wù)中定義的每個(gè)RPC調(diào)用附加一個(gè)Span。

package grpc_server
import (
	"github.com/opentracing/opentracing-go"
	"github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing"
	"github.com/grpc-ecosystem/go-grpc-middleware"
	"google.golang.org/grpc"
  	"github.com/masroorhasan/myapp/tracer"		
)
func NewServer() (*grpc.Server, error) {
 	// initialize tracer
	tracer, closer, err := tracer.NewTracer()
	defer closer.Close()
	if err != nil {
		return &grpc.Server{}, err
	}
	opentracing.SetGlobalTracer(tracer)
	// initialize grpc server with chained interceptors # janrs.com
	s := grpc.NewServer(
		grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(
			// add opentracing stream interceptor to chain
			grpc_opentracing.StreamServerInterceptor(grpc_opentracing.WithTracer(tracer)),
  		)),
	  	grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(
			// add opentracing unary interceptor to chain
			grpc_opentracing.UnaryServerInterceptor(grpc_opentracing.WithTracer(tracer)),
		)),
	)
	return s, nil
}

為了實(shí)現(xiàn)對(duì)gRPC服務(wù)的上游和下游請(qǐng)求的追蹤,gRPC客戶(hù)端也必須用客戶(hù)端開(kāi)放追蹤攔截器進(jìn)行初始化,如下例所示。

package grpc_client
import (
    "github.com/opentracing/opentracing-go"
    "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing"
    "github.com/grpc-ecosystem/go-grpc-middleware"
    "google.golang.org/grpc"
    "github.com/masroorhasan/myapp/tracer"
)
func NewClientConn(address string) (*grpc.ClientConn, error) {
    // initialize tracer #博文來(lái)源:janrs.com
    tracer, closer, err := tracer.NewTracer()
    defer closer.Close()
    if err != nil {
        return &grpc.ClientConn{}, err
    }
    // initialize client with tracing interceptor [#博文來(lái)源:janrs.com#] using grpc client side chaining
    return grpc.Dial(
        address,
        grpc.WithStreamInterceptor(grpc_middleware.ChainStreamClient(
            grpc_opentracing.StreamClientInterceptor(grpc_opentracing.WithTracer(tracer)),
        )),
        grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(
            grpc_opentracing.UnaryClientInterceptor(grpc_opentracing.WithTracer(tracer)),
        )),
     )
}

由gRPC中間件創(chuàng)建的父跨度被注入到go上下文中,從而實(shí)現(xiàn)強(qiáng)大的跟蹤支持。opentracing go客戶(hù)端可以用來(lái)將子跨度附加到父跨度上,以實(shí)現(xiàn)更精細(xì)的追蹤,以及控制每個(gè)跨度的壽命,為追蹤添加自定義標(biāo)簽等。

Jaeger代理

Jaeger代理是一個(gè)守護(hù)進(jìn)程,它通過(guò)UDP接收來(lái)自Jaeger客戶(hù)端的跨度,并將它們分批轉(zhuǎn)發(fā)給收集器。該代理作為一個(gè)緩沖器,從客戶(hù)那里抽象出批處理和路由。

盡管代理是作為一個(gè)守護(hù)程序建立的,但在Kubernetes設(shè)置中,代理可以被配置為在應(yīng)用Pod中作為一個(gè)sidecar容器運(yùn)行,或作為一個(gè)獨(dú)立的DaemonSet。

下文討論了每種部署策略的優(yōu)點(diǎn)和缺點(diǎn)。

Jaeger SideCar 代理

Jaeger Sidecar 代理是一個(gè)容器,與你的應(yīng)用容器放在同一個(gè)艙中。表示為Jaeger服務(wù)的應(yīng)用程序myapp將通過(guò)localhost向代理發(fā)送Jaeger跨度到6381端口。[#博文來(lái)源:janrs.com#]如前所述,這些配置是通過(guò)客戶(hù)端的環(huán)境變量JAEGER_SERVICE_NAME、JAEGER_AGENT_HOST和JAEGER_AGENT_PORT設(shè)置的。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  namespace: default
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: masroorhasan/myapp
        ports:
        - containerPort: 80
        env:
        - name: JAEGER_SERVICE_NAME
          value: myapp
        - name: JAEGER_AGENT_HOST
          value: localhost  # default
        - name: JAEGER_AGENT_PORT
          value: "6831"
        resources:
          limits:
            memory: 500M
            cpu: 250m
          requests:
            memory: 500M
            cpu: 250m
      # sidecar agent
      - name: jaeger-agent
        image: jaegertracing/jaeger-agent:1.6.0
        ports:
        - containerPort: 5775
          protocol: UDP
        - containerPort: 5778
          protocol: TCP
        - containerPort: 6831
          protocol: UDP
        - containerPort: 6832
          protocol: UDP
        command:
          - "/go/bin/agent-linux"
          - "--collector.host-port=jaeger-collector.monitoring:14267"
        resources:
          limits:
            memory: 50M
            cpu: 100m
          requests:
            memory: 50M
            cpu: 100m

通過(guò)這種方法,每個(gè)代理(也就是每個(gè)應(yīng)用)都可以被配置為向不同的收集器(也就是不同的后端存儲(chǔ))發(fā)送痕跡。

然而,這種方法最大的缺點(diǎn)之一是將代理的生命周期和應(yīng)用程序緊密結(jié)合在一起。追蹤的目的是在應(yīng)用程序的生命周期內(nèi)提供對(duì)其的洞察力。更有可能的是,代理側(cè)車(chē)容器在主應(yīng)用容器之前被殺死,在應(yīng)用服務(wù)關(guān)閉期間,任何/所有重要的追蹤都會(huì)丟失。這些痕跡的丟失對(duì)于理解復(fù)雜服務(wù)交互的應(yīng)用生命周期行為可能是非常重要的。這個(gè)GitHub問(wèn)題驗(yàn)證了在關(guān)機(jī)期間正確處理SIGTERM的必要性。

Jaeger Daemonset 代理

另一種方法是通過(guò)Kubernetes中的DaemonSet工作負(fù)載,將代理作為集群中每個(gè)節(jié)點(diǎn)的守護(hù)程序運(yùn)行。DaemonSet工作負(fù)載可以確保當(dāng)節(jié)點(diǎn)被擴(kuò)展時(shí),DaemonSet Pod的副本也隨之?dāng)U展。

在這種情況下,每個(gè)代理守護(hù)程序負(fù)責(zé)從其節(jié)點(diǎn)中安排的所有運(yùn)行中的應(yīng)用程序(配置了Jaeger客戶(hù)端)中獲取追蹤信息。這是通過(guò)在客戶(hù)端設(shè)置JAEGER_AGENT_HOST指向節(jié)點(diǎn)中代理的IP來(lái)配置的。代理DaemonSet被配置為hostNetwork: true和適當(dāng)?shù)腄NS策略,以便Pod使用與主機(jī)相同的IP。由于代理的6831端口是通過(guò)UDP接受jaeger.thrift消息的,所以守護(hù)的Pod配置端口也與hostPort: 6831綁定。

# Auth : janrs.com
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  namespace: default
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: masroorhasan/myapp
        ports:
        - containerPort: 80
        env:
        - name: JAEGER_SERVICE_NAME
          value: myapp
        - name: JAEGER_AGENT_HOST   # NOTE: Point to the Agent daemon on the Node
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        - name: JAEGER_AGENT_PORT
          value: "6831"
        resources:
          limits:
            memory: 500M
            cpu: 250m
          requests:
            memory: 500M
            cpu: 250m
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: jaeger-agent
  namespace: monitoring
  labels:
    app: jaeger
    jaeger-infra: agent-daemonset
spec:
  template:
    metadata:
      labels:
        app: jaeger
        jaeger-infra: agent-instance
    spec:
      hostNetwork: true     # NOTE: Agent is configured to have same IP as the host/node
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - name: agent-instance
        image: jaegertracing/jaeger-agent:1.6.0
        command:
          - "/go/bin/agent-linux"
          - "--collector.host-port=jaeger-collector.monitoring:14267"
          - "--processor.jaeger-binary.server-queue-size=2000"
          - "--discovery.conn-check-timeout=500ms"
        ports:
        - containerPort: 5775
          protocol: UDP
        - containerPort: 6831
          protocol: UDP
          hostPort: 6831
        - containerPort: 6832
          protocol: UDP
        - containerPort: 5778
          protocol: TCP
        resources:
          requests:
            memory: 200M
            cpu: 200m
          limits:
            memory: 200M
            cpu: 200m

人們可能會(huì)被誘 惑(就像我一樣),用Kubernetes服務(wù)來(lái)引導(dǎo)DaemonSet。這背后的想法是,不要把應(yīng)用程序的痕跡綁定到當(dāng)前節(jié)點(diǎn)的單一代理上。使用服務(wù)可以將工作負(fù)載(跨度)分散到集群中的所有代理。這在理論上減少了在受影響節(jié)點(diǎn)的單個(gè)代理莢發(fā)生故障的情況下,應(yīng)用實(shí)例丟失跨度的機(jī)會(huì)。

然而,當(dāng)你的應(yīng)用程序擴(kuò)展時(shí),這將不起作用,高負(fù)載會(huì)在需要處理的痕跡數(shù)量上產(chǎn)生巨大的峰值。使用Kubernetes服務(wù)意味著通過(guò)網(wǎng)絡(luò)從客戶(hù)端向代理發(fā)送追蹤信息。很快,我就開(kāi)始注意到大量的掉線(xiàn)現(xiàn)象??蛻?hù)端通過(guò)UDP thrift協(xié)議向代理發(fā)送跨度,大量的峰值導(dǎo)致超過(guò)UDP最大數(shù)據(jù)包大小,從而導(dǎo)致丟包。

解決辦法是適當(dāng)?shù)胤峙滟Y源,使Kubernetes在整個(gè)集群中更均勻地調(diào)度pod。[#博文來(lái)源:janrs.com#]我們可以增加客戶(hù)端的隊(duì)列大?。ㄔO(shè)置JAEGER_REPORTER_MAX_QUEUE_SIZE環(huán)境變量),以便在代理失效時(shí)有足夠的緩沖空間。增加代理的內(nèi)部隊(duì)列大小也是有益的(設(shè)置處理器.jaeger-binary.server-queue-size值),這樣他們就不太可能開(kāi)始丟棄跨度。

Jaeger Collector 服務(wù)

Jaeger收集器負(fù)責(zé)從Jaeger代理那里接收成批的跨度,通過(guò)處理管道運(yùn)行它們,并將它們存儲(chǔ)在指定的存儲(chǔ)后端??缍纫詊aeger.thrift格式從Jaeger代理處通過(guò)TChannel(TCP)協(xié)議發(fā)送,端口為14267。

Jaeger收集器是無(wú)狀態(tài)的,可以根據(jù)需要擴(kuò)展到任何數(shù)量的實(shí)例。因此,收集器可以由Kubernetes內(nèi)部服務(wù)(ClusterIP)前置,可以從代理到不同收集器實(shí)例的內(nèi)部流量進(jìn)行負(fù)載平衡。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jaeger-collector
  namespace: monitoring
  labels:
    app: jaeger
    jaeger-infra: collector-deployment
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: jaeger
        jaeger-infra: collector-pod
    spec:
      containers:
      - image: jaegertracing/jaeger-collector:1.6.0
        name: jaeger-collector
        args: ["--config-file=/conf/collector.yaml"]
        ports:
        - containerPort: 14267
          protocol: TCP
        - containerPort: 14268
          protocol: TCP
        - containerPort: 9411
          protocol: TCP
        readinessProbe:
          httpGet:
            path: "/"
            port: 14269
        volumeMounts:
        - name: jaeger-configuration-volume
          mountPath: /conf
        env:
        - name: SPAN_STORAGE_TYPE
          valueFrom:
            configMapKeyRef:
              name: jaeger-configuration
              key: span-storage-type
      volumes:
        - configMap:
            name: jaeger-configuration
            items:
              - key: collector
                path: collector.yaml
          name: jaeger-configuration-volume
      resources:
        requests:
          memory: 300M
          cpu: 250m
        limits:
          memory: 300M
          cpu: 250m
---
apiVersion: v1
kind: Service
metadata:
  name: jaeger-collector
  namespace: monitoring
  labels:
    app: jaeger
    jaeger-infra: collector-service
spec:
  ports:
  - name: jaeger-collector-tchannel
    port: 14267
    protocol: TCP
    targetPort: 14267
  selector:
    jaeger-infra: collector-pod
  type: ClusterIP
view raw

Jaeger Query 查詢(xún)服務(wù)

查詢(xún)服務(wù)是支持用戶(hù)界面的Jaeger服務(wù)器。它負(fù)責(zé)從存儲(chǔ)器中檢索痕跡,并將其格式化以顯示在用戶(hù)界面上。根據(jù)查詢(xún)服務(wù)的使用情況,它的資源占用率非常小。

設(shè)置一個(gè)內(nèi)部Jaeger用戶(hù)界面的入口,指向后端查詢(xún)服務(wù)。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jaeger-query
  namespace: monitoring
  labels:
    app: jaeger
    jaeger-infra: query-deployment
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: jaeger
        jaeger-infra: query-pod
    spec:
      containers:
      - image: jaegertracing/jaeger-query:1.6.0
        name: jaeger-query
        args: ["--config-file=/conf/query.yaml"]
        ports:
        - containerPort: 16686
          protocol: TCP
        readinessProbe:
          httpGet:
            path: "/"
            port: 16687
        volumeMounts:
        - name: jaeger-configuration-volume
          mountPath: /conf
        env:
        - name: SPAN_STORAGE_TYPE
          valueFrom:
            configMapKeyRef:
              name: jaeger-configuration
              key: span-storage-type
        resources:
          requests:
            memory: 100M
            cpu: 100m
          limits:
            memory: 100M
            cpu: 100m
      volumes:
        - configMap:
            name: jaeger-configuration
            items:
              - key: query
                path: query.yaml
          name: jaeger-configuration-volume
---
apiVersion: v1
kind: Service
metadata:
  name: jaeger-query
  namespace: monitoring
  labels:
    app: jaeger
    jaeger-infra: query-service
spec:
  ports:
  - name: jaeger-query
    port: 16686
    targetPort: 16686
  selector:
    jaeger-infra: query-pod
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: jaeger-ui
 namespace: monitoring
 annotations:
   kubernetes.io/ingress.class: traefik # or nginx or whatever ingress controller
spec:
 rules:
 - host: jaeger.internal-host # your jaeger internal endpoint
   http:
     paths:
     - backend:
         serviceName: jaeger-query
         servicePort: 16686 

Storage Configuration 存儲(chǔ)配置

Jaeger同時(shí)支持ElasticSearch和Cassandra作為存儲(chǔ)后端。使用ElasticSearch作為存儲(chǔ),可以擁有一個(gè)強(qiáng)大的監(jiān)控基礎(chǔ)設(shè)施,將跟蹤和日志記錄聯(lián)系在一起。采集器處理管道的一部分是為其存儲(chǔ)后端索引跟蹤--這將使跟蹤顯示在你的日志UI(例如Kibana)中,也將跟蹤ID與你的結(jié)構(gòu)化日志標(biāo)簽綁定。你可以通過(guò)SPAN_STORAGE_TYPE的環(huán)境變量將存儲(chǔ)類(lèi)型設(shè)置為ElasticSearch,并通過(guò)配置配置存儲(chǔ)端點(diǎn)。

Kubernetes ConfigMap用于設(shè)置一些Jaeger組件的存儲(chǔ)配置。例如,Jaeger收集器和查詢(xún)服務(wù)的存儲(chǔ)后端類(lèi)型和端點(diǎn)。

apiVersion: v1
kind: ConfigMap
metadata:
  name: jaeger-configuration
  namespace: monitoring
  labels:
    app: jaeger
    jaeger-infra: configuration
data:
  span-storage-type: elasticsearch
  collector: |
    es:
      server-urls: http://elasticsearch:9200
    collector:
      zipkin:
        http-port: 9411
  query: |
    es:
      server-urls: http://elasticsearch:9200

監(jiān)控

如前所述,追蹤是監(jiān)控基礎(chǔ)設(shè)施的一個(gè)重要組成部分。這意味著,甚至你的追蹤基礎(chǔ)設(shè)施的組件也需要被監(jiān)控。

Jaeger在每個(gè)組件的特定端口上以Prometheus格式暴露指標(biāo)。如果有正在運(yùn)行的Prometheus節(jié)點(diǎn)導(dǎo)出器(它絕對(duì)應(yīng)該是)在特定的端口上刮取指標(biāo) - 然后將你的Jaeger組件的指標(biāo)端口映射到節(jié)點(diǎn)導(dǎo)出器正在刮取指標(biāo)的端口。

這可以通過(guò)更新Jaeger服務(wù)(代理、收集器、查詢(xún))來(lái)完成,將它們的指標(biāo)端口(5778、14628或16686)映射到節(jié)點(diǎn)出口商期望搜刮指標(biāo)的端口(例如8888/8080)。

一些需要跟蹤的重要指標(biāo)。

Health of each component — memory usage: sum(rate(container_memory_usage_bytes{container_name=~”^jaeger-.+”}[1m])) by (pod_name)

Health of each component — CPU usage: sum(rate(container_cpu_usage_seconds_total{container_name=~"^jaeger-.+"}[1m])) by (pod_name)

Batch failures by Jaeger Agent: sum(rate(jaeger_agent_tc_reporter_jaeger_batches_failures[1m])) by (pod)

Spans dropped by Collector: sum(rate(jaeger_collector_spans_dropped[1m])) by (pod)

Queue latency (p95) of Collector: histogram_quantile(0.95, sum(rate(jaeger_collector_in_queue_latency_bucket[1m])) by (le, pod))

這些指標(biāo)為了解每個(gè)組件的性能提供了重要的見(jiàn)解,歷史數(shù)據(jù)應(yīng)被用來(lái)進(jìn)行最佳設(shè)置。

以上就是Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解的詳細(xì)內(nèi)容,更多關(guān)于Kubernetes Jaeger分布式追蹤的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

镶黄旗| 唐海县| 普兰县| 淳化县| 平江县| 社旗县| 云阳县| 来安县| 崇州市| 丹东市| 阳朔县| 宜君县| 博客| 九台市| 青州市| 巴东县| 武冈市| 紫金县| 神农架林区| 临海市| 东明县| 义乌市| 晋江市| 绿春县| 夏邑县| 凤城市| 大同市| 额尔古纳市| 浦东新区| 岢岚县| 西宁市| 山丹县| 巨野县| 岑溪市| 呼伦贝尔市| 曲松县| 元谋县| 惠州市| 疏勒县| 荥阳市| 奈曼旗|