EUM iOS агент Proto Observability
На этой странице:
Подключение и инициализация агента и модулей Proto Observability
Для подключения агента используется SDK для автоматической инструментации (POBP iOS SDK).
Добавьте пакет protoobp-ios-sdk
как зависимость, используя ваш менеджер пакетов:
Менеджер пакетов | Способ подключения |
---|---|
CocoaPods | pod 'ProtoobpSDK', :git => 'https://git.proto.group/protoobp/protoobp-ios-sdk.git' |
Swift Package Manager | .package(url: "https://git.proto.group/protoobp/protoobp-ios-sdk.git", .upToNextMajor(from: "2.0.0")) |
Carthage | git "https://git.proto.group/protoobp/protoobp-ios-sdk.git" |
! Репозиторий с iOS SDK является приватным, учетную запись для скачивания пакетов можно получить у команды Proto.
Инициализируйте SDK и сделайте необходимые import:
import Protoobp //импортируйте пакет ProtoOBP SDK
// адрес для приема данных от RUM - данные должны проксироваться на https://proto-backend-server/mobile
let pobpEndpoint = URL(string: "https://your-site.ru/mobile")!
let pobpAppname = "ios-demo-app" // название приложения для отображения в интерфейсе
// список доменов для трейсинга - к запросам на эти домены будут добавляться заголовки для трейсинга
let firstPartyHosts: Set<String> = [
"https://my-site.ru",
"http://api.my-site.ru"
]
Protoobp.initialize(
appContext: .init(),
trackingConsent: .granted, // обязательно
configuration: Protoobp.Configuration
.builderUsing(
rumApplicationID: pobpAppname,
clientToken: "1", // обязательно 1
environment: "prod" // окружение, поддержка этого тега в интерфейсе появится позднее
)
.set(rumSessionsSamplingRate: 100.0) // 100.0 - все пользователи, 10.0 - 10% пользовательских сессиий
.set(sampleTelemetry: 0.0) // обязательно 0.0
.set(serviceName: pobpAppname)
.set(customTracesEndpoint: pobpEndpoint)
.set(customRUMEndpoint: pobpEndpoint)
.trackURLSession(firstPartyHosts: firstPartyHosts) //список доменов для трейсинга - к запросам на эти домены будут добавляться заголовки для трейсинга
.trackUIKitRUMViews() // обязательно
.trackUIKitRUMActions() // обязательно
.trackURLSession() // обязательно
.enableLogging(false) //обязательно
.build()
)
Global.sharedTracer = Tracer.initialize(configuration: .init()) // обязательно
// добавление данных о текущем пользователе - опционально
Protoobp.setUserInfo(
id: "1234", // строка, опционально
name: "Василий Пупкин", // строка, опционально
email: "vass@pupkine.com" // строка, опционально
)
Global.rum = RUMMonitor.initialize() // обязательно
Трейсинг запросов URLSession
Для сбора запросов отправленных от URLSession
используйте POBPURLSessionDelegate
как delegate
для этой URLSession
let session = URLSession(
configuration: .default,
delegate: POBPURLSessionDelegate(),
delegateQueue: nil
)
Если уже используется кастомный delegate
, есть два способа подключения:
- Используя наследование классов:
class YourCustomDelegateURLSessionDelegate: POBPURLSessionDelegate {
override func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
super.urlSession(session, task: task, didCompleteWithError: error) // отправка delegate на POBPURLSessionDelegate
/* код */
}
}
- Используя композицию классов:
private class YourCustomDelegateURLSessionDelegate: NSObject, URLSessionTaskDelegate, URLSessionDataDelegate, __URLSessionDelegateProviding {
// MARK: - __URLSessionDelegateProviding conformance
let pobpURLSessionDelegate = POBPURLSessionDelegate()
// MARK: - __URLSessionDelegateProviding handling
func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) {
pobpURLSessionDelegate.urlSession(session, task: task, didFinishCollecting: metrics) // отправка delegate на pobpURLSessionDelegate
/* код */
}
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
pobpURLSessionDelegate.urlSession(session, task: task, didCompleteWithError: error) // отправка delegate на pobpURLSessionDelegate
/* код */
}
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
pobpURLSessionDelegate.urlSession(session, dataTask: dataTask, didReceive: data) // отправка delegate на pobpURLSessionDelegate
/* код */
}
}
Сквозная трассировка запросов от iOS приложения
Трейсы транзакции от iOS к инструментированным бэкендам, то есть бэкендам, на которых установлены агенты Proto OBP, будут объединяться в единую цепочку вызовов - трейс распределенной транзакции, начавшейся на iOS устройстве.