<!DOCTYPE html>

<html lang="en-US" prefix="og: http://ogp.me/ns#" ng-app="hortonWorksApp"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>
        
        <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
        <link rel="profile" href="http://gmpg.org/xfn/11">
        <title>Apache Metron Big Data Security</title>

        <style type="text/css">
            img.wp-smiley,
            img.emoji {
                display: inline !important;
                border: none !important;
                box-shadow: none !important;
                height: 1em !important;
                width: 1em !important;
                margin: 0 .07em !important;
                vertical-align: -0.1em !important;
                background: none !important;
                padding: 0 !important;
            }
        </style>

    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
                m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-78972211-1', 'auto');
        ga('send', 'pageview');

    </script>

    <link rel="stylesheet" id="default-css" href="/css/default.css" type="text/css" media="all">
    <link rel="stylesheet" id="legacy-css" href="/css/legacy.css" type="text/css" media="all">
    <link rel="stylesheet" id="gravityforms-css" href="/css/gravityforms.css" type="text/css" media="all">
    <link rel="stylesheet" id="selectboxit-css" href="/css/selectBoxIt.css" type="text/css" media="all">
    <link href='http://fonts.googleapis.com/css?family=Roboto%20Condensed' rel='stylesheet' type='text/css'>

    <script type="text/javascript" src="/js/jquery.js"></script>
    <script type="text/javascript" src="/js/jquery-migrate.min.js"></script>
    <script type="text/javascript" src="/js/jquery.mobile.custom.min.js"></script>
    <script type="text/javascript" src="/js/isotope.pkgd.min.js"></script>
    <script type="text/javascript" src="/js/navigation.js"></script>
    <script type="text/javascript" src="/js/slider.js"></script>
    <script type="text/javascript" src="/js/jquery.classyloader.js"></script>
    <script type="text/javascript" src="/js/hero-slider.js"></script>
    <script type="text/javascript" src="/js/footer.js"></script>
    <script type="text/javascript" src="/js/top-form.js"></script>
    <script type="text/javascript" src="/js/local6.js"></script>
    <script type="text/javascript" src="/js/select-list.js"></script>
    <script type="text/javascript" src="/js/legacy.js"></script>
    <script type="text/javascript" src="/js/paralax-scroll.js"></script>
    <script type="text/javascript" src="/js/jquery-ui.min.js"></script>
    <script type="text/javascript" src="/js/jquery.selectBoxIt.min.js"></script>
    <script type="text/javascript" src="/js/scroll-slider.js"></script>
    <script type="text/javascript" src="/js/charts-animate.js"></script>
    <script type="text/javascript" src="/js/dotdotdot.js"></script>
    <script type="text/javascript" src="/js/products_scroll.js"></script>
    <script type="text/javascript" src="/js/parallax.min.js"></script>
    <script type="text/javascript" src="/js/parallax.js"></script>
    <script type="text/javascript" src="/js/shb0wjr.js"></script>

    <script>
    window.lsfDataLayer = window.lsfDataLayer || [];
    </script>
    
    <style>
      body {
        font-family: "roboto-condensed", sans-serif;
      }
    </style>

    <!-- Angular js files -->
    <script src="/js/angular.min.js"></script>
    <script src="/js/angular-animate.min.js"></script>
    <script src="/js/app.js"></script>
    <script src="/js/pressReleaseController.js"></script>
    <script src="/js/eventCtrl.js"></script>
    <!-- End Angular js files -->
    <link rel="stylesheet" type="text/css" href="/css/prettify.css">
    <script type="text/javascript" async="" src="/js/munchkin-beta.js"></script>
    <link type="text/css" href="/css/jquery-ui-insightera-custom-1.8.css" rel="stylesheet">
    <style id="style-1-cropbar-clipper">
    /* Copyright 2014 Evernote Corporation. All rights reserved. */
    
    .en-markup-crop-options {
        top: 18px !important;
        left: 50% !important;
        margin-left: -100px !important;
        width: 200px !important;
        border: 2px rgba(255, 255, 255, .38) solid !important;
        border-radius: 4px !important;
    }
    
    .en-markup-crop-options div div:first-of-type {
        margin-left: 0px !important;
    }
    </style>
</head>


<body class="wrap">
  <header>
    <div class="main-navigation" style="height: 85px;">
        <div class="main-nav fixed">
            <div class="wrapper">
                <div class="logo">
                    <a href=""><img src="/img/logo.png" alt="Logo"></a>
                </div>
                <nav>
                    <div class="toggle">
                        <span></span>
                        <span></span>
                        <span></span>
                    </div>
                    <div class="menu-wrapper" style="height: auto; display: block;">
                        <ul class="main-menu">
    <li class="products-menu"><a href="/">Home</a>
    </li>
    <li class="solutions-menu"><a href="/about/">About</a>
    </li>
    <li class="services-menu"><a href="/documentation/">Documentation</a>
    </li>
    <li class="services-menu"><a href="/community/">Community</a>
    </li>
    <li class="training-menu"><a href="/news/">News</a>
    </li>
    <li>
        <button class="button-default button-green" style="line-height:43px;"> <a>Download </a></button>
    </li>
