<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8 from src/site/markdown/index.md at 2018-12-14
 | Rendered using Apache Maven Fluido Skin 1.7
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20181214" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Metron &#x2013; Apache Metron</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />
    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
<script type="text/javascript">
              $( document ).ready( function() { $( '.carousel' ).carousel( { interval: 3500 } ) } );
            </script>
  </head>
  <body class="topBarDisabled">
    <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><a href="http://metron.apache.org/" id="bannerLeft"><img src="images/metron-logo.png"  alt="Apache Metron" width="148px" height="48px"/></a></div>
        <div class="pull-right"></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
      <li class=""><a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
      <li class=""><a href="http://metron.apache.org/" class="externalLink" title="Metron">Metron</a><span class="divider">/</span></li>
      <li class=""><a href="index.html" title="Documentation">Documentation</a><span class="divider">/</span></li>
    <li class="active ">Apache Metron</li>
        <li id="publishDate" class="pull-right"><span class="divider">|</span> Last Published: 2018-12-14</li>
          <li id="projectVersion" class="pull-right">Version: 0.7.0</li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
    <ul class="nav nav-list">
      <li class="nav-header">User Documentation</li>
    <li class="active"><a href="#"><span class="icon-chevron-down"></span>Metron</a>
    <ul class="nav nav-list">
    <li><a href="CONTRIBUTING.html" title="CONTRIBUTING"><span class="none"></span>CONTRIBUTING</a></li>
    <li><a href="Upgrading.html" title="Upgrading"><span class="none"></span>Upgrading</a></li>
    <li><a href="metron-analytics/index.html" title="Analytics"><span class="icon-chevron-right"></span>Analytics</a></li>
    <li><a href="metron-contrib/metron-docker/index.html" title="Docker"><span class="none"></span>Docker</a></li>
    <li><a href="metron-contrib/metron-performance/index.html" title="Performance"><span class="none"></span>Performance</a></li>
    <li><a href="metron-deployment/index.html" title="Deployment"><span class="icon-chevron-right"></span>Deployment</a></li>
    <li><a href="metron-interface/metron-alerts/index.html" title="Alerts"><span class="none"></span>Alerts</a></li>
    <li><a href="metron-interface/metron-config/index.html" title="Config"><span class="none"></span>Config</a></li>
    <li><a href="metron-interface/metron-rest/index.html" title="Rest"><span class="none"></span>Rest</a></li>
    <li><a href="metron-platform/index.html" title="Platform"><span class="icon-chevron-right"></span>Platform</a></li>
    <li><a href="metron-sensors/index.html" title="Sensors"><span class="icon-chevron-right"></span>Sensors</a></li>
    <li><a href="metron-stellar/stellar-3rd-party-example/index.html" title="Stellar-3rd-party-example"><span class="none"></span>Stellar-3rd-party-example</a></li>
    <li><a href="metron-stellar/stellar-common/index.html" title="Stellar-common"><span class="icon-chevron-right"></span>Stellar-common</a></li>
    <li><a href="metron-stellar/stellar-zeppelin/index.html" title="Stellar-zeppelin"><span class="none"></span>Stellar-zeppelin</a></li>
    <li><a href="use-cases/index.html" title="Use-cases"><span class="icon-chevron-right"></span>Use-cases</a></li>
    </ul>
</li>
</ul>
          <hr />
          <div id="poweredBy">
            <div class="clear"></div>
            <div class="clear"></div>
            <div class="clear"></div>
            <div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
            </div>
          </div>
        </div>
        <div id="bodyColumn"  class="span10" >
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<h1>Apache Metron</h1>
<p><a name="Apache_Metron"></a></p>
<p>Metron integrates a variety of open source big data technologies in order to offer a centralized tool for security monitoring and analysis. Metron provides capabilities for log aggregation, full packet capture indexing, storage, advanced behavioral analytics and data enrichment, while applying the most current threat intelligence information to security telemetry within a single platform.</p>
<p>For the latest information, please visit our website at <a class="externalLink" href="http://metron.apache.org/">http://metron.apache.org/</a></p>
<p>Metron can be divided into 4 areas:</p>
<ol style="list-style-type: decimal">

<li>

<p><b>A mechanism to capture, store, and normalize any type of security telemetry at extremely high rates.</b>  Because security telemetry is constantly being generated, it requires a method for ingesting the data at high speeds and pushing it to various processing units for advanced computation and analytics.</p>
</li>
<li>

<p><b>Real time processing and application of enrichments</b> such as threat intelligence, geolocation, and DNS information to telemetry being collected. The immediate application of this information to incoming telemetry provides the context and situational awareness, as well as the who and where information critical for investigation</p>
</li>
<li>

<p><b>Efficient information storage</b> based on how the information will be used:</p>
<ul>

<li>Logs and telemetry are stored such that they can be efficiently mined and analyzed for concise security visibility</li>
<li>The ability to extract and reconstruct full packets helps an analyst answer questions such as who the true attacker was, what data was leaked, and where that data was sent</li>
<li>Long-term storage not only increases visibility over time, but also enables advanced analytics such as machine learning techniques to be used to create models on the information.  Incoming data can then be scored against these stored models for advanced anomaly detection.</li>
</ul>
</li>
<li>

