blob: 77834472df01cf59753acb77a62563b7252fa732 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<title>Storm Metricstore</title>
<!-- Bootstrap core CSS -->
<link href="/assets/css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap theme -->
<link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link rel="stylesheet" href="http://fortawesome.github.io/Font-Awesome/assets/font-awesome/css/font-awesome.css">
<link href="/css/style.css" rel="stylesheet">
<link href="/assets/css/owl.theme.css" rel="stylesheet">
<link href="/assets/css/owl.carousel.css" rel="stylesheet">
<script type="text/javascript" src="/assets/js/jquery.min.js"></script>
<script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/assets/js/owl.carousel.min.js"></script>
<script type="text/javascript" src="/assets/js/storm.js"></script>
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container-fluid">
<div class="row">
<div class="col-md-5">
<a href="/index.html"><img src="/images/logo.png" class="logo" /></a>
</div>
<div class="col-md-5">
<h1>Version: 2.0.0</h1>
</div>
<div class="col-md-2">
<a href="/downloads.html" class="btn-std btn-block btn-download">Download</a>
</div>
</div>
</div>
</header>
<!--Header End-->
<!--Navigation Begin-->
<div class="navbar" role="banner">
<div class="container-fluid">
<div class="navbar-header">
<button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
<ul class="nav navbar-nav">
<li><a href="/index.html" id="home">Home</a></li>
<li><a href="/getting-help.html" id="getting-help">Getting Help</a></li>
<li><a href="/about/integrates.html" id="project-info">Project Information</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" id="documentation">Documentation <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/releases/2.3.0/index.html">2.3.0</a></li>
<li><a href="/releases/2.2.0/index.html">2.2.0</a></li>
<li><a href="/releases/2.1.0/index.html">2.1.0</a></li>
<li><a href="/releases/2.0.0/index.html">2.0.0</a></li>
<li><a href="/releases/1.2.3/index.html">1.2.3</a></li>
</ul>
</li>
<li><a href="/talksAndVideos.html">Talks and Slideshows</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" id="contribute">Community <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/contribute/Contributing-to-Storm.html">Contributing</a></li>
<li><a href="/contribute/People.html">People</a></li>
<li><a href="/contribute/BYLAWS.html">ByLaws</a></li>
</ul>
</li>
<li><a href="/2021/09/27/storm230-released.html" id="news">News</a></li>
</ul>
</nav>
</div>
</div>
<div class="container-fluid">
<h1 class="page-title">Storm Metricstore</h1>
<div class="row">
<div class="col-md-12">
<!-- Documentation -->
<p class="post-meta"></p>
<div class="documentation-content"><p>A metric store (<a href="http://github.com/apache/storm/blob/v2.0.0/storm-server/src/main/java/org/apache/storm/metricstore/MetricStore.java"><code>MetricStore</code></a>) interface was added
to Nimbus to allow storing metric information (<a href="http://github.com/apache/storm/blob/v2.0.0/storm-server/src/main/java/org/apache/storm/metricstore/Metric.java"><code>Metric</code></a>)
to a database. The default implementation
(<a href="http://github.com/apache/storm/blob/v2.0.0/storm-server/src/main/java/org/apache/storm/metricstore/rocksdb/RocksDbStore.java"><code>RocksDbStore</code></a>) is using RocksDB,
a key-value store.</p>
<p>As metrics are stored in RocksDB, their string values (for topology ID and executor ID, etc.) are converted to unique integer IDs, and these strings
are also stored to the database as metadata indexed by the integer ID. When a metric is stored, it is also aggregated with any existing metric
within the same 1, 10, and 60 minute timeframe. </p>
<p>The <a href="http://github.com/apache/storm/blob/v2.0.0/storm-server/src/main/java/org/apache/storm/metricstore/FilterOptions.java"><code>FilterOptions</code></a> class provides an interface
to select which options can be used to scan the metrics.</p>
<h3 id="configuration">Configuration</h3>
<p>The following configuation options exist:</p>
<div class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="s">storm.metricstore.class</span><span class="pi">:</span> <span class="s2">"</span><span class="s">org.apache.storm.metricstore.rocksdb.RocksDbStore"</span>
<span class="s">storm.metricprocessor.class</span><span class="pi">:</span> <span class="s2">"</span><span class="s">org.apache.storm.metricstore.NimbusMetricProcessor"</span>
<span class="s">storm.metricstore.rocksdb.location</span><span class="pi">:</span> <span class="s2">"</span><span class="s">storm_rocks"</span>
<span class="s">storm.metricstore.rocksdb.create_if_missing</span><span class="pi">:</span> <span class="no">true</span>
<span class="s">storm.metricstore.rocksdb.metadata_string_cache_capacity</span><span class="pi">:</span> <span class="s">4000</span>
<span class="s">storm.metricstore.rocksdb.retention_hours</span><span class="pi">:</span> <span class="s">240</span>
</code></pre></div>
<ul>
<li>storm.metricstore.class is the class that implements the
(<a href="http://github.com/apache/storm/blob/v2.0.0/storm-server/src/main/java/org/apache/storm/metricstore/MetricStore.java"><code>MetricStore</code></a>).</li>
<li>storm.metricprocessor.class is the class that implements the
(<a href="http://github.com/apache/storm/blob/v2.0.0/storm-server/src/main/java/org/apache/storm/metricstore/WorkerMetricsProcessor.java"><code>WorkerMetricsProcessor</code></a>).</li>
<li>storm.metricstore.rocksdb.location provides to location of the RocksDB database on Nimbus</li>
<li>storm.metricstore.rocksdb.create_if_missing permits creating a RocksDB database if missing</li>
<li>storm.metricstore.rocksdb.metadata_string_cache_capacity controls the number of metadata strings cached in memory.</li>
<li>storm.metricstore.rocksdb.retention_hours sets the length of time metrics will remain active.</li>
</ul>
<h3 id="rocksdb-schema">RocksDB Schema</h3>
<p>The RocksDB Key (represented by <a href="http://github.com/apache/storm/blob/v2.0.0/storm-server/src/main/java/org/apache/storm/metricstore/rocksdb/RocksDbKey.java"><code>RocksDbKey</code></a>)
fields are as follows:</p>
<table><thead>
<tr>
<th>Field</th>
<th>Size</th>
<th>Offset</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>Type</td>
<td>1</td>
<td>0</td>
<td>The type maps to the KeyType enum, specifying a metric or various types of metadata strings</td>
</tr>
<tr>
<td>Aggregation Level</td>
<td>1</td>
<td>1</td>
<td>The aggregation level for a metric (see AggLevel enum). Set to 0 for metadata.</td>
</tr>
<tr>
<td>Topology Id</td>
<td>4</td>
<td>2</td>
<td>The metadata string Id representing a topologyId for a metric, or the unique string Id for a metadata string</td>
</tr>
<tr>
<td>Timestamp</td>
<td>8</td>
<td>6</td>
<td>The timestamp for a metric, unused for metadata</td>
</tr>
<tr>
<td>Metric Id</td>
<td>4</td>
<td>14</td>
<td>The metadata string Id for the metric name</td>
</tr>
<tr>
<td>Component Id</td>
<td>4</td>
<td>18</td>
<td>The metadata string Id for the component Id</td>
</tr>
<tr>
<td>Executor Id</td>
<td>4</td>
<td>22</td>
<td>The metadata string Id for the executor Id</td>
</tr>
<tr>
<td>Host Id</td>
<td>4</td>
<td>26</td>
<td>The metadata string Id for the host Id</td>
</tr>
<tr>
<td>Port</td>
<td>4</td>
<td>30</td>
<td>The port number</td>
</tr>
<tr>
<td>Stream Id</td>
<td>4</td>
<td>34</td>
<td>The metadata string Id for the stream Id</td>
</tr>
</tbody></table>
<p>The RocksDB Value fields for metadata strings (represented by
<a href="http://github.com/apache/storm/blob/v2.0.0/storm-server/src/main/java/org/apache/storm/metricstore/rocksdb/RocksDbValue.java"><code>RocksDbValue</code></a>) are as follows:</p>
<table><thead>
<tr>
<th>Field</th>
<th>Size</th>
<th>Offset</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>Version</td>
<td>1</td>
<td>0</td>
<td>The current metadata version - allows migrating if the format changes in the future</td>
</tr>
<tr>
<td>Timestamp</td>
<td>8</td>
<td>1</td>
<td>The time when the metadata was last used by a metric. Allows deleting of old metadata.</td>
</tr>
<tr>
<td>Metadata String</td>
<td>any</td>
<td>9</td>
<td>The metadata string</td>
</tr>
</tbody></table>
<p>RocksDB Value fields for metric data are as follows:</p>
<table><thead>
<tr>
<th>Field</th>
<th>Size</th>
<th>Offset</th>
<th>Description</th>
</tr>
</thead><tbody>
<tr>
<td>Version</td>
<td>1</td>
<td>0</td>
<td>The current metric version - allows migrating if the format changes in the future</td>
</tr>
<tr>
<td>Value</td>
<td>8</td>
<td>1</td>
<td>The metric value</td>
</tr>
<tr>
<td>Count</td>
<td>8</td>
<td>9</td>
<td>The metric count</td>
</tr>
<tr>
<td>Min</td>
<td>8</td>
<td>17</td>
<td>The minimum metric value</td>
</tr>
<tr>
<td>Max</td>
<td>8</td>
<td>25</td>
<td>The maximum metric value</td>
</tr>
<tr>
<td>Sum</td>
<td>8</td>
<td>33</td>
<td>The sum of the metric values</td>
</tr>
</tbody></table>
</div>
</div>
</div>
</div>
<footer>
<div class="container-fluid">
<div class="row">
<div class="col-md-3">
<div class="footer-widget">
<h5>Meetups</h5>
<ul class="latest-news">
<li><a href="http://www.meetup.com/Apache-Storm-Apache-Kafka/">Apache Storm & Apache Kafka</a> <span class="small">(Sunnyvale, CA)</span></li>
<li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Apache Storm & Kafka Users</a> <span class="small">(Seattle, WA)</span></li>
<li><a href="http://www.meetup.com/New-York-City-Storm-User-Group/">NYC Storm User Group</a> <span class="small">(New York, NY)</span></li>
<li><a href="http://www.meetup.com/Bay-Area-Stream-Processing">Bay Area Stream Processing</a> <span class="small">(Emeryville, CA)</span></li>
<li><a href="http://www.meetup.com/Boston-Storm-Users/">Boston Realtime Data</a> <span class="small">(Boston, MA)</span></li>
<li><a href="http://www.meetup.com/storm-london">London Storm User Group</a> <span class="small">(London, UK)</span></li>
<!-- <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Seatle, WA</a> <span class="small">(27 Jun 2015)</span></li> -->
</ul>
</div>
</div>
<div class="col-md-3">
<div class="footer-widget">
<h5>About Apache Storm</h5>
<p>Apache Storm integrates with any queueing system and any database system. Apache Storm's spout abstraction makes it easy to integrate a new queuing system. Likewise, integrating Apache Storm with database systems is easy.</p>
</div>
</div>
<div class="col-md-3">
<div class="footer-widget">
<h5>First Look</h5>
<ul class="footer-list">
<li><a href="/releases/current/Rationale.html">Rationale</a></li>
<li><a href="/releases/current/Tutorial.html">Tutorial</a></li>
<li><a href="/releases/current/Setting-up-development-environment.html">Setting up development environment</a></li>
<li><a href="/releases/current/Creating-a-new-Storm-project.html">Creating a new Apache Storm project</a></li>
</ul>
</div>
</div>
<div class="col-md-3">
<div class="footer-widget">
<h5>Documentation</h5>
<ul class="footer-list">
<li><a href="/releases/current/index.html">Index</a></li>
<li><a href="/releases/current/javadocs/index.html">Javadoc</a></li>
<li><a href="/releases/current/FAQ.html">FAQ</a></li>
</ul>
</div>
</div>
</div>
<hr/>
<div class="row">
<div class="col-md-12">
<p align="center">Copyright © 2019 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved.
<br>Apache Storm, Apache, the Apache feather logo, and the Apache Storm project logos are trademarks of The Apache Software Foundation.
<br>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
</div>
</div>
</div>
</footer>
<!--Footer End-->
<!-- Scroll to top -->
<span class="totop"><a href="#"><i class="fa fa-angle-up"></i></a></span>
</body>
</html>