<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8 from src/site/markdown/metron-platform/metron-parsing/metron-parsers-common/3rdPartyParser.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; Custom Metron Parsers</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 ">Custom Metron Parsers</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><a href="../../../index.html" title="Metron"><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-down"></span>Platform</a>
    <ul class="nav nav-list">
    <li><a href="../../../metron-platform/Performance-tuning-guide.html" title="Performance-tuning-guide"><span class="none"></span>Performance-tuning-guide</a></li>
    <li><a href="../../../metron-platform/metron-common/index.html" title="Common"><span class="none"></span>Common</a></li>
    <li><a href="../../../metron-platform/metron-data-management/index.html" title="Data-management"><span class="none"></span>Data-management</a></li>
    <li><a href="../../../metron-platform/metron-elasticsearch/index.html" title="Elasticsearch"><span class="none"></span>Elasticsearch</a></li>
    <li><a href="../../../metron-platform/metron-enrichment/index.html" title="Enrichment"><span class="icon-chevron-right"></span>Enrichment</a></li>
    <li><a href="../../../metron-platform/metron-hbase-server/index.html" title="Hbase-server"><span class="none"></span>Hbase-server</a></li>
    <li><a href="../../../metron-platform/metron-indexing/index.html" title="Indexing"><span class="none"></span>Indexing</a></li>
    <li><a href="../../../metron-platform/metron-job/index.html" title="Job"><span class="none"></span>Job</a></li>
    <li><a href="../../../metron-platform/metron-management/index.html" title="Management"><span class="none"></span>Management</a></li>
    <li><a href="../../../metron-platform/metron-parsing/index.html" title="Parsing"><span class="icon-chevron-down"></span>Parsing</a>
    <ul class="nav nav-list">
    <li><a href="../../../metron-platform/metron-parsing/metron-parsers/index.html" title="Parsers"><span class="icon-chevron-right"></span>Parsers</a></li>
    <li><a href="../../../metron-platform/metron-parsing/metron-parsers-common/index.html" title="Parsers-common"><span class="icon-chevron-down"></span>Parsers-common</a>
    <ul class="nav nav-list">
    <li class="active"><a href="#"><span class="none"></span>3rdPartyParser</a></li>
    <li><a href="../../../metron-platform/metron-parsing/metron-parsers-common/ParserChaining.html" title="ParserChaining"><span class="none"></span>ParserChaining</a></li>
    <li><a href="../../../metron-platform/metron-parsing/metron-parsers-common/message-parser-implementation-notes.html" title="message-parser-implementation-notes"><span class="none"></span>message-parser-implementation-notes</a></li>
    <li><a href="../../../metron-platform/metron-parsing/metron-parsers-common/parser-testing.html" title="parser-testing"><span class="none"></span>parser-testing</a></li>
    <li><a href="../../../metron-platform/metron-parsing/metron-parsers-common/src/test/java/org/apache/metron/parsers/paloalto/index.html" title="Paloalto"><span class="none"></span>Paloalto</a></li>
    </ul>
</li>
    <li><a href="../../../metron-platform/metron-parsing/metron-parsing-storm/index.html" title="Parsing-storm"><span class="none"></span>Parsing-storm</a></li>
    </ul>
</li>
    <li><a href="../../../metron-platform/metron-pcap-backend/index.html" title="Pcap-backend"><span class="none"></span>Pcap-backend</a></li>
    <li><a href="../../../metron-platform/metron-solr/index.html" title="Solr"><span class="none"></span>Solr</a></li>
    <li><a href="../../../metron-platform/metron-writer/index.html" title="Writer"><span class="none"></span>Writer</a></li>
    </ul>
