<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8 from src/site/markdown/index.md at 2019-05-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="20190514" />
    <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: 2019-05-14</li>
          <li id="projectVersion" class="pull-right">Version: 0.7.1</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/index.html" title="Interface"><span class="icon-chevron-right"></span>Interface</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-common/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>
