<div dir="ltr"><div><div><div><div><div><div>I&#39;m for from being an expert, but I think that using the built in grok patterns and/or being more specific with the regex syntax will result in better logstash performance.<br>
<br></div>for example, I&#39;m profiling performance for some of our dns grok parsing patterns:<br><br></div>match =&gt; [ &quot;message&quot;, &quot;(?&lt;bro_event_time&gt;[0-9\.]{14})[0-9]+\t%{IP:dns_requester}\s%(?&lt;dns_query_src_port&gt;[0-9]{1,5})\t%{IP:dns_server}\s%(?&lt;dns_query_dst_port&gt;[0-9]{1,5})\t%{WORD:dns_query_proto}\t(?&lt;dns_query_transid&gt;[0-9]+)\t%{HOSTNAME:dns_query}\t%{NOTSPACE:dns_query_class}\t(?&lt;dns_query_type&gt;[A-Za-z0-9\-\*]+)\t%{NOTSPACE:dns_query_result&gt;[A-Z\*]+)\t(?&lt;dns_authoritative_answer&gt;[TF])\t(?&lt;dns_recursion_desired&gt;[TF])\t(?&lt;dns_recursion_available&gt;[TF])\t%{GREEDYDATA:dns_response}&quot; ]<br>
<br></div><div>I&#39;m also sure 
that there&#39;s more efficient ways to write it than what I did.  The odd parsing of the timestamp is because we use logstash to rewrite event times where possible, using the actual event time with the date filter:<br><br>
</div></div></div>   date {<br></div>      match =&gt; [ &quot;bro_event_time&quot;, &quot;UNIX&quot; ]<br>    }<br><div><div><div><div><br><div>Just my .02.<br></div></div></div></div></div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Wed, Jul 23, 2014 at 11:58 AM, Craig Pluchinsky <span dir="ltr">&lt;<a href="mailto:craigp@iup.edu" target="_blank">craigp@iup.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I&#39;ve done most of them using grok and custom patterns.  Conn.log below<br>
Using logstash to read the log files, process and insert into<br>
elasticsearch.  Then using kibana as a web front end.<br>
<div class=""><br>
       grok {<br>
         match =&gt; [ &quot;message&quot;,<br>
</div>&quot;(?&lt;ts&gt;(.*?))\t(?&lt;uid&gt;(.*?))\t(?&lt;id.orig_h&gt;(.*?))\t(?&lt;id.orig_p&gt;(.*?))\t(?&lt;id.resp_h&gt;(.*?))\t(?&lt;id.resp_p&gt;(.*?))\t(?&lt;proto&gt;(.*?))\t(?&lt;service&gt;(.*?))\t(?&lt;duration&gt;(.*?))\t(?&lt;orig_bytes&gt;(.*?))\t(?&lt;resp_bytes&gt;(.*?))\t(?&lt;conn_state&gt;(.*?))\t(?&lt;local_orig&gt;(.*?))\t(?&lt;missed_bytes&gt;(.*?))\t(?&lt;history&gt;(.*?))\t(?&lt;orig_pkts&gt;(.*?))\t(?&lt;orig_ip_bytes&gt;(.*?))\t(?&lt;resp_pkts&gt;(.*?))\t(?&lt;resp_ip_bytes&gt;(.*?))\t(?&lt;tunnel_parents&gt;(.*))&quot;<br>

]<br>
       }<br>
