.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "MongoDB::Monitoring 3pm" .TH MongoDB::Monitoring 3pm "2020-08-15" "perl v5.30.3" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" MongoDB::Monitoring \- Internal event monitoring API for instrumentation .SH "VERSION" .IX Header "VERSION" version v2.2.2 .SH "DESCRIPTION" .IX Header "DESCRIPTION" The MongoDB::MongoClient takes an optional \f(CW\*(C`monitoring_callback\*(C'\fR attribute, which can be used to monitor events that occur during the operation of the driver. .PP The \s-1API\s0 is very simple: given a code reference, a hashref for each event is passed to the code reference. Here is a simple example that just accumulates events in an array: .PP .Vb 2 \& our @events; \& my $cb = sub { push @events, $_[0] }; \& \& MongoDB\->connect( $uri, { monitoring_callback => $cb } ); .Ve .SH "EVENT TYPES" .IX Header "EVENT TYPES" Every event is a hash reference, with a \f(CW\*(C`type\*(C'\fR field indicating the type, e.g. \f(CW\*(C`command_started\*(C'\fR. Each type is described below. .SS "Command Monitoring" .IX Subsection "Command Monitoring" These events are fired for commands directly to the wire and the response. .PP \fIcommand_started\fR .IX Subsection "command_started" .PP This event is sent just before a command is put one the wire. It will be followed by either a \f(CW\*(C`command_succeeded\*(C'\fR or \f(CW\*(C`command_failed\*(C'\fR event. .PP Fields: .IP "\(bu" 4 type: \*(L"command_started\*(R" .IP "\(bu" 4 databaseName: the name of the database to which the command applies .IP "\(bu" 4 commandName: the name of the command being executed; for legacy operations that don't use commands, the driver will convert them to appear as if they are in command form. .IP "\(bu" 4 command: a hash reference representing the full command to be sent .IP "\(bu" 4 requestId: the request identifier sent to the server .IP "\(bu" 4 connectionId: address and port of the destination server .PP \fIcommand_succeeded\fR .IX Subsection "command_succeeded" .PP This event is sent just after a command reply is received, but only if the database reply document contains a non-false \f(CW\*(C`ok\*(C'\fR field. \s-1NOTE:\s0 write errors will have \f(CW\*(C`ok:1\*(C'\fR even though they have write errors; for writes, success indicates that the write attempt was valid, not that the write succeeded. .PP Fields: .IP "\(bu" 4 type: \*(L"command_succeeded\*(R" .IP "\(bu" 4 commandName: the name of the command being executed .IP "\(bu" 4 durationSecs: the elapsed time in seconds since the \f(CW\*(C`command_started\*(C'\fR event. .IP "\(bu" 4 reply: a hash reference representing the full database reply .IP "\(bu" 4 requestId: the request identifier sent to the server .IP "\(bu" 4 connectionId: address and port of the destination server .PP \fIcommand_failed\fR .IX Subsection "command_failed" .PP This event is sent just after a command reply is received, but only if the database reply document contains a false \f(CW\*(C`ok\*(C'\fR field or if an exception occurred during send or receive operations. .PP Fields: .IP "\(bu" 4 type: \*(L"command_failed\*(R" .IP "\(bu" 4 commandName: the name of the command being executed .IP "\(bu" 4 durationSecs: the elapsed time in seconds since the \f(CW\*(C`command_started\*(C'\fR event. .IP "\(bu" 4 failure: a string with a error message about the failure .IP "\(bu" 4 eval_error: if an exception occurs, this contains the value of \f(CW$@\fR when the exception was caught .IP "\(bu" 4 reply: a hash reference representing the full database reply or an empty hashref if the failure is due to an exception .IP "\(bu" 4 requestId: the request identifier sent to the server .IP "\(bu" 4 connectionId: address and port of the destination server .SS "Server Discovery and Monitoring" .IX Subsection "Server Discovery and Monitoring" These events are fired when servers and topology are amended. .PP \fIserver_opening_event\fR .IX Subsection "server_opening_event" .PP This event is sent when a new server is added to the topology. .PP Fields: .IP "\(bu" 4 type: \*(L"server_opening_event\*(R" .IP "\(bu" 4 topologyId: The topology refaddr .IP "\(bu" 4 address: address of the server .PP \fIserver_closed_event\fR .IX Subsection "server_closed_event" .PP This event is sent when a server is removed from the topology. .PP Fields: .IP "\(bu" 4 type: \*(L"server_closed_event\*(R" .IP "\(bu" 4 topologyId: The topology refaddr .IP "\(bu" 4 address: address of the server .PP \fIserver_description_changed_event\fR .IX Subsection "server_description_changed_event" .PP This event is sent when the server description changes, but does not include changes to the \s-1RTT.\s0 .PP Fields: .IP "\(bu" 4 type: \*(L"server_description_changed_event\*(R" .IP "\(bu" 4 address: address of the server .IP "\(bu" 4 topologyId: The topology refaddr .IP "\(bu" 4 previousDescription: Server Description before the change .IP "\(bu" 4 newDescription: Server Description after the change .PP \fItopology_opening_event\fR .IX Subsection "topology_opening_event" .PP This event is sent when the topology is created. .PP Fields: .IP "\(bu" 4 type: \*(L"topology_opening_event\*(R" .IP "\(bu" 4 topologyId: The topology refaddr .PP \fItopology_closed_event\fR .IX Subsection "topology_closed_event" .PP This event is sent when the topology is closed. .PP Fields: .IP "\(bu" 4 type: \*(L"topology_closed_event\*(R" .IP "\(bu" 4 topologyId: The topology refaddr .PP \fItopology_description_changed_event\fR .IX Subsection "topology_description_changed_event" .PP This event is sent when the topology description changes. .PP Fields: .IP "\(bu" 4 type: \*(L"topology_description_changed_event\*(R" .IP "\(bu" 4 topologyId: The topology refaddr .IP "\(bu" 4 previousDescription: Topology Description before the change .IP "\(bu" 4 newDescription: Topology Description after the change .PP \fIserver_heartbeat_started_event\fR .IX Subsection "server_heartbeat_started_event" .PP This event is sent before the ismaster command is sent to the server. .PP Fields: .IP "\(bu" 4 type: \*(L"server_heartbeat_started_event\*(R" .IP "\(bu" 4 connectionId: address of the link to connect to .PP \fIserver_heartbeat_succeeded_event\fR .IX Subsection "server_heartbeat_succeeded_event" .PP This event is sent after the reply from the ismaster command arrives from a successful reply. .PP Fields: .IP "\(bu" 4 type: \*(L"server_heartbeat_succeeded_event\*(R" .IP "\(bu" 4 duration: time it took to send and receive a reply .IP "\(bu" 4 reply: the ismaster command reply .IP "\(bu" 4 connectionId: address of the server .PP \fIserver_heartbeat_failed_event\fR .IX Subsection "server_heartbeat_failed_event" .PP This event is sent if there is a failure from the ismaster command, which returns an error string of some sort. .PP Fields: .IP "\(bu" 4 type: \*(L"server_heartbeat_failed_event\*(R" .IP "\(bu" 4 duration: time it took to send and receive a reply .IP "\(bu" 4 failure: Returns an error string of the failure .IP "\(bu" 4 connectionId: address of the server .SH "REDACTION" .IX Header "REDACTION" Certain commands are considered sensitive. When any of the following commands are seen in monitoring, the command body and database reply body are replaced with an empty document: .IP "\(bu" 4 authenticate .IP "\(bu" 4 saslStart .IP "\(bu" 4 saslContinue .IP "\(bu" 4 getnonce .IP "\(bu" 4 createUser .IP "\(bu" 4 updateUser .IP "\(bu" 4 copydbgetnonce .IP "\(bu" 4 copydbsaslstart .SH "AUTHORS" .IX Header "AUTHORS" .IP "\(bu" 4 David Golden .IP "\(bu" 4 Rassi .IP "\(bu" 4 Mike Friedman .IP "\(bu" 4 Kristina Chodorow .IP "\(bu" 4 Florian Ragwitz .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is Copyright (c) 2020 by MongoDB, Inc. .PP This is free software, licensed under: .PP .Vb 1 \& The Apache License, Version 2.0, January 2004 .Ve