</ul>

                    </div>
                </nav>
            </div>
        </div>
    </div>
</header>


  <section class="hero-second-level no-padding">
    <div class="bg-img">
        <img src="/img/metron_datacenter.jpg" alt="UNLOCK THE POWER OF YOUR DATA" style="width: 100%; left: 0px;">
    </div>
    <div class="v-middle-wrapper">
        <div class="v-middle-inner">
            <div class="v-middle">
              <h1>real-time big data security </h1>
                <a href="https://github.com/apache/metron" target="_blank"><button type="button" class="button-default">GitHub</button></a>
                <a href="https://cwiki.apache.org/confluence/display/METRON/Community+Resources" target="_blank"><button type="button" class="button-default">Community Home</button></a>
                
                               
            </div>
        </div>
    </div>
</section><section class="cta-bar text-center">
    <p>
        <span>
            <img src="/img/metron_cloud.png" alt="cloud">
        </span>
        <span>Updated Documentation</span>
    </p>
    <a href="/documentation"><button type="button" class="button-default">Docs Home</button></a>
</section><section class="no-padding">
      <div class="fixed-anchor" style="min-height: 99px;">
        <div class="fixed-links" style="top: 63px; transition: top 0.5s ease;">
            <ul>
                <li class=""><a href="#what">What is it?</a></li>
                <li class=""><a href="#personas">Benefits</a></li>
            </ul>
        </div>
    </div>  
</section>

<section class="hero-second-level no-padding" id="what">
    <div class="bg-img">
        <img src="/img/metron_sky.png" alt="What Apache Metron Does" style="width: 100%; left: 0px;">
    </div>
    <div class="v-middle-wrapper">
        <div class="v-middle-inner">
            <div class="v-middle text-center">
              <h1>What Apache Metron Does </h1>
              <br />
                      
            <p>Apache Metron provides a scalable advanced security analytics framework built with the Hadoop Community evolving from the Cisco OpenSOC Project. A cyber security application framework that provides organizations the ability to detect cyber anomalies and enable organizations to rapidly respond to identified anomalies.</p>
                <div class="hover-btn text-center">
                        <a class="button-default" href="https://cwiki.apache.org/confluence/display/METRON/About+Metron" target="_blank"> MORE</a>
                </div>   
            </div>
        </div>

         
    </div>
</section>