</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>Custom Metron Parsers</h1>
<p><a name="Custom_Metron_Parsers"></a></p>
<p>We have many stock parsers for normal operations.  Some of these are networking and cybersecurity focused (e.g. the ASA Parser), some of these are general purpose (e.g. the CSVParser), but inevitably users will want to extend the system to process their own data formats.  To enable this, this is a walkthrough of how to create and use a custom parser within Metron.</p>
<p><a name="Writing_A_Custom_Parser"></a></p>
<h1>Writing A Custom Parser</h1>
<p>Before we can use a parser, we will need to create a custom parser.  The parser is the workhorse of Metron ingest.  It provides the mapping between the raw data coming in via the Kafka value and a <tt>JSONObject</tt>, the internal data structure provided.</p>
<div class="section">
<h2><a name="Implementation"></a>Implementation</h2>
<p>In order to do create a custom parser, we need to do one of the following:</p>
<ul>

<li>Write a class which conforms to the <tt>org.apache.metron.parsers.interfaces.MessageParser&lt;JSONObject&gt;</tt> and <tt>java.util.Serializable</tt> interfaces
<ul>

<li>Implement <tt>init()</tt>, <tt>validate(JSONObject message)</tt>, and <tt>List&lt;JSONObject&gt; parse(byte[] rawMessage)</tt></li>
</ul>
</li>
<li>Write a class which extends <tt>org.apache.metron.parsers.BasicParser</tt>
<ul>

<li>Provides convenience implementations to <tt>validate</tt> which ensures <tt>timestamp</tt> and <tt>original_string</tt> fields exist.</li>
</ul>
</li>
</ul></div>
<div class="section">
<h2><a name="Example"></a>Example</h2>
<p>In order to illustrate how this might be done, let&#x2019;s create a very simple parser that takes a comma separated pair and creates a couple of fields:</p>
<ul>

<li><tt>original_string</tt> &#x2013; the raw data</li>
<li><tt>timestamp</tt> &#x2013; the current time</li>
<li><tt>first</tt> &#x2013; the first field of the comma separated pair</li>
<li><tt>last</tt> &#x2013; the last field of the comma separated pair</li>
</ul>
<p>For this demonstration, let&#x2019;s create a maven project to compile our project.  We&#x2019;ll call it <tt>extra_parsers</tt>, so in your workspace, let&#x2019;s set up the maven project:</p>
<ul>

<li>

<p>Create the maven infrastructure for <tt>extra_parsers</tt> via</p>

<div>
<div>
<pre class="source">mkdir -p extra_parsers/src/{main,test}/java
</pre></div></div>
</li>
<li>

<p>Create a pom file indicating how we should build our parsers by editing <tt>extra_parsers/pom.xml</tt> with the following content:</p>

