提升應用監控能力:嘗試Opentelemetry集成Skywalking

當我們開發和維護應用程序時,應用程序的性能和穩定性對於用戶的體驗至關重要。但是,應用程序的性能和穩定性通常是很難監控和調試的。一個消息丟失,一個API訪問不可用,一個後端服務的延遲,這些問題都會導致應用程序性能的下降,從而影響整個業務。因此,應用程序需要一個強大的監控和追蹤系統。Opentelemetry和Skywalking正是提供這樣的解決方案。

一、為什麼需要Opentelemetry和Skywalking?

Opentelemetry是一個開放式的觀察性框架,它使開發人員能夠現代化、標準化、自動化地捕捉分散式環境中應用程序的信息。它提供了一組標準API和SDK,可用於在應用程序組件中實現分散式跟蹤、日誌記錄和度量信息收集。

Skywalking是一個基於APM(Application Performance Management)的開源系統,為分散式實時跟蹤、服務網格和分散式系統中的性能監控提供支持。它提供了一個自動化的分散式跟蹤系統,可以監控大規模分散式系統中的性能問題,並提供關鍵指標以幫助調試和優化性能。

Opentelemetry和Skywalking的結合,可以提供更全面的服務監控和度量,以幫助應用程序更好地處理分散式調用,保證應用程序的性能和穩定性。

二、如何實現Opentelemetry和Skywalking的集成?

1、安裝Skywalking服務端

先從Skywalking官網下載最新版本的Skywalking服務端,並啟動。具體可參考Skywalking的官方文檔。

2、集成Opentelemetry SDK

為了在應用程序中啟用Opentelemetry,我們需要添加Opentelemetry庫和SDK以及與Skywalking協議的相應插件。

<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-api</artifactId>
    <version>1.4.1</version>
</dependency>

<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk-trace</artifactId>
    <version>1.4.1</version>
</dependency>

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace-opentelemetry-bridge</artifactId>
    <version>8.7.0</version>
</dependency>

3、添加Skywalking代理

為了將Opentelemetry SDK的跟蹤數據發送到Skywalking伺服器,我們需要添加Skywalking代理,並在應用程序中添加Skywalking自動代理插件。Skywalking代理可用於Java,.NET和PHP應用程序。

對於Java應用程序,我們需要添加以下虛擬機參數。

-javaagent:path/to/skywalking-agent.jar
-Dskywalking.agent.service_name=my-service
-Dskywalking.agent.instance_name=my-instance
-Dskywalking.collector.backend_service=127.0.0.1:11800

這將啟用Skywalking的自動代理插件,讓Skywalking知道應用程序的服務和實例名稱,並且將跟蹤數據發送到Skywalking伺服器。

三、如何使用Opentelemetry和Skywalking進行應用程序監控?

一旦集成了Opentelemetry和Skywalking,就可以開始監控應用程序的性能和穩定性。

1、分散式跟蹤

Opentelemetry提供了一個跟蹤API,用於幫助開發人員記錄應用程序中發生的跨組件調用。Skywalking提供一個自動化分散式跟蹤系統,可以自動檢測應用程序中組件之間的調用,並存儲和顯示跨組件跟蹤信息。

為了實現分散式跟蹤,我們需要在應用程序的組件之間添加跟蹤代碼。例如,下面是一個使用Opentelemetry SDK記錄跨越兩個RPC調用的跟蹤的例子:

private static final Tracer tracer = OpenTelemetry.getTracerProvider().get("my_service");

void doFirstRpcCall() {
  Span firstSpan = tracer.spanBuilder("my_span").startSpan();
  try (Scope scope = tracer.withSpan(firstSpan)) {
    rpcCall(); // perform the RPC call
    firstSpan.setStatus(Status.OK);
  } catch (Throwable throwable) {
    firstSpan.setStatus(Status.ERROR);
    firstSpan.recordException(throwable);
  } finally {
    firstSpan.end();
  }
}

void rpcCall() {
  Span span = tracer.spanBuilder("rpc_call_span").startSpan();
  try (Scope scope = tracer.withSpan(span)) {
    // perform the RPC call
    span.setStatus(Status.OK);
  } catch (Throwable throwable) {
    span.setStatus(Status.ERROR);
    span.recordException(throwable);
  } finally {
    span.end();
  }
}

