Docs Menu
Docs Home
/ /

OpenTelemetry로 추적

이 가이드 에서는 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 라이브러리가 로드되지 않은 경우 운전자 경고를 기록하고 추적을 자동으로 비활성화합니다.

클라이언트 만들 때 tracing 옵션을 지정하거나 환경 변수를 설정하여 OpenTelemetry 추적을 사용하도록 활성화 수 있습니다.

참고

클라이언트 구성에서 또는 환경 변수를 사용하여 추적을 설정하다 하지 않으면 기본값 으로 추적이 비활성화됩니다.

클라이언트 만들 때 추적을 활성화 하려면 다음 예시 와 같이 enabledtrue로 설정하다 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

환경 변수에 다음 값 중 하나를 사용하여 추적을 활성화 할 수 있습니다.

  • true

  • 1

  • yes

변수를 설정하다 후 다음 예시 와 같이 클라이언트 만듭니다.

client = Mongo::Client.new(['localhost:27017'],
database: 'my_database')

tracing 옵션은 다음 매개변수를 허용합니다.

Parameter
유형
설명

:enabled

부울

Enables or disables OpenTelemetry tracing.

Default: nil

:query_text_max_length

Integer

Specifies the maximum length of query text to
include in span attributes. Set to 0 to exclude
query text. The query text appears in the
db.query.text attribute.

Default: nil

:tracer

OpenTelemetry::Trace::Tracer

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 범위를 생성합니다. 다음 섹션에서는 생성된 스팬과 포함된 속성에 대해 설명합니다.

고급 작업은 컬렉션과 데이터베이스에서 직접 호출하는 메서드입니다. 운전자 다음 작업에 대한 스팬을 생성합니다.

작업 유형
운영

컬렉션 작업

find, insert_one, insert_many, update_one, update_many, delete_one, delete_many, find_one_and_update, find_one_and_delete, find_one_and_replace, replace_one, count_documents, estimated_document_count, distinct, aggregate

인덱스 작업

create_index, create_indexes, drop_index, drop_all_indexes, list_indexes

데이터베이스 작업

list_collections, create_collection, drop_collection, list_databases

상위 수준 작업의 스팬 이름은 {operation_name}.{collection_name} 형식을 사용합니다. 예시 들어 find.users, insertOne.orders 또는 aggregate.products입니다.

로우 레벨 명령은 유선 프로토콜 통해 MongoDB 서버 로 전송되는 실제 명령입니다. 다음은 운전자 스팬을 생성하는 하위 수준 명령의 몇 가지 예입니다.

  • find

  • insert

  • update

  • delete

  • aggregate

  • create

  • drop

하위 수준 명령의 스팬 이름은 {command_name} 형식을 사용합니다. 예시 들어 find, insert 또는 update입니다.

명령 범위는 해당 작업 범위 아래에 중첩됩니다.

운전자 MongoDB 시맨틱 규칙을 따르며 각 작업에 대한 컨텍스트를 제공하는 스팬 속성을 포함합니다.

모든 스팬에는 다음 속성이 포함됩니다.

  • db.system.name: 항상 다음으로 설정하다 mongodb

  • db.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: 서버에서 할당한 연결 ID

  • db.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)

참고

암시적 세션은 트랜잭션 범위를 생성하지 않습니다.

작업이 실패하면 운전자 OpenTelemetry의 예외 기록 메커니즘을 사용하여 해당 범위에서 예외를 기록합니다. 그러면 스팬 상태가 ERROR(으)로 설정하다 됩니다.

MongoDB 작업 실패의 경우 db.response.status_code 속성에 오류 코드가 포함됩니다.

오류로 인해 운전자 애플리케이션 에 예외를 발생시키는 것은 아닙니다.

OpenTelemetry 추적을 사용할 때 다음과 같은 성능 영향을 고려하세요.

  • 추적을 활성화 하면 운전자 스팬 생성 및 속성 컬렉션 위한 오버헤드 최소화합니다.

  • 쿼리 텍스트 캡처(db.query.text)에는 추가 오버헤드 있으므로 프로덕션 환경에서는 현명하게 사용해야 합니다. query_text_max_length0 로 설정하면 성능 향상을 위해 쿼리 텍스트 캡처가 비활성화됩니다.

  • 추적을 비활성화하면 기능 완전히 우회되므로 성능에 영향 주지 않습니다.

다음 예시 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를 참조하세요.

다음

C

이 페이지의 내용