作者:Alexander Wert,?Cesar Munoz
人們通過私人和專業(yè)的移動應(yīng)用程序在智能手機上處理越來越多的事情。 擁有成千上萬甚至數(shù)百萬的用戶,確保出色的性能和可靠性是移動應(yīng)用程序和相關(guān)后端服務(wù)的提供商和運營商面臨的主要挑戰(zhàn)。 了解移動應(yīng)用程序的行為、崩潰的發(fā)生和類型、響應(yīng)時間慢的根本原因以及后端問題對用戶的實際影響是管理移動應(yīng)用程序和相關(guān)后端服務(wù)性能的關(guān)鍵。
Elastic 推出了適用于 Android 應(yīng)用程序的應(yīng)用程序性能監(jiān)控 (APM) 代理,允許開發(fā)人員跟蹤其應(yīng)用程序的關(guān)鍵方面,從崩潰和 HTTP 請求到屏幕渲染時間和端到端分布式跟蹤。 所有這些都有助于解決移動應(yīng)用程序、相應(yīng)后端服務(wù)及其交互的問題和性能缺陷。 Elastic APM Android 代理會自動檢測你的應(yīng)用程序及其依賴項,因此你可以簡單地將代理 “即插即用” 到你的應(yīng)用程序中,而不必擔(dān)心對代碼庫進行太多更改。
Elastic APM Android 代理是在 OpenTelemetry 之上從頭開發(fā)的,OpenTelemetry 是一種開放標(biāo)準(zhǔn)和可觀察性框架。 開發(fā)人員將能夠充分利用其功能,以及龐大而活躍的社區(qū)提供的支持。 如果你熟悉 OpenTelemetry 并且你的應(yīng)用程序已經(jīng)使用 OpenTelemetry 進行檢測,那么你可以在切換到 Elastic APM Android Agent 時簡單地重用它。 但如果情況并非如此,請不要擔(dān)心 —— 代理被配置為自動處理常見的可追蹤場景,而無需深入研究 OpenTelemetry API 的細節(jié)。
[相關(guān)文章:添加免費和開放的 Elastic APM 作為 Elastic 可觀察性部署的一部分]
使用 Elastic APM 監(jiān)控 Android 應(yīng)用程序
怎么運行的
Elastic APM Android Agent 是 SDK 和 Gradle 插件的組合。 SDK 包含實用程序,可讓你初始化和配置代理的行為,以及準(zhǔn)備和初始化 OpenTelemetry SDK。 你可以使用 SDK 以編程方式配置和初始化代理,特別是高級和特殊用例。
在大多數(shù)情況下,不需要編程配置和初始化。 相反,你可以使用提供的 Gradle 插件來配置代理并自動檢測你的應(yīng)用程序。 Gradle 插件在后臺使用 Byte Buddy 和官方 Android Gradle 插件 API,通過應(yīng)用程序及其依賴項類的編譯時轉(zhuǎn)換,自動將檢測代碼注入你的應(yīng)用程序。
在配置并啟用 Elastic Android APM 代理 Gradle 插件的情況下編譯你的應(yīng)用程序?qū)⑹鼓愕?Android 應(yīng)用程序在運行時報告跟蹤數(shù)據(jù)、指標(biāo)以及不同的事件和日志。
在 Android 應(yīng)用程序中使用 Elastic APM 代理
通過一個簡單的演示應(yīng)用程序,我們將按照 “設(shè)置代理” 指南中提到的步驟來設(shè)置 Elastic Android APM 代理。
先決條件
對于此示例,你將需要以下內(nèi)容:
- 啟用了 APM 的 Elastic Stack(我們推薦使用 Elastic 的 Cloud 產(chǎn)品。免費試用。)
- Java 11+
- Android Studio
- Android 模擬器、AVD 設(shè)備
你還需要一種方法將應(yīng)用程序的信號推送到 Elastic。 因此,你將需要 Elastic APM 的秘密令牌(secret token),稍后你將在我們的示例應(yīng)用程序中配置該令牌。
我們示例的測試項目
為了展示包括分布式跟蹤在內(nèi)的端到端場景,在此示例中,我們將檢測一個簡單的天氣應(yīng)用程序,該應(yīng)用程序包含兩個 Android UI 片段和一個基于 Spring Boot 的簡單本地后端服務(wù)。
第一個片段將有一個包含一些城市名稱的下拉列表以及一個將你帶到第二個片段的按鈕,你將在其中看到所選城市的當(dāng)前溫度。 如果你在第一個屏幕上選擇了一個非歐洲城市,那么當(dāng)你前往第二個屏幕時,你會從(本地)后端收到一個錯誤。 這是為了演示如何在 Elastic APM 中捕獲和關(guān)聯(lián)網(wǎng)絡(luò)和后端錯誤。
應(yīng)用 Elastic APM 代理插件
在下文中,我們將解釋從頭開始為 Android 應(yīng)用程序設(shè)置 Elastic APM Android 代理所需的所有步驟。 如果你想跳過這些說明并立即查看代理的運行情況,請使用該存儲庫的主分支并僅應(yīng)用步驟 (3.b),然后再繼續(xù)下一節(jié)(“設(shè)置本地后端服務(wù)”)。
1. 克隆示例應(yīng)用程序庫并在 Android Studio 中打開它。
2. 切換到 uninstrumented 的 repo 分支,從一個空白的、未檢測的 Android 應(yīng)用程序開始。 你可以運行此命令切換到未檢測的分支:
git checkout uninstrumented
3. 按照 Elastic APM Android Agent 的設(shè)置指南進行操作:
將 co.elastic.apm.android 插件添加到 app/build.gradle 文件(請確保使用該插件的最新版本,你可以在此處找到該插件)。
通過在 app/build.gradle 文件的 “elasticAPM” 部分中提供 “serverUrl” 和 “secretToken” 來配置代理與 Elastic APM 后端的連接。
// Android app's build.gradle file
plugins {
//...
id "co.elastic.apm.android" version "[latest_version]"
}
//...
elasticApm {
// Minimal configuration
serverUrl = "https://your.elastic.apm.endpoint"
// Optional
serviceName = "weather-sample-app"
serviceVersion = "0.0.1"
secretToken = "your Elastic APM secret token"
}
4. 唯一實際需要更改的代碼是一行代碼,用于在 Application.onCreate 方法中初始化 Elastic APM Android 代理。 此示例應(yīng)用程序的應(yīng)用程序類位于 app/src/main/java/co/elastic/apm/android/sample/MyApp.kt。
package co.elastic.apm.android.sample
import android.app.Application
import co.elastic.apm.android.sdk.ElasticApmAgent
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
ElasticApmAgent.initialize(this)
}
}
請記住,對于此示例,我們不會更改代理的默認配置 —— 如果你想了解有關(guān)如何更改的更多信息,請查看代理的運行時配置指南。
在啟動我們的 Android 天氣應(yīng)用程序之前,我們需要配置并啟動本地天氣后端服務(wù),如下一節(jié)所述。
設(shè)置本地后端服務(wù)
代理提供的關(guān)鍵功能之一是分布式跟蹤,它允許你查看 HTTP 事務(wù)的完整端到端故事,從我們的移動應(yīng)用程序開始并遍歷應(yīng)用程序使用的檢測后端服務(wù)。 Elastic APM 將以一個分布式跟蹤的形式向你展示全貌,這對于解決問題非常方便,尤其是與高延遲和后端錯誤相關(guān)的問題。
作為示例應(yīng)用程序的一部分,我們將啟動一個簡單的本地后端服務(wù)來處理我們應(yīng)用程序的 HTTP 請求。 后端服務(wù)使用 Elastic APM Java 代理進行檢測,以收集自己的 APM 數(shù)據(jù)并將其發(fā)送到 Elastic APM,使其能夠?qū)⒁苿咏换ヅc后端請求的處理相關(guān)聯(lián)。
為了配置本地服務(wù)器,我們需要在 backend/src/main/resources/elasticapm.properties 文件中設(shè)置我們的 Elastic APM 端點和秘密令牌(與上一步中我們的 Android 應(yīng)用程序使用的相同):
service_name=weather-backend
application_packages=co.elastic.apm.android.sample
server_url=YOUR_ELASTIC_APM_URL
secret_token=YOUR_ELASTIC_APM_SECRET_TOKEN
啟動演示
我們的示例應(yīng)用程序?qū)榇懋?dāng)前支持的框架獲得自動檢測,這意味著我們將看到屏幕渲染跨度以及開箱即用的 OkHttp 請求。 對于當(dāng)前不支持的框架,你可以應(yīng)用手動檢測來豐富你的 APM 數(shù)據(jù)(請參閱下面的 “手動檢測”)。
我們準(zhǔn)備啟動演示。 (該 demo 旨在使用 Android 模擬器在本地環(huán)境中執(zhí)行。)因此,我們需要:
- 在位于示例項目根目錄的終端中使用此命令啟動后端服務(wù):./gradlew bootRun(如果你使用的是 Windows,則為 gradlew.bat bootRun)。 或者,你可以從 Android Studio 啟動后端服務(wù)。
- 在 Android 模擬器(來自 Android Studio)中啟動天氣示例應(yīng)用程序。
一切運行后,我們需要在應(yīng)用程序中四處導(dǎo)航以生成一些我們希望在 Elastic APM 中觀察到的負載。 因此,選擇一個城市,單擊 “Next” 并重復(fù)多次。 請確保至少選擇 New York 一次。 你會看到天氣預(yù)報對紐約這個城市不起作用。 下面,我們將使用 Elastic APM 來找出選擇紐約時出現(xiàn)的問題。
初看 APM 結(jié)果
讓我們打開 Kibana 并導(dǎo)航到 Observability 解決方案。
在 Services 導(dǎo)航項下,你應(yīng)該看到兩個服務(wù)的列表:我們的 Android 應(yīng)用 weather-sample-app 和相應(yīng)的后端服務(wù) weather-backend。 單擊 Service map 選項卡以查看這些服務(wù)與任何外部服務(wù)之間依賴關(guān)系的可視化。
單擊 weather-sample-app 以深入了解 Android 應(yīng)用程序的儀表板。 移動應(yīng)用程序的服務(wù)視圖在發(fā)布此博文時處于技術(shù)預(yù)覽(technical preview)階段,但你已經(jīng)可以在該屏幕上看到有關(guān)該應(yīng)用程序的深入信息。 你會看到所選時間范圍內(nèi)的活動會話數(shù)量、weather-sample-app 發(fā)出的 HTTP 請求數(shù)量、請求的地理分布以及設(shè)備型號、操作系統(tǒng)版本、網(wǎng)絡(luò)連接類型和應(yīng)用程序的細分等信息 版本。 (有關(guān)崩潰和應(yīng)用程序加載時間的信息正在開發(fā)中。)
為了演示的目的,我們保持這個演示簡單,所以數(shù)據(jù)不那么多樣化,也相當(dāng)有限。 但是,當(dāng)你監(jiān)控使用次數(shù)較多且設(shè)備型號、操作系統(tǒng)版本等方面更加多樣化的移動應(yīng)用程序時,此類數(shù)據(jù)特別有用。當(dāng)你可以使用這些屬性進行過濾和分組你的 APM 數(shù)據(jù)時,故障排除和性能問題變得更加容易 。 你可以使用頂部的快速過濾器來執(zhí)行此操作,并查看指標(biāo)如何根據(jù)你的選擇被采用。
?
現(xiàn)在,讓我們看看如何處理單個用戶交互,包括對后端服務(wù)的下游調(diào)用。 在 Transactions 選項卡(頂部)下,我們看到不同的端到端 transaction 組,包括 FirstFragment 和 SecondFragment 的兩個 transactions。
讓我們深入研究 SecondFragment - 查看出現(xiàn)的 transaction,以查看此 transaction 組的指標(biāo)(例如,延遲、吞吐量)以及單個用戶交互的調(diào)用瀑布視圖。 正如我們在下面的屏幕截圖中看到的,在視圖創(chuàng)建之后,該片段向 10.0.2.2 執(zhí)行 HTTP GET 請求,這需要大約 130 毫秒。 在同一個瀑布中,我們看到 HTTP 調(diào)用由 weather-backend 服務(wù)處理,它本身對 api.open-meteo.com 進行 HTTP 調(diào)用。
?現(xiàn)在,當(dāng)查看紐約被選為城市的請求的瀑布視圖時,我們看到后端服務(wù)發(fā)生錯誤,這解釋了為什么預(yù)測對 New York 不起作用。 通過單擊紅色的查看相關(guān)錯誤標(biāo)記,你將獲得錯誤的詳細信息和問題的實際根本原因。
天氣后端的異常消息指出 “This service can only retrieve geo locations for European cities!” 這就是選擇 New York 作為城市的問題。
手動檢測
如前所述,Elastic APM Android Agent 代表你為受支持的框架執(zhí)行一系列自動檢測; 但是,在某些情況下,你可能希望根據(jù)應(yīng)用的用例獲得額外的檢測。 對于這些情況,你已經(jīng)了解了 OpenTelemetry API,它是 Elastic APM Android 代理的基礎(chǔ)。 OpenTelemetry Java SDK 包含用于創(chuàng)建自定義 spans、 metrics 和 logs 的工具,并且由于它是 Elastic APM Android 代理的基礎(chǔ),因此你無需在項目中添加任何額外依賴項也無需配置任何內(nèi)容即可使用它及將你的自定義信號連接到你自己的 Elastic 環(huán)境,就像代理為你做的那樣。
開始的方法是像這樣獲取 OpenTelemetry 的實例:
OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
然后你可以按照 OpenTelemetry Java 文檔中的說明創(chuàng)建自定義信號。 有關(guān)創(chuàng)建自定義 span 的示例,請參見以下示例:
OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
Tracer tracer = openTelemetry.getTracer("instrumentation-library-name", "1.0.0");
Span span = tracer.spanBuilder("my span").startSpan();
// Make the span the current span
try (Scope ss = span.makeCurrent()) {
// In this scope, the span is the current/active span
} finally {
span.end();
}
結(jié)論
在這篇博文中,我們演示了如何使用 Elastic APM Android 代理在基于 Android 的移動應(yīng)用程序中實現(xiàn)端到端的可觀察性。 設(shè)置代理只需幾分鐘,所提供的見解可讓你分析應(yīng)用的性能及其對后端服務(wù)的依賴性。 有了 Elastic APM Android Agent,你可以利用 Elastic 豐富的 APM 功能以及各種可能性,通過自定義檢測和自定義儀表板來自定義你的分析工作流程。
你好奇嗎? 然后自己試試。 在 Elastic Cloud 上注冊免費試用,使用本博客中所述的 Elastic APM Android 代理豐富你的 Android 應(yīng)用程序,并探索 Elastic 的可觀察性解決方案中的數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-412232.html
原文:Monitoring Android applications with Elastic APM | Elastic Blog文章來源地址http://www.zghlxwxcb.cn/news/detail-412232.html
到了這里,關(guān)于Elasticsearch:使用 Elastic APM 監(jiān)控 Android 應(yīng)用程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!