這將創建兩個跟蹤:第一個跨越第一個組件,第二個跨越RPC組件。

我們可以在Skywalking UI中查看跟蹤信息:

2、指標收集

Opentelemetry提供了一個度量API,用於記錄應用程序的關鍵指標。Skywalking提供了自動化的度量儀錶板,可以顯示這些指標,並幫助開發人員識別和解決性能問題。

例如,我們可以使用Opentelemetry SDK記錄每個請求的延遲時間,並使用Skywalking Dashboard查看延遲時間的統計信息。

private static final Meter meter = OpenTelemetry.getMeterProvider().get("my_service");
private static final LongValueRecorder latencyRecorder = meter.
                                                      .longValueRecorderBuilder("request_latency")
                                                      .setUnit("ms")
                                                      .setDescription("Request latency in milliseconds")
                                                      .build();

void processRequest(Request request) {
  long startTime = System.currentTimeMillis();
  // process the request
  long endTime = System.currentTimeMillis();

  latencyRecorder.record(endTime - startTime);
}

四、總結

Opentelemetry和Skywalking是兩個強大的監控和追蹤工具,可以幫助開發人員監控分散式環境中的應用程序,並為性能調優和性能問題解決提供指導和支持。通過將這兩個工具集成在一起,我們可以更全面、更標準化地檢測和解決性能問題。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/245045.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:05
下一篇 2024-12-12 13:05

相關推薦

  • 如何提高財務數據分析能力

    財務數據分析能力是財務人員必備的核心技能之一。在這篇文章中,我們將從數據收集、數據分析和數據可視化三方面分享如何提高財務數據分析能力。 一、 數據收集 數據的準確性和完整性對於數據…

    編程 2025-04-28
  • 異或Python:用異或運算符增強Python編程能力

    Python是一種高級編程語言,被廣泛應用於Web開發、數據分析等領域。Python提供了豐富的數據類型和函數庫,但在某些情況下,Python自帶的運算符可能不夠靈活,無法滿足程序…

    編程 2025-04-27
  • SkyWalking原理詳解

    一、分散式追蹤的基本原理 在傳統的單體應用中,我們可以使用傳統的日誌來追蹤應用程序的狀態和行為。但是,隨著微服務架構的流行,這種方式已經不再適用於現代應用程序。由於微服務架構的分散…

    編程 2025-04-18
  • s-class的全能力解析

    一、什麼是s-class? s-class是一種Mercedes-Benz的高端轎車型號,它被設計成既可以用作豪華家庭用車,又可以用作優秀的商務車。 二、s-class的外觀特點 …

    編程 2025-04-12
  • Skywalking鏈路追蹤深度解析

    一、Skywalking鏈路追蹤概述 Skywalking是一款全面的分散式系統監控解決方案,它能夠監控Spring、Dubbo、Spring Cloud、gRPC、.NET Co…

    編程 2025-01-24
  • 深度學習框架的技術能力和應用價值

    一、框架介紹 深度學習框架是為了方便開發者構建深度學習模型的軟體套件,為人們提供了開發深度學習應用的有效工具。常見的深度學習框架有TensorFlow、PyTorch、Caffe、…

    編程 2025-01-20
  • 探究proceedon的全能力

    一、proceedon的優勢 proceedon是一種多功能的編程語言,它將程序員從各種語言和庫的限制中解放出來,為他們提供了更加自由的編程體驗。正如其名字所示,proceedon…

    編程 2025-01-20
  • CSSTransform3D的全能力

    在眾多的前端開發工具內,CSSTransform3D是一個非常最常用的技術。它可以非常方便地實現多種多樣的動畫效果。在本文中,我們將從多個方面對CSSTransform3D進行詳細…

    編程 2025-01-16
  • Python Web開發技能測試:展現你的全棧能力

    越來越多的人開始涉足Web開發,Python作為一門流行的編程語言,在Web開發中也扮演著重要的角色。Python Web開發技能測試是一項綜合性考試,可以展現你的Python W…

    編程 2025-01-14
  • Skywalking-docker詳解

    一、Skywalking-docker簡介 Skywalking-docker是一個基於Docker技術構建的,用於監控應用、服務、分散式系統的開源APM(Application …

    編程 2025-01-13

發表回復

登錄後才能評論