Telemetry reporting
FerretDB collects basic anonymous usage data and sends it to our telemetry service (FerretDB Beacon). It helps us understand FerretDB usage and how to increase compatibility and enhance our product further. It also enables us to provide you with information about available updates.
Your privacy is important to us, and we understand how sensitive data collection can be. We assure you that we are not collecting any personally identifying information. We will never share or sell raw telemetry data to third parties. We may share our findings and statistics based on telemetry data with third parties and the general public.
The following data is collected:
- Random FerretDB instance UUID
- Autonomous system number, cloud provider region and country derived from the IP address (but not the IP address itself)
- FerretDB version
- Backend (PostgreSQL or SQLite) version
- Installation type (Docker, package, cloud provider marketplace, self-built)
- Build configuration (Go version, build flags and tags)
- Uptime
- Command statistics:
- protocol operation codes (e.g.
OP_MSG
,OP_QUERY
); - command names (e.g.,
find
,aggregate
); - arguments (e.g.,
sort
,$count
); - error codes (e.g.,
NotImplemented
,InternalError
; orok
).
- protocol operation codes (e.g.
Argument values, data field names, successful responses, or error messages are never collected.
Version notifications
When a FerretDB update is available,
the telemetry service responds with information about the latest FerretDB version.
This information is logged in server logs and available via the getLog
command with the startupWarnings
argument, making it visible when connecting with various tools such as mongosh
.
While you may not upgrade to the latest release immediately, ensure you update early to take advantage of recent bug fixes, new features, and performance improvements.
Configuration
The telemetry reporter has three state settings: enabled
, disabled
, and undecided
(the default).
The latter acts as if it is enabled
with two differences:
- When
enabled
, the first report is sent right after FerretDB starts. Ifundecided
, the first report is delayed by one hour. That should give you enough time to disable it if you decide to do so. - Similarly, when
enabled
, the last report is sent right before FerretDB shuts down. That does not happen whenundecided
.
undecided
state does not automatically change into enabled
or disabled
.
Explicit user action is required (see below) to change an undecided
state to enabled
or disabled
.
Telemetry reporting is always disabled for embedded FerretDB and can't be configured.
Disable telemetry
We urge you not to disable the telemetry reporter, as its insights will help us enhance our software.
While we are grateful for these usage insights, we understand that not everyone is comfortable with sending them.
If you disable telemetry, automated version checks and information on updates will not be available.
Telemetry can be disabled using any of the following options:
-
Pass the command-line flag
--telemetry
to the FerretDB executable with value:0
,f
,false
,n
,no
,off
,disable
,disabled
,optout
,opt-out
,disallow
,forbid
.--telemetry=disable
-
Set the environment variable
FERRETDB_TELEMETRY
with the same value as above:export FERRETDB_TELEMETRY=disable
-
Set the
DO_NOT_TRACK
environment variable with any of the following values:1
,t
,true
,y
,yes
,on
,enable
,enabled
.export DO_NOT_TRACK=true
-
Rename the FerretDB executable to include a
donottrack
string.cautionIf telemetry is disabled using this option, you cannot use the
--telemetry
flag or environment variables until thedonottrack
string is removed from the executable. -
Use the
db.disableFreeMonitoring()
command on runtime.db.disableFreeMonitoring()
cautionIf the telemetry is set via a command-line flag, an environment variable, or a filename, it's not possible to modify its state via command.
Enable telemetry
Telemetry can be explicitly enabled (see above) with the command-line flag --telemetry
by setting one of the values:
1
, t
, true
, y
, yes
, on
, enable
, enabled
, optin
, opt-in
, allow
.
--telemetry=enable
You can also use FERRETDB_TELEMETRY
environment variable with the same values as above
or on runtime via db.enableFreeMonitoring()
command.
export FERRETDB_TELEMETRY=enable
db.enableFreeMonitoring()
One case when explicitly enabling telemetry is useful is if you want to help us improve compatibility with your application by running its integration tests or manually testing it. If you leave the telemetry state undecided and your test lasts less than an hour, we will not have data about unimplemented commands and errors.
If you want to help us with that, please do the following:
- Start FerretDB with debug logging and telemetry explicitly enabled. Confirm that telemetry is enabled from the logs.
- Test your application manually or with integration tests.
- Gracefully stop FerretDB with
SIGTERM
ordocker stop
(not withSIGKILL
ordocker kill
). - Optionally, locate instance UUID in the
state.json
file in the state directory (/state
for Docker, current directory otherwise) and send it to us. That would allow us to locate your data and understand what FerretDB functionality should be implemented or fixed to improve compatibility with your application.