<!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>Getting Help</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="standalone">
  <div class="grid">

    <div class="unit whole">
      <article>
        <h1>Getting Help</h1>
        <p>Need help with Metron? Try these resources.</p>

<h2 id="mailing-lists">Mailing Lists</h2>

<p>The best option is to send email to the user list
<a href="mailto:user@metron.apache.org">user@metron.apache.org</a>, which is for user
discussions. All of the historic traffic is available in the
<a href="http://mail-archives.apache.org/mod_mbox/metron-user/">archive</a>. To
subscribe to the user list, please send email to
<a href="mailto:user-subscribe@metron.apache.org">user-subscribe@metron.apache.org</a>.</p>

<h2 id="bug-reports">Bug Reports</h2>

<p>Please file any issues you encounter or fixes you’d like on the
<a href="https://issues.apache.org/jira/browse/metron">Apache Metron Jira</a>. We welcome
patches!</p>

<h2 id="stackoverflow">StackOverflow</h2>

<p><a href="http://stackoverflow.com">StackOverflow</a> is a wonderful resource for
any developer. Take a look over there to see if someone has answered
your question.</p>

<h2 id="browse-the-code">Browse the code</h2>

<p>One of the advantages of open source software is that you can browse the code.
The code is available on <a href="https://github.com/apache/metron/tree/master">github</a>.</p>

      </article>
    </div>

    <div class="clear"></div>

  </div>
</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>