<div>
<div>
<pre class="source">&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;groupId&gt;com.3rdparty&lt;/groupId&gt;
  &lt;artifactId&gt;extra-parsers&lt;/artifactId&gt;
  &lt;packaging&gt;jar&lt;/packaging&gt;
  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
  &lt;name&gt;extra-parsers&lt;/name&gt;
  &lt;url&gt;http://thirdpartysoftware.org&lt;/url&gt;
  &lt;properties&gt;
    &lt;!-- The java version to conform to.  Metron works all the way to 1.8 --&gt;
    &lt;java_version&gt;1.8&lt;/java_version&gt;
    &lt;!-- The version of Metron that we'll be targetting. --&gt;
    &lt;metron_version&gt;0.4.1&lt;/metron_version&gt;
    &lt;!-- To complete the simulation, we'll depend on a common dependency --&gt;
    &lt;guava_version&gt;19.0&lt;/guava_version&gt;
    &lt;!-- We will shade our dependencies to create a single jar at the end --&gt;
    &lt;shade_version&gt;2.4.3&lt;/shade_version&gt;
  &lt;/properties&gt;
  &lt;dependencies&gt;
    &lt;!--
    We want to depend on Metron, but ensure that the scope is &quot;provided&quot;
    as we do not want to include it in our bundle.
    --&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;org.apache.metron&lt;/groupId&gt;
      &lt;artifactId&gt;metron-parsers-common&lt;/artifactId&gt;
      &lt;version&gt;${metron_version}&lt;/version&gt;
      &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;com.google.guava&lt;/groupId&gt;
      &lt;artifactId&gt;guava&lt;/artifactId&gt;
      &lt;version&gt;${guava_version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;junit&lt;/groupId&gt;
      &lt;artifactId&gt;junit&lt;/artifactId&gt;
      &lt;version&gt;3.8.1&lt;/version&gt;
      &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
  &lt;build&gt;
    &lt;plugins&gt;
     &lt;!-- We will set up the shade plugin to create a single jar at the
           end of the build lifecycle.  We will exclude some things and
           relocate others to simulate a real situation.

           One thing to note is that it's a good practice to shade and
           relocate common libraries that may be dependencies in Metron.
           Your jar will be merged with the parsers jar, so the metron
           version will be included for all overlapping classes.
           So, shade and relocate to ensure that YOUR version of the library is used.
      --&gt;

      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-shade-plugin&lt;/artifactId&gt;
        &lt;version&gt;${shade_version}&lt;/version&gt;
        &lt;configuration&gt;
          &lt;createDependencyReducedPom&gt;true&lt;/createDependencyReducedPom&gt;
          &lt;artifactSet&gt;
            &lt;excludes&gt;
              &lt;!-- Exclude slf4j for no reason other than to illustrate how to exclude dependencies.
                   The metron team has nothing against slf4j. :-)
               --&gt;
              &lt;exclude&gt;*slf4j*&lt;/exclude&gt;
            &lt;/excludes&gt;
          &lt;/artifactSet&gt;
        &lt;/configuration&gt;
        &lt;executions&gt;
          &lt;execution&gt;
            &lt;phase&gt;package&lt;/phase&gt;
            &lt;goals&gt;
              &lt;goal&gt;shade&lt;/goal&gt;
            &lt;/goals&gt;
            &lt;configuration&gt;
              &lt;shadedArtifactAttached&gt;true&lt;/shadedArtifactAttached&gt;
              &lt;shadedClassifierName&gt;uber&lt;/shadedClassifierName&gt;
              &lt;filters&gt;
                &lt;filter&gt;
                  &lt;!-- Sometimes these get added and confuse the uber jar out of shade --&gt;
                  &lt;artifact&gt;*:*&lt;/artifact&gt;
                  &lt;excludes&gt;
                    &lt;exclude&gt;META-INF/*.SF&lt;/exclude&gt;
                    &lt;exclude&gt;META-INF/*.DSA&lt;/exclude&gt;
                    &lt;exclude&gt;META-INF/*.RSA&lt;/exclude&gt;
                  &lt;/excludes&gt;
                &lt;/filter&gt;
              &lt;/filters&gt;
              &lt;relocations&gt;
                &lt;!-- Relocate guava as it's used in Metron and I really want 0.19 --&gt;
                &lt;relocation&gt;
                  &lt;pattern&gt;com.google&lt;/pattern&gt;
                  &lt;shadedPattern&gt;com.thirdparty.guava&lt;/shadedPattern&gt;
                &lt;/relocation&gt;
              &lt;/relocations&gt;
              &lt;artifactSet&gt;
                &lt;excludes&gt;
                  &lt;!-- We can also exclude by artifactId and groupId --&gt;
                  &lt;exclude&gt;storm:storm-core:*&lt;/exclude&gt;
                  &lt;exclude&gt;storm:storm-lib:*&lt;/exclude&gt;
                  &lt;exclude&gt;org.slf4j.impl*&lt;/exclude&gt;
                  &lt;exclude&gt;org.slf4j:slf4j-log4j*&lt;/exclude&gt;
                &lt;/excludes&gt;
              &lt;/artifactSet&gt;
            &lt;/configuration&gt;
          &lt;/execution&gt;
        &lt;/executions&gt;
      &lt;/plugin&gt;
      &lt;!--
      We want to make sure we compile using java 1.8.
      --&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
        &lt;version&gt;3.5.1&lt;/version&gt;
        &lt;configuration&gt;
          &lt;forceJavacCompilerUse&gt;true&lt;/forceJavacCompilerUse&gt;
          &lt;source&gt;${java_version}&lt;/source&gt;
          &lt;compilerArgument&gt;-Xlint:unchecked&lt;/compilerArgument&gt;
          &lt;target&gt;${java_version}&lt;/target&gt;
          &lt;showWarnings&gt;true&lt;/showWarnings&gt;
        &lt;/configuration&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
  &lt;/build&gt;
&lt;/project&gt;
</pre></div></div>
</li>
<li>

<p>Now let&#x2019;s create our parser  <tt>com.thirdparty.SimpleParser</tt> by creating the file <tt>extra-parsers/src/main/java/com/thirdparty/SimpleParser.java</tt> with the following content:</p>

<div>
<div>
<pre class="source">package com.thirdparty;

import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import org.apache.metron.parsers.BasicParser;
import org.json.simple.JSONObject;

import java.util.List;
import java.util.Map;

public class SimpleParser extends BasicParser {
  @Override
  public void init() {

  }

  @Override
  public List&lt;JSONObject&gt; parse(byte[] bytes) {
    String input = new String(bytes);
    Iterable&lt;String&gt; it = Splitter.on(&quot;,&quot;).split(input);
    JSONObject ret = new JSONObject();
    ret.put(&quot;original_string&quot;, input);
    ret.put(&quot;timestamp&quot;, System.currentTimeMillis());
    ret.put(&quot;first&quot;, Iterables.getFirst(it, &quot;missing&quot;));
    ret.put(&quot;last&quot;, Iterables.getLast(it, &quot;missing&quot;));
    return ImmutableList.of(ret);
  }

  @Override
  public void configure(Map&lt;String, Object&gt; map) {

  }
}
</pre></div></div>
</li>
<li>Compile the parser via <tt>mvn clean package</tt> in <tt>extra_parsers</tt></li>
<li>

<p>This will create a jar containing your parser and its dependencies (sans Metron dependencies) in <tt>extra-parsers/target/extra-parsers-1.0-SNAPSHOT-uber.jar</tt></p>
</li>
</ul>
<p><a name="Deploying_Your_Custom_Parser"></a></p>
<h1>Deploying Your Custom Parser</h1>
<p>In order to deploy your newly built custom parser, you would place the jar file above in the <tt>$METRON_HOME/parser_contrib</tt> directory on the Metron host (i.e. any host you would start parsers from or, alternatively, where the Metron REST is hosted).</p></div>
<div class="section">
<h2><a name="Example"></a>Example</h2>
<p>Let&#x2019;s work through deploying the example above.</p>
<div class="section">
<h3><a name="Preliminaries"></a>Preliminaries</h3>
<p>We assume that the following environment variables are set:</p>
<ul>

<li><tt>METRON_HOME</tt> - the home directory for metron</li>
<li><tt>ZOOKEEPER</tt> - The zookeeper quorum (comma separated with port specified: e.g. <tt>node1:2181</tt> for full-dev)</li>
<li><tt>BROKERLIST</tt> - The Kafka broker list (comma separated with port specified: e.g. <tt>node1:6667</tt> for full-dev)</li>
<li><tt>ES_HOST</tt> - The elasticsearch master (and port) e.g. <tt>node1:9200</tt> for full-dev.</li>
</ul>
<p>Also, this does not assume that you are using a kerberized cluster.  If you are, then the parser start command will adjust slightly to include the security protocol.</p></div>
<div class="section">
<h3><a name="Copy_the_jar_file_up"></a>Copy the jar file up</h3>
<p>Copy the jar file located in <tt>extra-parsers/target/extra-parsers-1.0-SNAPSHOT-uber.jar</tt> to <tt>$METRON_HOME/parser_contrib</tt> and ensure the permissions are such that the <tt>metron</tt> user can read and execute.</p></div>
<div class="section">
<h3><a name="Restart_the_REST_service_in_Ambari"></a>Restart the REST service in Ambari</h3>
<p>In order for new parsers to be picked up, the REST service must be restarted.  You can do that from within Ambari by restarting the <tt>Metron REST</tt> service.</p></div>
<div class="section">
<h3><a name="Create_a_Kafka_Topic"></a>Create a Kafka Topic</h3>
<p>Create a kafka topic, let&#x2019;s call it <tt>test</tt>.</p>

<div>
<div>
<pre class="source">KAFKA_HOME=/usr/hdp/current/kafka-broker
$KAFKA_HOME/bin/kafka-topics.sh --zookeeper $ZOOKEEPER --create --topic test --partitions 1 --replication-factor 1
</pre></div></div>

<p>Note, in a real deployment, that topic would be named something more descriptive and would have replication factor and partitions set to something less trivial.</p></div>
<div class="section">
<h3><a name="Configure_Test_Parser"></a>Configure Test Parser</h3>
<p>Create the a file called <tt>$METRON_HOME/config/zookeeper/parsers/test.json</tt> with the following content:</p>

<div>
<div>
<pre class="source">{
  &quot;parserClassName&quot;:&quot;com.thirdparty.SimpleParser&quot;,
  &quot;sensorTopic&quot;:&quot;test&quot;
}
</pre></div></div>
</div>
<div class="section">
<h3><a name="Push_the_Zookeeper_Configs"></a>Push the Zookeeper Configs</h3>
<p>Now push the config to Zookeeper with the following command.</p>

<div>
<div>
<pre class="source">$METRON_HOME/bin/zk_load_configs.sh -m PUSH -i $METRON_HOME/config/zookeeper/ -z $ZOOKEEPER
</pre></div></div>
</div>
<div class="section">
<h3><a name="Start_Parser"></a>Start Parser</h3>
<p>Now we can start the parser and send some data through:</p>
<ul>

<li>

<p>Start the parser</p>

<div>
<div>
<pre class="source">$METRON_HOME/bin/start_parser_topology.sh -k $BROKERLIST -z $ZOOKEEPER -s test
</pre></div></div>
</li>
<li>

<p>Send example data through:</p>

<div>
<div>
<pre class="source">echo &quot;apache,metron&quot; | /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list $BROKERLIST --topic test
</pre></div></div>
</li>
<li>

<p>Validate data was written in ES:</p>

<div>
<div>
<pre class="source">curl -XPOST &quot;http://$ES_HOST/test*/_search?pretty&quot; -d '
{
  &quot;_source&quot; : [ &quot;original_string&quot;, &quot;timestamp&quot;, &quot;first&quot;, &quot;last&quot;]
}
'
</pre></div></div>
</li>
<li>

