Home | History | Annotate | only in /system/core/metricsd
Up to higher level directory
NameDateSize
.clang-format24-Aug-2016281
aidl/24-Aug-2016
Android.mk24-Aug-20167.6K
c_metrics_library.cc24-Aug-20162.7K
collectors/24-Aug-2016
constants.h24-Aug-20161.6K
etc/24-Aug-2016
include/24-Aug-2016
libmetrics-369476.gyp24-Aug-201697
libmetrics.gypi24-Aug-2016674
libmetrics.pc.in24-Aug-2016151
metrics.gyp24-Aug-20164.6K
metrics_client.cc24-Aug-20165.7K
metrics_collector.cc24-Aug-201627.3K
metrics_collector.h24-Aug-201610.6K
metrics_collector.rc24-Aug-2016148
metrics_collector_main.cc24-Aug-20163.2K
metrics_collector_service_client.cc24-Aug-20161.6K
metrics_collector_service_impl.cc24-Aug-20161.1K
metrics_collector_service_impl.h24-Aug-20161.6K
metrics_collector_test.cc24-Aug-20166.5K
metrics_library.cc24-Aug-20166.8K
metrics_library_test.cc24-Aug-20163.1K
metricsd.rc24-Aug-2016320
metricsd_main.cc24-Aug-20163K
OWNERS24-Aug-201665
persistent_integer.cc24-Aug-20162.7K
persistent_integer.h24-Aug-20162.1K
persistent_integer_mock.h24-Aug-20161.2K
persistent_integer_test.cc24-Aug-20161.8K
README.md24-Aug-20165.1K
timer.cc24-Aug-20163.1K
timer_test.cc24-Aug-201615.5K
uploader/24-Aug-2016
WATCHLISTS24-Aug-2016380

README.md

      1 Metricsd
      2 ========
      3 
      4 The metricsd daemon is used to gather metrics from the platform and application,
      5 aggregate them and upload them periodically to a server.
      6 The metrics will then be available in their aggregated form to the developer
      7 for analysis.
      8 
      9 Three components are provided to interact with `metricsd`: `libmetrics`,
     10 `metrics_collector` and `metrics_client`.
     11 
     12 The Metrics Library: libmetrics
     13 -------------------------------
     14 
     15 `libmetrics` is a small library that implements the basic C++ API for
     16 metrics collection. All metrics collection is funneled through this library. The
     17 easiest and recommended way for a client-side module to collect user metrics is
     18 to link `libmetrics` and use its APIs to send metrics to `metricsd` for transport to
     19 UMA. In order to use the library in a module, you need to do the following:
     20 
     21 - Add a dependency on the shared library in your Android.mk file:
     22   `LOCAL_SHARED_LIBRARIES += libmetrics`
     23 
     24 - To access the metrics library API in the module, include the
     25   <metrics/metrics_library.h> header file.
     26 
     27 - The API is documented in `metrics_library.h`. Before using the API methods, a
     28   MetricsLibrary object needs to be constructed and initialized through its
     29   Init method.
     30 
     31 - Samples are uploaded only if the `/data/misc/metrics/enabled` file exists.
     32 
     33 
     34 Server Side
     35 -----------
     36 
     37 You will be able to see all uploaded metrics on the metrics dashboard,
     38 accessible via the developer console.
     39 
     40 *** note
     41 It usually takes a day for metrics to be available on the dashboard.
     42 ***
     43 
     44 
     45 The Metrics Client: metrics_client
     46 ----------------------------------
     47 
     48 `metrics_client` is a simple shell command-line utility for sending histogram
     49 samples and querying `metricsd`. It's installed under `/system/bin` on the target
     50 platform and uses `libmetrics`.
     51 
     52 For usage information and command-line options, run `metrics_client` on the
     53 target platform or look for "Usage:" in `metrics_client.cc`.
     54 
     55 
     56 The Metrics Daemon: metricsd
     57 ----------------------------
     58 
     59 `metricsd` is the daemon that listens for metrics logging calls (via Binder),
     60 aggregates the metrics and uploads them periodically. This daemon should start as
     61 early as possible so that depending daemons can log at any time.
     62 
     63 `metricsd` is made of two threads that work as follows:
     64 
     65 * The binder thread listens for one-way Binder calls, aggregates the metrics in
     66   memory (via `base::StatisticsRecorder`) and increments the crash counters when a
     67   crash is reported. This thread is kept as simple as possible to ensure the
     68   maximum throughput possible.
     69 * The uploader thread takes care of backing up the metrics to disk periodically
     70   (to avoid losing metrics on crashes), collecting metadata about the client
     71   (version number, channel, etc..) and uploading the metrics periodically to the
     72   server.
     73 
     74 
     75 The Metrics Collector: metrics_collector
     76 ----------------------------------------
     77 
     78 metrics_collector is a daemon that runs in the background on the target platform,
     79 gathers health information about the system and maintains long running counters
     80 (ex: number of crashes per week).
     81 
     82 The recommended way to generate metrics data from a module is to link and use
     83 libmetrics directly. However, we may not want to add a dependency on libmetrics
     84 to some modules (ex: kernel). In this case, we can add a collector to
     85 metrics_collector that will, for example, take measurements and report them
     86 periodically to metricsd (this is the case for the disk utilization histogram).
     87 
     88 
     89 FAQ
     90 ---
     91 
     92 ### What should my histogram's |min| and |max| values be set at?
     93 
     94 You should set the values to a range that covers the vast majority of samples
     95 that would appear in the field. Note that samples below the |min| will still
     96 be collected in the underflow bucket and samples above the |max| will end up
     97 in the overflow bucket. Also, the reported mean of the data will be correct
     98 regardless of the range.
     99 
    100 ### How many buckets should I use in my histogram?
    101 
    102 You should allocate as many buckets as necessary to perform proper analysis
    103 on the collected data. Note, however, that the memory allocated in metricsd
    104 for each histogram is proportional to the number of buckets. Therefore, it is
    105 strongly recommended to keep this number low (e.g., 50 is normal, while 100
    106 is probably high).
    107 
    108 ### When should I use an enumeration (linear) histogram vs. a regular (exponential) histogram?
    109 
    110 Enumeration histograms should really be used only for sampling enumerated
    111 events and, in some cases, percentages. Normally, you should use a regular
    112 histogram with exponential bucket layout that provides higher resolution at
    113 the low end of the range and lower resolution at the high end. Regular
    114 histograms are generally used for collecting performance data (e.g., timing,
    115 memory usage, power) as well as aggregated event counts.
    116 
    117 ### How can I test that my histogram was reported correctly?
    118 
    119 * Make sure no error messages appear in logcat when you log a sample.
    120 * Run `metrics_client -d` to dump the currently aggregated metrics. Your
    121   histogram should appear in the list.
    122 * Make sure that the aggregated metrics were uploaded to the server successfully
    123   (check for an OK message from `metricsd` in logcat).
    124 * After a day, your histogram should be available on the dashboard.
    125