<!doctype html>

<!--[if lt IE 7]><html lang="en-US" class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]-->
<!--[if (IE 7)&!(IEMobile)]><html lang="en-US" class="no-js lt-ie9 lt-ie8"><![endif]-->
<!--[if (IE 8)&!(IEMobile)]><html lang="en-US" class="no-js lt-ie9"><![endif]-->
<!--[if gt IE 8]><!-->
<html lang="en-US" class="no-js">
    <!--<![endif]-->

    <head>
        <meta charset="utf-8">

        <meta http-equiv="X-UA-Compatible" content="IE=edge">

        <title>Visualization - Apache Spot</title>

        <meta name="HandheldFriendly" content="True">
        <meta name="MobileOptimized" content="320">
        <meta name="viewport" content="width=device-width, initial-scale=1"/>

        <link rel="apple-touch-icon" href="../../library/images/apple-touch-icon.png">
        <link rel="icon" href="../../favicon.png">
        <!--[if IE]>
        <link rel="shortcut icon" href="http://spot.incubator.apache.org/favicon.ico">
        <![endif]-->
        <meta name="msapplication-TileColor" content="#f01d4f">
        <meta name="msapplication-TileImage" content="../../library/images/win8-tile-icon.png">
        <meta name="theme-color" content="#121212">

        <link rel='dns-prefetch' href='//fonts.googleapis.com' />
        <link rel='dns-prefetch' href='//s.w.org' />

        <link rel='stylesheet' id='googleFonts-css'  href='http://fonts.googleapis.com/css?family=Lato%3A400%2C700%2C400italic%2C700italic' type='text/css' media='all' />
        <link rel='stylesheet' id='bones-stylesheet-css'  href='../../library/css/style.css' type='text/css' media='all' />
        <!--[if lt IE 9]>
        <link rel='stylesheet' id='bones-ie-only-css'  href='http://spot.incubator.apache.org/library/css/ie.css' type='text/css' media='all' />
        <![endif]-->
        <link rel='stylesheet' id='mm-css-css'  href='../../library/css/meanmenu.css' type='text/css' media='all' />
        <script type='text/javascript' src='../../library/js/libs/modernizr.custom.min.js'></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
        <script type='text/javascript' src='../../library/js/jquery-migrate.min.js'></script>
        <script type='text/javascript' src='../../library/js/jquery.meanmenu.js'></script>

		<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-87470508-1', 'auto');
		  ga('send', 'pageview');

		</script>
    </head>

    <body class="page">

        <div id="container">
            <header class="header">

                <div id="inner-header" class="wrap cf">

                    <p id="logo" class="h1" itemscope itemtype="http://schema.org/Organization">
                        <a href="http://spot.incubator.apache.org/" rel="nofollow"><img src="../../library/images/logo.png" alt="Apache Spot" /></a>
                    </p>

                    <nav>
                        <ul id="menu-main-menu" class="nav top-nav cf">
                          <li id="menu-item-129" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-129">
                              <a href="../../get-started">Get Started</a>
                              <ul class="sub-menu">
                                <li><a href="../../get-started">Get Started</a></li>
                                <li><a href="../../get-started/supporting-apache">Supporting Apache</a></li>
                                <li><a href="../../get-started/environment">Environment</a></li>
                                <li><a href="../../get-started/architecture">Architecture</a></li>
                                <li><a href="../../get-started/demo">Demo</a></li>
                              </ul>
                            </li>
                            <li id="menu-item-5" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5">
                                <a href="../../download">Download</a>
                            </li>
                            <li id="menu-item-130" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-130">
                                <a href="../../community">Community</a>
                                <ul class="sub-menu com-sm">
                                	<li class="dropmenu-head">Get in Touch</li>
                                	<li><a href="../../community" class="mail">Mailing Lists</a></li>
                                	<li class="divider"></li>
                                	<li><a href="../../community/committers">Project Committers</a></li>
                                	<li><a href="../../community/contribute">How to Contribute</a></li>
                                	<li class="divider"></li>
                                	<li class="dropmenu-head">Developer Resources</li>
                                	<li><a href="https://github.com/apache/incubator-spot" target="_blank" class="github">Github</a></li>
                                	<li><a href="https://issues.apache.org/jira/browse/SPOT/" target="_blank" class="jira">JIRA Issue Tracker</a></li>
