개요
이 가이드 에서는 Ruby 운전자 로 OpenTelemetry 추적을 사용하는 방법을 학습 . OpenTelemetry 는 원격 분석 데이터를 계측, 생성, 수집 및 내보내는 표준화된 방법을 제공하는 오픈 소스 관찰 가능성 프레임워크 입니다.
Ruby 운전자 MongoDB 작업의 성능과 동작을 이해하는 데 도움이 되는 OpenTelemetry 추적을 지원합니다. 추적을 활성화 하면 운전자 쿼리, 업데이트, 트랜잭션 등의 작업을 나타내는 범위를 생성합니다. 이러한 범위에는 MongoDB 시맨틱 규칙을 따르는 속성이 포함됩니다.
필수 종속성
OpenTelemetry 추적을 사용하려면 OpenTelemetry Ruby SDK와 내보내기를 설치해야 합니다. 애플리케이션 에 설치하려면 Gemfile에 다음 gem을 추가하세요.
gem 'opentelemetry-sdk' gem 'opentelemetry-exporter-otlp' # or your preferred exporter
추적을 활성화 했지만 OpenTelemetry 라이브러리가 로드되지 않은 경우 운전자 경고를 기록하고 추적을 자동으로 비활성화합니다.
OpenTelemetry 추적 활성화
클라이언트 만들 때 tracing 옵션을 지정하거나 환경 변수를 설정하여 OpenTelemetry 추적을 사용하도록 활성화 수 있습니다.
참고
클라이언트 구성에서 또는 환경 변수를 사용하여 추적을 설정하다 하지 않으면 기본값 으로 추적이 비활성화됩니다.
클라이언트 구성에서 추적 활성화
클라이언트 만들 때 추적을 활성화 하려면 다음 예시 와 같이 enabled 을 true로 설정하다 tracing 옵션을 전달합니다.
client = Mongo::Client.new(['localhost:27017'], database: 'my_database', tracing: { enabled: true } )
환경 변수로 추적 활성화
환경 변수를 사용하여 추적을 활성화 하려면 다음 예시 와 같이 클라이언트 만들기 전에 OTEL_RUBY_INSTRUMENTATION_MONGODB_ENABLED 환경 변수를 설정하다 .
export OTEL_RUBY_INSTRUMENTATION_MONGODB_ENABLED=true
환경 변수에 다음 값 중 하나를 사용하여 추적을 활성화 할 수 있습니다.
true1yes
변수를 설정하다 후 다음 예시 와 같이 클라이언트 만듭니다.
client = Mongo::Client.new(['localhost:27017'], database: 'my_database')
구성 옵션
tracing 옵션은 다음 매개변수를 허용합니다.
Parameter | 유형 | 설명 |
|---|---|---|
| 부울 | Enables or disables OpenTelemetry tracing. Default: nil |
| Integer | Specifies the maximum length of query text to include in span attributes. Set to 0 to excludequery text. The query text appears in the db.query.text attribute.Default: nil |
|
| Specifies a custom OpenTelemetry tracer instance. Default: Uses the default tracer from the global tracer provider |
다음 예시 사용 가능한 모든 추적 옵션을 구성하는 방법을 보여줍니다.
client = Mongo::Client.new(['localhost:27017'], database: 'my_database', tracing: { enabled: true, query_text_max_length: 1024, tracer: my_custom_tracer } )
작업 추적
Ruby 운전자 높은 수준의 작업과 낮은 수준의 명령 모두에 대해 OpenTelemetry 범위를 생성합니다. 다음 섹션에서는 생성된 스팬과 포함된 속성에 대해 설명합니다.
높은 수준의 작업
고급 작업은 컬렉션과 데이터베이스에서 직접 호출하는 메서드입니다. 운전자 다음 작업에 대한 스팬을 생성합니다.
작업 유형 | 운영 |
|---|---|
컬렉션 작업 |
|
인덱스 작업 |
|
데이터베이스 작업 |
|
상위 수준 작업의 스팬 이름은 {operation_name}.{collection_name} 형식을 사용합니다. 예시 들어 find.users, insertOne.orders 또는 aggregate.products입니다.
저수준 명령
로우 레벨 명령은 유선 프로토콜 통해 MongoDB 서버 로 전송되는 실제 명령입니다. 다음은 운전자 스팬을 생성하는 하위 수준 명령의 몇 가지 예입니다.
findinsertupdatedeleteaggregatecreatedrop
하위 수준 명령의 스팬 이름은 {command_name} 형식을 사용합니다. 예시 들어 find, insert 또는 update입니다.
명령 범위는 해당 작업 범위 아래에 중첩됩니다.
스팬 속성
운전자 MongoDB 시맨틱 규칙을 따르며 각 작업에 대한 컨텍스트를 제공하는 스팬 속성을 포함합니다.
모든 스팬에는 다음 속성이 포함됩니다.
db.system.name: 항상 다음으로 설정하다mongodbdb.namespace: 데이터베이스 이름db.collection.name: 컬렉션 이름(해당되는 경우)db.command.name: MongoDB 명령 이름(명령 범위에만 해당)db.query.summary: 쿼리 구조에 대한 높은 수준의 요약
네트워크 속성
명령 범위에는 다음과 같은 네트워크 속성이 포함됩니다.
server.address: MongoDB 서버 호스팅하다server.port: MongoDB 서버 포트network.transport: 다음과 같은 전송 프로토콜tcp
연결 속성
명령 범위에는 다음과 같은 연결 속성이 포함됩니다.
db.mongodb.server_connection_id: 서버에서 할당한 연결 IDdb.mongodb.driver_connection_id: 드라이버 할당 연결 ID
세션 및 트랜잭션 속성
세션 또는 트랜잭션을 사용하는 경우 범위에는 다음 속성이 포함됩니다.
db.mongodb.lsid: 논리적 세션 ID (세션 사용 시)db.mongodb.txn_number: 트랜잭션 번호( 트랜잭션 중인 경우)db.mongodb.cursor_id: 커서 ID (커서를 반환하는 작업의 경우)
쿼리 속성
0보다 큰 값으로 query_text_max_length 를 구성하면 스팬에는 다음 속성이 포함됩니다.
db.query.text: 지정된 최대 길이로 잘린 전체 쿼리 텍스트
오류 속성
작업이 실패하면 운전자 OpenTelemetry의 예외 기록 메커니즘을 사용하여 예외 세부 정보를 기록하고 스팬 상태를 ERROR로 설정합니다. MongoDB 작업 실패의 경우 db.response.status_code 속성에 오류 코드가 포함됩니다.
트랜잭션 추적
운전자 명시 트랜잭션 내의 모든 작업을 포함하는 특수 트랜잭션 범위를 생성합니다. 다음 예시 트랜잭션 추적을 보여줍니다.
session = client.start_session session.with_transaction do collection.insert_one({ name: 'Alice' }, session: session) collection.update_one( { name: 'Bob' }, { '$set' => { age: 30 } }, session: session ) end
앞의 예시 다음 구조와 유사한 범위 계층 구조를 생성합니다.
transaction └── insertOne.users └── insert (command) └── updateOne.users └── update (command)
참고
암시적 세션은 트랜잭션 범위를 생성하지 않습니다.
Error Handling
작업이 실패하면 운전자 OpenTelemetry의 예외 기록 메커니즘을 사용하여 해당 범위에서 예외를 기록합니다. 그러면 스팬 상태가 ERROR(으)로 설정하다 됩니다.
MongoDB 작업 실패의 경우 db.response.status_code 속성에 오류 코드가 포함됩니다.
오류로 인해 운전자 애플리케이션 에 예외를 발생시키는 것은 아닙니다.
성능 고려 사항
OpenTelemetry 추적을 사용할 때 다음과 같은 성능 영향을 고려하세요.
추적을 활성화 하면 운전자 스팬 생성 및 속성 컬렉션 위한 오버헤드 최소화합니다.
쿼리 텍스트 캡처(
db.query.text)에는 추가 오버헤드 있으므로 프로덕션 환경에서는 현명하게 사용해야 합니다.query_text_max_length를0로 설정하면 성능 향상을 위해 쿼리 텍스트 캡처가 비활성화됩니다.추적을 비활성화하면 기능 완전히 우회되므로 성능에 영향 주지 않습니다.
예시
다음 예시 MongoDB 애플리케이션 에 대한 OpenTelemetry 추적을 설정하다 방법을 보여줍니다.
require 'mongo' require 'opentelemetry/sdk' # Configure OpenTelemetry OpenTelemetry::SDK.configure do |c| c.service_name = 'my-app' end # Create MongoDB client with tracing enabled client = Mongo::Client.new(['localhost:27017'], database: 'test', tracing: { enabled: true, query_text_max_length: 1024 } ) # Use the client normally - operations are traced collection = client[:users] collection.insert_one({ name: 'Alice', age: 30 }) collection.find({ age: { '$gte': 25 } }).to_a
추가 정보
Ruby 사용한 OpenTelemetry 추적에 대해 자세히 학습 OpenTelemetry Ruby SDK를 참조하세요.