<section class="events-section feature" id="personas">
    <div class="wrapper">
        <div class="text-center">
            <a href="https://cwiki.apache.org/confluence/display/METRON/Metron+Benefits"
            class="white-text" target="new"> <h2>BENEFITS </h2>
            </a>
        </div>

        <div class="three-col-row benefits">

            <div class="col-three">
                <div class="v-middle-wrapper">
                    <div class="v-middle-inner">
                        <div class="v-middle">
                            <div class="move-up">
                                <img src="/img/persona-1.png" alt="SOC Analyst"><br /><br />
                                <h5 class="bold blue-text">SOC Analyst</h5>
                                <h6>Don’t spend days looking at alerts created by rules when only a few alerts matter</h6>
                            </div>
                        </div>
                    </div>
                    <div class="hover-btn text-center">
                        <a class="button-default" href="https://cwiki.apache.org/confluence/display/METRON/Metron+User+Personas+And+Benefits#MetronUserPersonasAndBenefits-SOCAnalyst" target="_blank">LEARN MORE</a>
                    </div>
                </div>

            </div>
            <div class="col-three">
                <div class="v-middle-wrapper">
                    <div class="v-middle-inner">
                        <div class="v-middle">
                            <div class="move-up">
                                <img src="/img/persona-2.png" alt="SOC Investigator"><br /><br />
                                <h5 class="bold blue-text">SOC Investigator</h5>
                                <h6>Metron enables massive amounts of data to identify and triage anomalies</h6>
                            </div>
                        </div>
                    </div>
                    <div class="hover-btn text-center">
                        <a class="button-default" href="https://cwiki.apache.org/confluence/display/METRON/Metron+User+Personas+And+Benefits#MetronUserPersonasAndBenefits-SOCInvestigator" target="_blank">LEARN MORE</a>
                    </div>
                </div>
            </div>
            <div class="col-three">
                <div class="v-middle-wrapper">
                    <div class="v-middle-inner">
                        <div class="v-middle">
                            <div class="move-up">
                                <img src="/img/persona-3.png" alt="SOC Manager"><br /><br />
                                <h5 class="bold blue-text">SOC Manager</h5>
                                <h6>Automatically create incidents/cases with integrated workflow systems</h6>
                            </div>
                        </div>
                    </div>
                    <div class="hover-btn text-center">
                        <a class="button-default" href="https://cwiki.apache.org/confluence/display/METRON/Metron+User+Personas+And+Benefits#MetronUserPersonasAndBenefits-SOCManager" target="_blank">LEARN MORE</a>
                    </div>
                </div>
            </div>
        </div>
        <div class="three-col-row top-border benefits">

            <div class="col-three">
                <div class="v-middle-wrapper">
                    <div class="v-middle-inner">
                        <div class="v-middle">
                            <div class="move-up">
                                <img src="/img/persona-4.png" alt="Forensic Investigator"><br /><br />
                                <h5 class="bold blue-text">Forensic Investigator</h5>
                                <h6>“Just in time evidence collection response” transforms data in real-time</h6>
                            </div>
                        </div>
                    </div>
                    <div class="hover-btn text-center">
                        <a class="button-default" href="https://cwiki.apache.org/confluence/display/METRON/Metron+User+Personas+And+Benefits#MetronUserPersonasAndBenefits-ForensicInvestigator" target="_blank">LEARN MORE</a>
                    </div>
                </div>

            </div>
            <div class="col-three">
                <div class="v-middle-wrapper">
                    <div class="v-middle-inner">
                        <div class="v-middle">
                            <div class="move-up">
                                <img src="/img/persona-5.png" alt="Security Platform Engineer"><br /><br />
                                <h5 class="bold blue-text">Security Platform Engineer</h5>
                                <h6>Single platform to manage and operate the ingestion, processing of cyber data</h6>
                            </div>
                        </div>
                    </div>
                    <div class="hover-btn text-center">
                        <a class="button-default" href="https://cwiki.apache.org/confluence/display/METRON/Metron+User+Personas+And+Benefits#MetronUserPersonasAndBenefits-SecurityPlatformOperationsEngineer" target="_blank">LEARN MORE</a>
                    </div>
                </div>
            </div>
            <div class="col-three">
                <div class="v-middle-wrapper">
                    <div class="v-middle-inner">
                        <div class="v-middle">
                            <div class="move-up">
                                <img src="/img/persona-6.png" alt="Security Platform Engineer"><br /><br />
                                <h5 class="bold blue-text">Security Data Scientist</h5>
                                <h6>Perform data science lifecycle activities, train, evaluate and score analytical models</h6>
                            </div>
                        </div>
                    </div>
                    <div class="hover-btn text-center">
                        <a class="button-default" href="https://cwiki.apache.org/confluence/display/METRON/Metron+User+Personas+And+Benefits#MetronUserPersonasAndBenefits-SecurityDataScientist" target="_blank">LEARN MORE</a>
                    </div>
                </div>
            </div>
        </div>
    </div>
</section>

<section class="cta-block">
    <div class="bg-img" align="center">
        <img src="https://www.apache.org/foundation/press/kit/asf_logo.png" alt="Apache Software Foundation" style="width:20%;">
    </div>
        <table border="0" class="table table-striped" style="width: 100%;">
        <tbody>
        <tr>
            <td style="text-align: center">
                <a class="button-default" href="https://www.apache.org" target="_blank">ASF HOME</a>
            </td>
            <td style="text-align: center">
                <a class="button-default" href="https://www.apache.org/licenses" target="_blank">LICENSE</a>
            </td>
            <td style="text-align: center">
                <a class="button-default" href="https://www.apache.org/events/current-event" target="_blank">EVENTS</a>
            </td>
            <td style="text-align: center">
                <a class="button-default" href="https://www.apache.org/foundation/sponsorship.html" target="_blank">SPONSORSHIP</a>
            </td>
            <td style="text-align: center">
                <a class="button-default" href="https://www.apache.org/security" target="_blank">SECURITY</a>
            </td>
            <td style="text-align: center">
                <a class="button-default" href="https://www.apache.org/foundation/thanks.html" target="_blank">THANKS</a>
            </td>
        </tr>
    </table>
</section>


  </section>
<section class="intro-block darken" id="docshome">
    <div class="content-960 hover-btn text-center disclaimer">
        <p>Copyright © 2018, The Apache Software Foundation. Licensed under the <a class="white" href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
        <p>Apache Metron and its logo are trademarks of The Apache Software Foundation.</p>
    </div>
</section>

  <script>
  var anchorForId = function (id) {
    var anchor = document.createElement("a");
    anchor.className = "header-link";
    anchor.href      = "#" + id;
    anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
    anchor.title = "Permalink";
    return anchor;
  };

  var linkifyAnchors = function (level, containingElement) {
    var headers = containingElement.getElementsByTagName("h" + level);
    for (var h = 0; h < headers.length; h++) {
      var header = headers[h];

      if (typeof header.id !== "undefined" && header.id !== "") {
        header.appendChild(anchorForId(header.id));
      }
    }
  };

  document.onreadystatechange = function () {
    if (this.readyState === "complete") {
      var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
      if (!contentBlock) {
        return;
      }
      for (var level = 1; level <= 6; level++) {
        linkifyAnchors(level, contentBlock);
      }
    }
  };
</script>


</body>
</html>
