43bee50572
Metrics uploader can be activated with the metrics_uploader use flag, update README to reflect that. Also fix the section about activating metrics. BUG=None TEST=None Change-Id: I2c6d0abe6536eb419c5b49f149b6d3f097670325 Reviewed-on: https://chromium-review.googlesource.com/216631 Reviewed-by: Mike Frysinger <vapier@chromium.org> Tested-by: Bertrand Simonnet <bsimonnet@chromium.org> Commit-Queue: Bertrand Simonnet <bsimonnet@chromium.org>
138 lines
6.7 KiB
Text
138 lines
6.7 KiB
Text
Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
|
Use of this source code is governed by a BSD-style license that can be
|
|
found in the LICENSE file.
|
|
|
|
The Chrome OS "metrics" package contains utilities for client-side user metric
|
|
collection.
|
|
When Chrome is installed, Chrome will take care of aggregating and uploading the
|
|
metrics to the UMA server.
|
|
When Chrome is not installed (embedded build) and the metrics_uploader USE flag
|
|
is set, metrics_daemon will aggregate and upload the metrics itself.
|
|
|
|
|
|
================================================================================
|
|
The Metrics Library: libmetrics
|
|
================================================================================
|
|
|
|
libmetrics is a small library that implements the basic C and C++ API for
|
|
metrics collection. All metrics collection is funneled through this library. The
|
|
easiest and recommended way for a client-side module to collect user metrics is
|
|
to link libmetrics and use its APIs to send metrics to Chrome for transport to
|
|
UMA. In order to use the library in a module, you need to do the following:
|
|
|
|
- Add a dependence (DEPEND and RDEPEND) on chromeos-base/metrics to the module's
|
|
ebuild.
|
|
|
|
- Link the module with libmetrics (for example, by passing -lmetrics to the
|
|
module's link command). Both libmetrics.so and libmetrics.a are built and
|
|
installed under $SYSROOT/usr/lib/. Note that by default -lmetrics will link
|
|
against libmetrics.so, which is preferred.
|
|
|
|
- To access the metrics library API in the module, include the
|
|
<metrics/metrics_library.h> header file. The file is installed in
|
|
$SYSROOT/usr/include/ when the metrics library is built and installed.
|
|
|
|
- The API is documented in metrics_library.h under src/platform/metrics/. Before
|
|
using the API methods, a MetricsLibrary object needs to be constructed and
|
|
initialized through its Init method.
|
|
|
|
For more information on the C API see c_metrics_library.h.
|
|
|
|
- Samples are sent to Chrome only if the "/home/chronos/Consent To Send Stats"
|
|
file exists or the metrics are declared enabled in the policy file (see the
|
|
AreMetricsEnabled API method).
|
|
|
|
- On the target platform, shortly after the sample is sent, it should be visible
|
|
in Chrome through "about:histograms".
|
|
|
|
|
|
================================================================================
|
|
Histogram Naming Convention
|
|
================================================================================
|
|
|
|
Use TrackerArea.MetricName. For example:
|
|
|
|
Logging.CrashCounter
|
|
Network.TimeToDrop
|
|
|
|
|
|
================================================================================
|
|
Server Side
|
|
================================================================================
|
|
|
|
If the histogram data is visible in about:histograms, it will be sent by an
|
|
official Chrome build to UMA, assuming the user has opted into metrics
|
|
collection. To make the histogram visible on "chromedashboard", the histogram
|
|
description XML file needs to be updated (steps 2 and 3 after following the
|
|
"Details on how to add your own histograms" link under the Histograms tab).
|
|
Include the string "Chrome OS" in the histogram description so that it's easier
|
|
to distinguish Chrome OS specific metrics from general Chrome histograms.
|
|
|
|
The UMA server logs and keeps the collected field data even if the metric's name
|
|
is not added to the histogram XML. However, the dashboard histogram for that
|
|
metric will show field data as of the histogram XML update date; it will not
|
|
include data for older dates. If past data needs to be displayed, manual
|
|
server-side intervention is required. In other words, one should assume that
|
|
field data collection starts only after the histogram XML has been updated.
|
|
|
|
|
|
================================================================================
|
|
The Metrics Client: metrics_client
|
|
================================================================================
|
|
|
|
metrics_client is a simple shell command-line utility for sending histogram
|
|
samples and user actions. It's installed under /usr/bin on the target platform
|
|
and uses libmetrics to send the data to Chrome. The utility is useful for
|
|
generating metrics from shell scripts.
|
|
|
|
For usage information and command-line options, run "metrics_client" on the
|
|
target platform or look for "Usage:" in metrics_client.cc.
|
|
|
|
|
|
================================================================================
|
|
The Metrics Daemon: metrics_daemon
|
|
================================================================================
|
|
|
|
metrics_daemon is a daemon that runs in the background on the target platform
|
|
and is intended for passive or ongoing metrics collection, or metrics collection
|
|
requiring feedback from multiple modules. For example, it listens to D-Bus
|
|
signals related to the user session and screen saver states to determine if the
|
|
user is actively using the device or not and generates the corresponding
|
|
data. The metrics daemon uses libmetrics to send the data to Chrome.
|
|
|
|
The recommended way to generate metrics data from a module is to link and use
|
|
libmetrics directly. However, the module could instead send signals to or
|
|
communicate in some alternative way with the metrics daemon. Then the metrics
|
|
daemon needs to monitor for the relevant events and take appropriate action --
|
|
for example, aggregate data and send the histogram samples.
|
|
|
|
|
|
================================================================================
|
|
FAQ
|
|
================================================================================
|
|
|
|
Q. What should my histogram's |min| and |max| values be set at?
|
|
|
|
A. You should set the values to a range that covers the vast majority of samples
|
|
that would appear in the field. Note that samples below the |min| will still
|
|
be collected in the underflow bucket and samples above the |max| will end up
|
|
in the overflow bucket. Also, the reported mean of the data will be correct
|
|
regardless of the range.
|
|
|
|
Q. How many buckets should I use in my histogram?
|
|
|
|
A. You should allocate as many buckets as necessary to perform proper analysis
|
|
on the collected data. Note, however, that the memory allocated in Chrome for
|
|
each histogram is proportional to the number of buckets. Therefore, it is
|
|
strongly recommended to keep this number low (e.g., 50 is normal, while 100
|
|
is probably high).
|
|
|
|
Q. When should I use an enumeration (linear) histogram vs. a regular
|
|
(exponential) histogram?
|
|
|
|
A. Enumeration histograms should really be used only for sampling enumerated
|
|
events and, in some cases, percentages. Normally, you should use a regular
|
|
histogram with exponential bucket layout that provides higher resolution at
|
|
the low end of the range and lower resolution at the high end. Regular
|
|
histograms are generally used for collecting performance data (e.g., timing,
|
|
memory usage, power) as well as aggregated event counts.
|