當我們開發和維護應用程序時,應用程序的性能和穩定性對於用戶的體驗至關重要。但是,應用程序的性能和穩定性通常是很難監控和調試的。一個消息丟失,一個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