<br>
<br>
<br>
-------------------------------<br>
Craig Pluchinsky<br>
IT Services<br>
Indiana University of Pennsylvania<br>
<a href="tel:724-357-3327" value="+17243573327">724-357-3327</a><br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Wed, 23 Jul 2014, James Lay wrote:<br>
<br>
&gt; On 2014-07-23 09:40, Seth Hall wrote:<br>
&gt;&gt; On Jul 23, 2014, at 11:10 AM, James Lay &lt;<a href="mailto:jlay@slave-tothe-box.net">jlay@slave-tothe-box.net</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; 1.  Is there a proper way to set which logs to send to elasticsearch<br>
&gt;&gt;&gt; that I can use in local.bro instead of modifying<br>
&gt;&gt;&gt; logs-to-elasticsearch.bro?<br>
&gt;&gt;<br>
&gt;&gt; Yes, there are settings that you can change.  In local.bro, you can<br>
&gt;&gt; do this...<br>
&gt;&gt;<br>
&gt;&gt; @load tuning/logs-to-elasticsearch<br>
&gt;&gt; redef LogElasticSearch::send_logs += {<br>
&gt;&gt;      Conn::LOG,<br>
&gt;&gt;      HTTP::LOG<br>
&gt;&gt; };<br>
&gt;&gt;<br>
&gt;&gt; That will only send the conn.log and http.log to ElasticSearch.<br>
&gt;&gt;<br>
&gt;&gt;&gt; 2.  The docs say to add @load tuning/logs-to-elasticsearch in<br>
&gt;&gt;&gt; local.bro...how can I send bro data to a remote elasticsearch server<br>
&gt;&gt;&gt; instead?<br>
&gt;&gt;<br>
&gt;&gt; redef LogElasticSearch::server_host = &quot;1.2.3.4&quot;;<br>
&gt;&gt;<br>
&gt;&gt;&gt; 3.  And lastly, as I look at the Brownian demo, I see that all the<br>
&gt;&gt;&gt; fields are correctly laid out..was this down with Brownian, or with<br>
&gt;&gt;&gt; elasticsearch itself?<br>
&gt;&gt;<br>
&gt;&gt; Could you explain what you mean by &quot;correctly laid out&quot;?<br>
&gt;&gt;<br>
&gt;&gt;&gt; I&#39;m trying to get bro data into logstash direct, instead of using<br>
&gt;&gt;&gt; log<br>
&gt;&gt;&gt; files.  Thanks for any insight.<br>
&gt;&gt;<br>
&gt;&gt; Cool!  With the current mechanism, you could encounter overload<br>
&gt;&gt; situations that cause Bro to grow in memory until you run out of<br>
&gt;&gt; memory.  We&#39;re slowly working on extensions to the ES writer to make<br>
&gt;&gt; it write to a disk backed queuing system so that things should remain<br>
&gt;&gt; more stable over time.  I am interested to hear any experiences you<br>
&gt;&gt; have with this though.<br>
&gt;&gt;<br>
&gt;&gt;   .Seth<br>
&gt;<br>
&gt; Thanks for the responses Gents...they do help.  So...for example<br>
&gt; here...I have snort currently going to logstash.  In order to match<br>
&gt; fields I have this:<br>
&gt;<br>
&gt; filter {<br>
&gt;         grok {<br>
&gt;                 match =&gt; [ &quot;message&quot;, &quot;%{SYSLOGTIMESTAMP:date}<br>
&gt; %{IPORHOST:device} %{WORD:snort}\[%{INT:snort_pid}\]\:<br>
&gt; \[%{INT:gid}\:%{INT:sid}\:%{INT:rev}\] %{DATA:ids_alert}<br>
&gt; \[Classification\: %{DATA:ids_classification}\] \[Priority\:<br>
&gt; %{INT:ids_priority}\] \{%{WORD:proto}\}<br>
&gt; %{IP:ids_src_ip}\:%{INT:ids_src_port} \-\&gt;<br>
&gt; %{IP:ids_dst_ip}\:%{INT:ids_dst_port}&quot; ]<br>
&gt; }<br>
&gt;<br>
&gt; to match:<br>
&gt;<br>
&gt; Jul 23 09:44:46 gateway snort[13205]: [1:2500084:3305] ET COMPROMISED<br>
&gt; Known Compromised or Hostile Host Traffic TCP group 43 [Classification:<br>
&gt; Misc Attack] [Priority: 2] {TCP} <a href="http://61.174.51.229:6000" target="_blank">61.174.51.229:6000</a> -&gt; x.x.x.x:22<br>
&gt;<br>
&gt; I&#39;m guessing I&#39;m going to have to create something like the above grok<br>
&gt; for each bro log file....which...is going to be a hoot ;)  I was hoping<br>
&gt; that work was already done somewhere...and I think I had it working at<br>
&gt; one time for conn.log that I posted here some time ago.  Thanks<br>
&gt; again...after looking at the Brownian source I think I&#39;m going to have<br>
&gt; to just bite the bullet and generate the grok lines.<br>
&gt;<br>
&gt; James<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Bro mailing list<br>
&gt; <a href="mailto:bro@bro-ids.org">bro@bro-ids.org</a><br>
&gt; <a href="http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/bro" target="_blank">http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/bro</a><br>
&gt;<br>
_______________________________________________<br>
Bro mailing list<br>
<a href="mailto:bro@bro-ids.org">bro@bro-ids.org</a><br>
<a href="http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/bro" target="_blank">http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/bro</a><br>
</div></div></blockquote></div><br></div>