개요
이 가이드 에서는 MongoDB PHP 라이브러리에서 모니터링 설정하다 하고 구성하는 방법을 학습 수 있습니다.
모니터링은 애플리케이션이 실행될 때 애플리케이션의 동작에 대한 정보를 수집하는 프로세스 입니다. 이 정보는 애플리케이션 설계하고 디버깅할 때 정보에 입각한 결정을 내리는 데 도움이 될 수 있습니다. 모니터링 이벤트의 정보를 사용하여 애플리케이션의 성능 및 리소스 사용을 추적 할 수도 있습니다.
MongoDB PHP 라이브러리는 애플리케이션 정보를 제공하는 명령 이벤트와 서버 검색 및 모니터링(SDAM) 이벤트를 전송합니다. 이러한 이벤트를 수신하여 애플리케이션 모니터 할 수 있습니다.
참고
이 페이지에서는 코드로 애플리케이션 모니터 방법을 설명합니다. 이 정보를 외부 로그 에 기록 방법을 학습 로그 드라이버 이벤트 가이드 참조하세요.
이벤트 유형
운전자 발생시키는 이벤트 유형은 수행 중인 작업에 따라 달라집니다. 다음 표에서는 운전자 내보내는 이벤트 유형에 대해 설명합니다.
eventType | 설명 |
---|---|
명령 이벤트 |
|
서버 검색 및 모니터링(SDAM) 이벤트 | MongoDB deployment 상태 의 변경과 관련된 이벤트입니다. |
이벤트를 모니터링합니다.
이벤트를 모니터 하려면 다음 조치를 수행해야 합니다.
이벤트 구독자 생성: 명령 또는 SDAM 이벤트 구독자를 구현하는 클래스를 생성합니다.
이벤트 구독자 등록:
MongoDB\Client
에 모니터링 이벤트 구독자를 등록합니다.
팁
구독 할 수 있는 모니터링 이벤트 목록을 보려면 PHP 매뉴얼의 모니터링 클래스 및 구독자 함수 섹션을 참조하세요.
이벤트 구독자 만들기
모니터링 이벤트 를 구독 하려면 이벤트 구독자 인터페이스를 구현하는 클래스를 만듭니다. 다음 인터페이스를 구현 수 있습니다.
MongoDB\Driver\Monitoring\CommandSubscriber
, 명령 이벤트를 구독합니다.MongoDB\Driver\Monitoring\SDAMSubscriber
, SDAM 이벤트를 구독합니다.
명령 이벤트 구독자 예제
SDAM 이벤트 를 구독 하려면 MongoDB\Driver\Monitoring\CommandSubscriber
인터페이스를 구현하는 클래스를 만듭니다. 클래스에서 각 CommandSubscriber
메서드를 정의합니다. 다음 표에서는 이러한 메서드와 해당 메서드 알림 받는 명령 이벤트에 대해 설명합니다.
메서드 | 명령 이벤트 | 설명 |
---|---|---|
명령이 성공하지 못할 때 호출됩니다. | ||
서버 에 명령이 전송될 때 호출됩니다. | ||
명령이 성공하면 호출됩니다. |
다음 코드는 CommandSubscriber
인터페이스를 구현하는 MyCommandSubscriber
클래스를 만듭니다. 이 클래스는 각 CommandSubscriber
메서드를 정의하고 서버 수신하는 각각의 새 명령에 대한 세부 정보를 출력하는 commandStarted()
메서드에 대한 사용자 지정 로직을 포함합니다.
class MyCommandSubscriber implements MongoDB\Driver\Monitoring\CommandSubscriber { /** @param resource $stream */ public function __construct(private $stream) { } public function commandStarted(MongoDB\Driver\Monitoring\CommandStartedEvent $event): void { fwrite($this->stream, sprintf( 'Started command #%d "%s": %s%s', $event->getRequestId(), $event->getCommandName(), MongoDB\BSON\Document::fromPHP($event->getCommand())->toCanonicalExtendedJSON(), PHP_EOL, )); } public function commandSucceeded(MongoDB\Driver\Monitoring\CommandSucceededEvent $event): void { } public function commandFailed(MongoDB\Driver\Monitoring\CommandFailedEvent $event): void { } }
SDAM 이벤트 구독자 예시
SDAM 이벤트 를 구독 하려면 MongoDB\Driver\Monitoring\SDAMSubscriber
인터페이스를 구현하는 클래스를 만듭니다. 클래스에서 각 SDAMSubscriber
메서드를 정의합니다. 다음 표에서는 이러한 메서드와 해당 메서드 알림 받는 명령 이벤트에 대해 설명합니다.
메서드 | SDAM 이벤트 | 설명 |
---|---|---|
서버의 설명이 변경될 때 호출됩니다. | ||
서버 토폴로지 에서 제거될 때 호출됩니다. | ||
서버 하트비트가 실패할 때 호출됩니다. | ||
서버 하트비트를 수신할 때 호출됩니다. | ||
서버 하트비트가 성공하면 호출됩니다. | ||
토폴로지 에 새 서버 추가될 때 호출됩니다. | ||
토폴로지 설명이 변경될 때 호출됩니다. | ||
토폴로지 닫힐 때 호출됩니다. | ||
토폴로지 가 열릴 때 호출됩니다. |
다음 코드는 SDAMSubscriber
인터페이스를 구현하는 MySDAMSubscriber
클래스를 만듭니다. 이 클래스는 각 SDAMSubscriber
메서드를 정의하고 토폴로지 에 추가된 서버에 대한 세부 정보를 출력하는 serverOpening()
메서드에 대한 사용자 지정 로직을 포함합니다.
class MySDAMSubscriber implements MongoDB\Driver\Monitoring\SDAMSubscriber { /** @param resource $stream */ public function __construct(private $stream) { } public function serverOpening(MongoDB\Driver\Monitoring\ServerOpeningEvent $event): void { fprintf( $this->stream, 'Server opening on %s:%s\n', $event->getHost(), $event->getPort(), PHP_EOL, ); } public function serverClosed(MongoDB\Driver\Monitoring\ServerClosedEvent $event): void { } public function serverChanged(MongoDB\Driver\Monitoring\ServerChangedEvent $event): void { } public function serverHeartbeatFailed(MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent $event): void { } public function serverHeartbeatStarted(MongoDB\Driver\Monitoring\ServerHeartbeatStartedEvent $event): void { } public function serverHeartbeatSucceeded(MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent $event): void { } public function topologyChanged(MongoDB\Driver\Monitoring\TopologyChangedEvent $event): void { } public function topologyClosed(MongoDB\Driver\Monitoring\TopologyClosedEvent $event): void { } public function topologyOpening(MongoDB\Driver\Monitoring\TopologyOpeningEvent $event): void { } }
이벤트 구독자 등록
구독자 인터페이스를 구현하는 클래스를 만든 후 클라이언트 에 대한 이벤트 알림 받으려면 이 클래스를 MongoDB\Client
에 등록해야 합니다. 구독자를 등록하려면 MongoDB\Client::addSubscriber()
메서드를 호출하고 구독자 클래스의 인스턴스 매개 변수로 전달합니다.
예시
다음 코드는 이 페이지의 이벤트 구독자 생성하기 섹션에서 생성된 명령 및 SDAM 이벤트 구독자를 MongoDB\Client
으로 등록합니다.
$commandSub = new MyCommandSubscriber(STDERR); $sdamSub = new MySDAMSubscriber(STDERR); $client->addSubscriber($commandSub); $client->addSubscriber($sdamSub);
애플리케이션 시작하고 삽입 명령을 실행 구독자는 다음과 같은 이벤트 및 출력 메시지를 기록 .
Server opening on ac-rmuag0v-shard-00-00.gh0qg50.mongodb.net:27017 Server opening on ac-rmuag0v-shard-00-01.gh0qg50.mongodb.net:27017 Server opening on ac-rmuag0v-shard-00-02.gh0qg50.mongodb.net:27017 Started command #3 "insert": { "insert" : ... }
구독자 제거
클라이언트 에서 구독자의 등록을 취소하려면 MongoDB\Client::removeSubscriber()
메서드를 사용합니다.
다음 코드는 이 페이지의 명령 이벤트 구독자 예제 섹션에서 생성된 구독자를 제거 방법을 보여줍니다.
$client->removeSubscriber($commandSub);
API 문서
이 가이드 에 설명된 클래스 또는 메서드에 학습 보려면 다음 API 설명서를 참조하세요.
구독자 클래스 및 메서드에 학습 보려면 PHP 매뉴얼의 다음 페이지를 참조하세요.