<li><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=SPOT&title=Apache+Spot+%28Incubating%29+Home" target="_blank" class="">Confluence Site</a></li>                                	<li class="divider"></li>
                                	<li class="dropmenu-head">Social Media</li>
                                	<li><a href="https://twitter.com/ApacheSpot" target="_blank" class="twitter-icon">Twitter</a></li>
                                </ul>
                            </li>
                            <li id="menu-item-106" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-106">
                                <a href="../../doc">Documentation</a>
                            </li>
                            <li class="menu-item menu-item-has-children active">
                                <a href="#">Project Components</a>
                                <ul class="sub-menu">
                                	<li><a href="../../project-components/ingestion">Ingestion</a></li>
                                	<li><a href="../../project-components/machine-learning">Machine Learning</a></li>
                                  <li><a href="../../project-components/suspicious-connects-analysis">Suspicous Connects Analysis</a></li>
                                	<li class="active"><a href="../../project-components/visualization">Visualization</a></li>
                                  <li class="under-dev">Under Development</li>
                                  <li><a href="../../project-components/open-data-models">Open Data Models</a></li>
                                </ul>
                            </li>
                            <li id="menu-item-13" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-13">
                                <a href="../../blog">Blog</a>
                            </li>
                        </ul>
                    </nav>

                </div>

            </header>

            <div id="mobile-nav"></div>
            <div id="content">

            	<div class="wrap cf"><!--if page has sidebar, add class "with-sidebar"-->
            		<div class="main">
            			<h1 class="page-title">Visualization</h1>
            			<h3>Take advantage of Apache Spot's tools to perform further analysis over the suspicious activity detected by our machine learning algorithm</h3>

            			<h4>Suspicious</h4>

            			<p>Study <strong>suspicious</strong> network activity by looking at a list of security threats detected by Apache Spot's machine learning algorithm.</p>

            			<p><img src="../../library/images/suspicious.png" alt="" /></p>

            			<p>Have a nice view of your network, understand how devices interact with each other and easily spot threats while exploring a visual representation of suspicious activity.</p>

            			<p><img src="../../library/images/network.png" alt="" /></p>

            			<p>The following feature is powered by IPython notebooks which allows the users to switch back and forth from the 'easy mode' to the 'expert mode', where they can view and edit the code behind this panel via the web browser.</p>

            			<p>In the 'Notebook' panel, the form displayed is where the user can assign the level of risk for each connection and use that as feedback to train the Machine Learning model in future executions. Switching to the 'expert' mode, the user can adjust the criteria to filter the data, discarding results known to be non relevant to the analysis.</p>

            			<p><img src="../../library/images/notebook.png" alt="" /></p>

            			<p>As your investigation moves forward, get <strong>detailed</strong> information about a threat whenever you want to dig into an especific threat.</p>

            			<p><img src="../../library/images/details.png" alt="" /></p>

            			<h4>Threat Investigation</h4>

            			<p>The threat investigation panel represents the last step of analysis before displaying the storyboard. At this point, the security analysts can enter a custom review for a given threat to display.</p>

            			<h4>Storyboard</h4>

            			<p>Ready to present your findings? Go over your high risk security threats and request further information, making it easy for executives to undestand what is going on. Here is a list of some of the information you will get when your analyses comes to the end.</p>

            			<ul>
            				<li>Incident Progression</li>
            				<li>Impact Analysis</li>
            				<li>Geographic location</li>
            				<li>Incident Timeline</li>
            			</ul>

            			<h4>Ingest Summary</h4>

            			<p>Wondering about how much data have been ingested on your cluster? We provide a nice visualization which allows you to get this information.</p>

            			<p><img src="../../library/images/ingest-summary.png" alt="" /></p>

            			<p>The "scoring panel" as well as the "Threat investigation panel" are powered by Jupyter notebooks, <a href="https://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html" target="_blank">(click here to learn more)</a>.</p>
            		</div>

            	</div>

            </div>


            <div id="more-info">
                <div class="wrap cf">

                    <p>
                        <a href="https://github.com/apache/incubator-spot" class="y-btn" target="_blank">More Info</a>
                    </p>

                    <p style="margin-top:50px;"><img src="../../library/images/apache-incubator.png" alt="Apache Incubator" />
                    </p>

                    <p class="disclaimer">
                        Apache Spot is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
                    </p>

                    <p class="disclaimer">
                        The contents of this website are © 2020 Apache Software Foundation under the terms of the Apache License v2. Apache Spot and its logo are trademarks of the Apache Software Foundation.
                    </p>
                </div>
            </div>

            <footer class="footer" role="contentinfo" itemscope itemtype="http://schema.org/WPFooter">

                <div id="inner-footer" class="wrap cf">

                    <p class="source-org copyright" style="text-align:center;">
                        &copy; 2020 Apache Spot.
                    </p>

                </div>

            </footer>

        </div>
		<a href="#0" class="cd-top">Top</a>
        <script type='text/javascript' src='../../library/js/scripts.js'></script>

    </body>

</html>