<p><b>An interface that gives a security investigator a centralized view of data and alerts passed through the system.</b>  Metron&#x2019;s interface presents alert summaries with threat intelligence and enrichment data specific to that alert on one single page.  Furthermore, advanced search capabilities and full packet extraction tools are presented to the analyst for investigation without the need to pivot into additional tools.</p>
</li>
</ol>
<p>Big data is a natural fit for powerful security analytics. The Metron framework integrates a number of elements from the Hadoop ecosystem to provide a scalable platform for security analytics, incorporating such functionality as full-packet capture, stream processing, batch processing, real-time search, and telemetry aggregation.  With Metron, our goal is to tie big data into security analytics and drive towards an extensible centralized platform to effectively enable rapid detection and rapid response for advanced security threats.</p>
<p><a name="Obtaining_Metron"></a></p>
<h1>Obtaining Metron</h1>
<p>To obtain a release of Metron, please visit <a class="externalLink" href="http://metron.apache.org/documentation/#releases">http://metron.apache.org/documentation/#releases</a></p>
<p>This repository is a collection of submodules for convenience which is regularly updated to point to the latest versions. Github provides multiple ways to obtain Metron&#x2019;s code:</p>
<ol style="list-style-type: decimal">

<li>git clone &#x2013;recursive <a class="externalLink" href="https://github.com/apache/metron">https://github.com/apache/metron</a></li>
<li><a class="externalLink" href="https://github.com/apache/metron/archive/master.zip">Download ZIP</a></li>
<li>Clone or download each repository individually</li>
</ol>
<p>Option 3 is more likely to have the latest code.</p>
<p><a name="Getting_Started"></a></p>
<h1>Getting Started</h1>
<p>To start exploring the capabilities of Apache Metron <a href="metron-deployment/development/centos6/index.html">follow these instructions to launch Metron in a single-node VM</a> on your own hardware.</p>
<p><a name="Building_Metron"></a></p>
<h1>Building Metron</h1>
<p>Build the full project and run tests:</p>

<div>
<div>
<pre class="source">$ mvn clean install
</pre></div></div>

<p>Build without tests:</p>

<div>
<div>
<pre class="source">$ mvn clean install -DskipTests
</pre></div></div>

<p>Build with the HDP profile:</p>

<div>
<div>
<pre class="source">$ mvn clean install -PHDP-2.5.0.0
</pre></div></div>

<p>You can swap &#x201c;install&#x201d; for &#x201c;package&#x201d; in the commands above if you don&#x2019;t want to deploy the artifacts to your local .m2 repo.</p>
<p><a name="Build_Metron_Reporting"></a></p>
<h1>Build Metron Reporting</h1>
<p>To build and run reporting with code coverage:</p>

<div>
<div>
<pre class="source">$ mvn clean install
$ mvn site site:stage-deploy site:deploy
</pre></div></div>

<p>Code coverage can be skipped by skipping tests:</p>

<div>
<div>
<pre class="source">$ mvn clean install -DskipTests site site:stage-deploy site:deploy
</pre></div></div>

<p>The staged site is deployed to /tmp/metron/site/index.html, and can be viewed by opening the file in a browser.</p>
<div class="section">
<h2><a name="Building_with_Docker"></a>Building with Docker</h2>
<p>A Docker container with all the required software, with the proper versions, is available to be used as well. see <a href="metron-deployment/packaging/docker/ansible-docker/index.html">ansible-docker</a></p>
<p><a name="Navigating_the_Architecture"></a></p>
<h1>Navigating the Architecture</h1>
<p>Metron is at its core a Kappa architecture with Apache Storm as the processing component and Apache Kafka as the unified data bus.</p>
<p>Some high level links to the relevant subparts of the architecture, for more information:</p>
<ul>

<li><a href="metron-platform/metron-parsers/index.html">Parsers</a> : Parsing data from kafka into the Metron data model and passing it downstream to Enrichment.</li>
<li><a href="metron-platform/metron-enrichment/index.html">Enrichment</a> : Enriching data post-parsing and providing the ability to tag a message as an alert and assign a risk triage level via a custom rule language.</li>
<li><a href="metron-platform/metron-indexing/index.html">Indexing</a> : Indexing the data post-enrichment into HDFS, Elasticsearch or Solr.</li>
</ul>
<p>Some useful utilities that cross all of these parts of the architecture:</p>
<ul>

<li><a href="metron-platform/metron-common/index.html">Stellar</a> : A custom data transformation language that is used throughout metron from simple field transformation to expressing triage rules.</li>
<li><a href="metron-analytics/metron-maas-service/index.html">Model as a Service</a> : A Yarn application which can deploy machine learning and statistical models onto the cluster along with the associated Stellar functions to be able to call out to them in a scalable manner.</li>
<li><a href="metron-platform/metron-data-management/index.html">Data management</a> : A set of data management utilities aimed at getting data into HBase in a format which will allow data flowing through metron to be enriched with the results.  Contains integrations with threat intelligence feeds exposed via TAXII as well as simple flat file structures.</li>
<li><a href="metron-analytics/metron-profiler-common/index.html">Profiler</a> : A feature extraction mechanism that can generate a profile describing the behavior of an entity. An entity might be a server, user, subnet or application. Once a profile has been generated defining what normal behavior looks-like, models can be built that identify anomalous behavior.</li>
</ul>
<p><a name="Notes_on_Adding_a_New_Sensor"></a></p>
<h1>Notes on Adding a New Sensor</h1>
<p>In order to allow for meta alerts to be queries alongside regular alerts in Elasticsearch 2.x, it is necessary to add an additional field to the templates and mapping for existing sensors.</p>
<p>Please see a description of the steps necessary to make this change in the metron-elasticsearch <a href="./metron-platform/metron-elasticsearch/index.html#Using_Metron_with_Elasticsearch_2.x">Using Metron with Elasticsearch 2.x</a></p></div>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
Â© 2015-2016 The Apache Software Foundation. Apache Metron, Metron, Apache, the Apache feather logo,
            and the Apache Metron project logo are trademarks of The Apache Software Foundation.
        </div>
      </div>
    </footer>
  </body>
</html>