<p>This should yield something like:</p>

<div>
<div>
<pre class="source">{
  &quot;took&quot; : 23,
  &quot;timed_out&quot; : false,
  &quot;_shards&quot; : {
    &quot;total&quot; : 1,
    &quot;successful&quot; : 1,
    &quot;failed&quot; : 0
  },
  &quot;hits&quot; : {
    &quot;total&quot; : 1,
    &quot;max_score&quot; : 1.0,
    &quot;hits&quot; : [ {
      &quot;_index&quot; : &quot;test_index_2017.10.04.17&quot;,
      &quot;_type&quot; : &quot;test_doc&quot;,
      &quot;_id&quot; : &quot;3ae4dd4d-8c09-4f2a-93c0-26ec5508baaa&quot;,
      &quot;_score&quot; : 1.0,
      &quot;_source&quot; : {
        &quot;original_string&quot; : &quot;apache,metron&quot;,
        &quot;last&quot; : &quot;metron&quot;,
        &quot;first&quot; : &quot;apache&quot;,
        &quot;timestamp&quot; : 1507138373223
      }
    } ]
  }
}
</pre></div></div>
</li>
</ul></div>
<div class="section">
<h3><a name="Via_the_Management_UI"></a>Via the Management UI</h3>
<p>As long as the REST service is restarted after new parsers are added to <tt>$METRON_HOME/parser_contrib</tt>, they are available in the UI to creating and deploying parsers.</p></div></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>
