在我之前的文章 “Elasticsearch:使用 Elastic APM 監(jiān)控 Android 應用程序(一)” 中,我詳述了如何使用 Elastic APM 來監(jiān)控 Android 應用程序。在今天的文章中,我來詳述如何部署 Elastic Stack,并使用文章中的示例代碼來進行展示。為了展示方便,在今天的展示中,我將所有的組件都安裝到同一臺機器 macOS 上。它的 private IP 地址為 192.168.0.3。
使用 Elastic APM 監(jiān)控 Android 應用程序
APM 集成架構
Elastic APM 集成由四個組件組成:APM 代理、Elastic APM 集成、Elasticsearch 和 Kibana。 通常,這四個組件可以通過兩種方式協(xié)同工作。邊緣機器上的 APM 代理將數據發(fā)送到集中托管的 APM 集成:
?
在本演示中,我們的邊緣設備也即 macOS。它通過 Elastic APM agent 采集信息,并傳輸到一個中央的 APM 集成。
在本次的演示中,我將使用最新的 Elastic Stack 8.7.0?來進行展示。
安裝
Elastic Stack
?我們先按照我之前的文章:
-
如何在 Linux,MacOS 及 Windows 上進行安裝 Elasticsearch
-
Kibana:如何在 Linux,MacOS 及 Windows 上安裝 Elastic 棧中的 Kibana
來安裝 Kibana 及 Elasticsearch。不過在安裝的時候,我們需要做一些調整。在啟動 Elasticsearch 之前,我們還必須針對 Elasticsearch 的配置文件做一項修改:
config/elasticsearch.yml
xpack.security.authc.api_key.enabled: true
我們把上面的配置添加到 config/elasticsearch.yml 文件的最后面。這個是為了能夠我們使用 API key 的方式來訪問 Elasticsearch。修改完畢后,我們啟動 Elasticsearch。
我們還必須為 Kibana 做一項修正。我們首先在 Kibana 的安裝目錄中使用如下的命令:
xpack.encryptedSavedObjects.encryptionKey: 5834bb75e1e8eaa4794439d228a0fe65
xpack.reporting.encryptionKey: d2a1337320c79c038f279167adc1a9ee
xpack.security.encryptionKey: 7cde0c75b035a99d000ed20b1e84b530
我們把上面的三個 keys 拷貝并粘貼到 config/kibana.yml 文件的最后面:
config/kibana.yml
?
添加完畢后,我們重新啟動 Kibana。
Kibana 需要 Internet 連接才能從 Elastic Package Registry 下載集成包。 確保 Kibana 服務器可以連接到端口 443 上的 https://epr.elastic.co。如果你的環(huán)境有網絡限制,則有一些方法可以解決此要求。 有關詳細信息,請參閱氣隙環(huán)境。
另外,我們必須注意的一點是 Fleet 在目前只供具有 superuser 角色的用戶使用。Fleet 是 Kibana 中的界面。它被用來管理及監(jiān)控 Elastic Agents。
Android Studio
如果你還沒有安裝好自己的 Android Studio,請到地址?https://developer.android.com/studio?去下載最新的發(fā)布,并進行相應的安裝。
配置 Fleet
使用 Kibana 中的 Fleet 來添加對 Elastic agent 的管理。第一次使用 Fleet 時,你可能需要對其進行設置并添加 Fleet Server。要部署自我管理的 Fleet Server,請安裝 Elastic Agent 并將其注冊到包含 Fleet Server 集成的代理策略中:
?
??
???
??
如上所示,我們在成功地創(chuàng)建 Fleet server policy 之后,然后選擇相應的操作系統(tǒng)來安裝 Elastic Agent。針對我的架構,我安裝 Elastic Agent 到我的 macOS 電腦上:
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.7.0-darwin-x86_64.tar.gz
tar xzvf elastic-agent-8.7.0-darwin-x86_64.tar.gz
cd elastic-agent-8.7.0-darwin-x86_64
sudo ./elastic-agent install \
--fleet-server-es=https://192.168.0.3:9200 \
--fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2ODE4MjkwODAxMzQ6LVo1OHN0Z2ZSNXlkOE5ZM3k5Tmd3dw \
--fleet-server-policy=fleet-server-policy \
--fleet-server-es-ca-trusted-fingerprint=9f268b75e5b9644109a69007310a97e0244fa86e7e80b3a50c55f937e38c7a66
??
?如果你之前在自己的電腦上已經安裝過,你可以去相應的目錄中先進行卸載。針對 macOS:
$ su
Password:
$ cd /Library/Elastic/Agent/
$ ./elastic-agent uninstall
Elastic Agent will be uninstalled from your system at /Library/Elastic/Agent. Do you want to continue? [Y/n]:y
Elastic Agent has been uninstalled.
針對 Linux OS:
liuxg@liuxgu:~$ su
Password:
root@liuxgu:/home/liuxg# cd /opt/Elastic/Agent/
root@liuxgu:/opt/Elastic/Agent# ./elastic-agent uninstall
Elastic Agent will be uninstalled from your system at /opt/Elastic/Agent. Do you want to continue? [Y/n]:y
I0418 10:31:42.996703 3635 leaderelection.go:248] attempting to acquire leader lease default/elastic-agent-cluster-leader...
Elastic Agent has been uninstalled.
?
稍等一會兒,我們就可以看到 liuxgm.local,也就是我的 macOS?機器上的 Agents 狀態(tài)顯示為?Healthy。我們點擊 Fleet Server Policy:?
???
???
???
??
??
??
?
從上面,我們可以看出我們已經成功地部署了 APM 服務器。
接下來,我們可以開始部署 APM agents 了。
直到這一步,我們可以查看我們已經啟動的端口:
$ netstat -an | grep LISTEN | grep 8200
tcp4 0 0 192.168.0.3.8200 *.* LISTEN
$ netstat -an | grep LISTEN | grep 8220
tcp46 0 0 *.8220 *.* LISTEN
$ netstat -an | grep LISTEN | grep 8080
$ netstat -an | grep LISTEN | grep 8080
tcp46 0 0 *.8080 *.* LISTEN
我們也可以使用如下的命令來查看 APM server:
curl http://192.168.0.3:8200
請注意:上面的 IP 地址是我電腦上的地址。你需要根據自己的電腦上的 IP 而改變。
$ curl http://192.168.0.3:8200
{
"build_date": "2023-03-27T18:03:39-04:00",
"build_sha": "80446fbb7881463fa549a8d669055a6f4b897f70",
"publish_ready": true,
"version": "8.7.0"
}
配置 APM agents
我們首先去地址?GitHub - elastic/sample-app-android-apm: Sample app to show the Elastic APM implementation on Android apps?下載源碼:
git clone https://github.com/elastic/sample-app-android-apm
然后,我們使用如下的命令來 check out uninstrumented 分支:
cd sample-app-android-apm
git checkout uninstrumented
我們需要重新配置這個 backend。在默認的情況下,它不能連接到 Elasticsearch。我們必須修改如下如下的配置文件:
backend/src/main/resources/elasticapm.properties
service_name=weather-backend
application_packages=co.elastic.apm.android.sample
server_url=http://192.168.0.3:8200
secret_token=YOUR_ELASTIC_APM_SECRET_TOKEN
你需要根據自己的 APM server 地址修改上面的地址。
啟動應用程序
我們接下來啟動應用程序。我們需要在應用程序中進行一些配置。
1)?按照 Elastic APM Android Agent 的設置指南進行操作:
將 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"
}
在我們的設計中,我們沒有使用 token,所以上面的 secretToken 可以不設置或者可以為任意字符串。如果你想設置 secretToken,請參閱我之前的文章 “Obsevability:安全的 APM 服務器訪問”。
2)唯一實際需要更改的代碼是一行代碼,用于在 Application.onCreate 方法中初始化 Elastic APM Android 代理。 此示例應用程序的應用程序類位于 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)
}
}
3)我們也同時需要修改如下地址的一個文件:
app/src/main/java/co/elastic/apm/android/sample/network/WeatherRestManager.kt
package co.elastic.apm.android.sample.network
import co.elastic.apm.android.sample.network.data.ForecastResponse
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object WeatherRestManager {
private val service: CityWeatherService by lazy {
val retrofit = Retrofit.Builder()
.baseUrl("http://192.168.0.3:8080/v1/")
.addConverterFactory(GsonConverterFactory.create())
.build()
retrofit.create(CityWeatherService::class.java)
}
suspend fun getCurrentCityWeather(city: String): ForecastResponse {
return service.getCurrentWeather(city)
}
}
如上所示,我們需要修改上面的 APM server 地址。
我們準備啟動演示。 (該 demo 旨在使用 Android 模擬器在本地環(huán)境中執(zhí)行。)因此,我們需要:
- 在位于示例項目根目錄的終端中使用此命令啟動后端服務:./gradlew bootRun(如果你使用的是 Windows,則為 gradlew.bat bootRun)。 或者,你可以從 Android Studio 啟動后端服務。
- 在 Android 模擬器(來自 Android Studio)中啟動天氣示例應用程序。
我們在 Android Studio 里運行 android 應用:
我們可以看到如下的模擬器:
?點擊 Next 按鈕:
我們嘗試其它城市的選擇。當我們選擇 New York 城市的時候,我們可以看到如下的錯誤:
我們回到 APM 的界面:
從上面的圖中,我們可以看到兩個服務。我們點擊 Service map:
很顯然這個是一個收費的功能。我們需要打開試用功能:
這樣就完成了試用的啟動。我們再次回到 Service map 界面:
點擊上面的 weather-sample-app:
文章來源:http://www.zghlxwxcb.cn/news/detail-421414.html
其它的畫面可以參考文章 “Elasticsearch:使用 Elastic APM 監(jiān)控 Android 應用程序(一)”。文章來源地址http://www.zghlxwxcb.cn/news/detail-421414.html
到了這里,關于Elasticsearch:使用 Elastic APM 監(jiān)控 Android 應用程序(二)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!