<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>logs &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/logs/feed/" rel="self" type="application/rss+xml" />
	<link>https://solr.pl</link>
	<description>All things to be found - Blog related to Apache Solr &#38; Lucene projects - https://solr.apache.org</description>
	<lastBuildDate>Sat, 14 Nov 2020 12:05:51 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Solr 8.5.0 &#8211; narzędzie bin/postlogs</title>
		<link>https://solr.pl/2020/03/30/solr-8-5-0-narzedzie-bin-postlogs/</link>
					<comments>https://solr.pl/2020/03/30/solr-8-5-0-narzedzie-bin-postlogs/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 30 Mar 2020 11:00:20 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[8.5.0]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[postlog]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=810</guid>

					<description><![CDATA[Wraz z udostępnieniem Solr 8.5.0 dostaliśmy możliwość bardzo łatwego indeksowania logów, które Solr produkuje. Posiadając te dane w samym Solr jesteśmy w stanie je przeszukiwać i analizować z wykorzystaniem facetingu. Zobaczmy zatem jak skorzystać z tego narzędzia. Założenia W ramach]]></description>
										<content:encoded><![CDATA[
<p>Wraz z udostępnieniem Solr 8.5.0 dostaliśmy możliwość bardzo łatwego indeksowania logów, które Solr produkuje. Posiadając te dane w samym Solr jesteśmy w stanie je przeszukiwać i analizować z wykorzystaniem facetingu. Zobaczmy zatem jak skorzystać z tego narzędzia. </p>



<span id="more-810"></span>



<h2 class="wp-block-heading">Założenia</h2>



<p>W ramach naszego prostego testu nie będziemy przygotowywać wymyślnej struktury naszej kolekcji. Skorzystamy z konfiguracji <em>_default</em> dostępnej domyślnie wraz z Solr. Pozwoli to nam na podstawową zabawę. W przypadku kiedy chcielibyśmy skorzystać z nowego narzędzia w środowisku produkcyjnym zalecamy jednak przygotowanie odpowiedniej struktury. </p>



<h2 class="wp-block-heading">Środowisko testów</h2>



<p>Środowisko naszych testów jest proste. Uruchamiamy Solr za pomocą następującego polecenia:</p>



<pre class="wp-block-code"><code class="">$ bin/solr start -c -f</code></pre>



<p>Następnie tworzymy kolekcję o nazwie <em>test</em> oraz kolekcję o nazwie <em>logs</em>. Tą pierwszą wykorzystamy do zadania kilku zapytań, a ta druga będzie służyć do zaindeksowania logów. Kolekcje tworzymy za pomocą następujących poleceń:</p>



<pre class="wp-block-code"><code class="">$ bin/solr create_collection -c test
$ bin/solr create_collection -c logs</code></pre>



<p>Dodatkowo potrzebujemy danych:</p>



<pre class="wp-block-code"><code class="">$ curl -H 'Content-type:application/json' -XPOST 'localhost:8983/solr/test/update?commit=true' -d '[
 {
  "id": 1,
  "title": "Test document one"
 },
 {
  "id": 2,
  "title": "Test document two"
 }
]'</code></pre>



<p>Na sam koniec możemy zadać kilka zapytań:</p>



<pre class="wp-block-code"><code class="">$ curl -XGET 'localhost:8983/solr/test/select?q=*:*'
$ curl -XGET 'localhost:8983/solr/test/select?q=*:*&amp;fq=id:1'</code></pre>



<h2 class="wp-block-heading">Indeksowanie logów</h2>



<p>Do moich testów Solr zainstalowany był w katalogu <em>/opt/solr</em>, a same logi dostępne w katalogu <em>/opt/solr/server/logs</em>. Biorąc to pod uwagę wysłanie wszystkich logów z tego katalogu do kolekcji <em>logs</em> naszego lokalnego Solr jest bardzo proste i wymaga następującego polecenia:</p>



<pre class="wp-block-code"><code class="">$ bin/postlogs http://localhost:8983/solr/logs /opt/solr/server/logs/</code></pre>



<p>Krótka chwila oczekiwania i powinniśmy zobaczyć następujący komunikat:</p>



<pre class="wp-block-code"><code class="">Sending last batch ...
Committed</code></pre>



<p>Nasze logi gotowe są do wyszukiwania i analizy.</p>



<h2 class="wp-block-heading">Wyszukiwanie w logach</h2>



<p>Zobaczmy zatem co w logach piszczy. Najprostszy sposób wyszukiwania to po prostu zadanie zapytanie o wszystkie dokumenty, czyli tzw. <em>match all</em>:</p>



<pre class="wp-block-code"><code class="">http://localhost:8983/solr/logs/select?q=*:*</code></pre>



<p>Odpowiedź od Solr jest następująca:</p>



<pre class="wp-block-code"><code class="">{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":0,
    "params":{
      "q":"*:*"}},
  "response":{"numFound":23,"start":0,"docs":[
      {
        "date_dt":"2020-03-28T11:25:52.506Z",
        "qtime_i":33,
        "status_s":"0",
        "params_t":"wt=json",
        "wt_s":"json",
        "distrib_s":"true",
        "shards_s":"false",
        "ids_s":"false",
        "path_s":"/admin/info/system",
        "type_s":"admin",
        "id":"673b31e1-4e7f-4add-8f11-21094a20a790",
        "file_s":"solr.log",
        "_version_":1662407100088713216},
      {
        "date_dt":"2020-03-28T11:25:52.542Z",
        "qtime_i":2,
        "status_s":"0",
        "params_t":"action=CLUSTERSTATUS&amp;wt=json",
        "wt_s":"json",
        "distrib_s":"true",
        "shards_s":"false",
        "ids_s":"false",
        "path_s":"/admin/collections",
        "type_s":"admin",
        "id":"a14d72a3-3a08-406e-bbb8-455743b770ea",
        "file_s":"solr.log",
        "_version_":1662407100099198976},
      {
        "date_dt":"2020-03-28T11:25:52.749Z",
        "qtime_i":0,
        "status_s":"0",
        "params_t":"action=list&amp;wt=json",
        "wt_s":"json",
        "distrib_s":"true",
        "shards_s":"false",
        "ids_s":"false",
        "path_s":"/admin/collections",
        "type_s":"admin",
        "id":"12141bf6-6a46-49f6-9cc9-72a037755771",
        "file_s":"solr.log",
        "_version_":1662407100100247552},
      {
        "date_dt":"2020-03-28T11:25:54.645Z",
        "core_s":"test_shard1_replica_n1",
        "type_s":"newSearcher",
        "line_t":"2020-03-28 11:25:54.645 INFO  (searcherExecutor-14-thread-1-processing-n:192.168.1.197:8983_solr x:test_shard1_replica_n1 c:test s:shard1 r:core_node2) [c:test s:shard1 r:core_node2 x:test_shard1_replica_n1] o.a.s.c.SolrCore [test_shard1_replica_n1] Registered new searcher Searcher@7b44e20e[test_shard1_replica_n1] main{ExitableDirectoryReader(UninvertingDirectoryReader())}",
        "id":"66b4a193-17de-46fb-a586-d3359c20af0b",
        "file_s":"solr.log",
        "_version_":1662407100101296128},
      {
        "date_dt":"2020-03-28T11:25:54.795Z",
        "qtime_i":1624,
        "status_s":"0",
        "params_t":"qt=/admin/cores&amp;coreNodeName=core_node2&amp;collection.configName=test&amp;newCollection=true&amp;name=test_shard1_replica_n1&amp;action=CREATE&amp;numShards=1&amp;collection=test&amp;shard=shard1&amp;wt=javabin&amp;version=2&amp;replicaType=NRT",
        "wt_s":"javabin",
        "distrib_s":"true",
        "shards_s":"false",
        "ids_s":"false",
        "collection_s":"test",
        "core_s":"test_shard1_replica_n1",
        "shard_s":"shard1",
        "replica_s":"core_node2",
        "path_s":"/admin/cores",
        "type_s":"admin",
        "id":"31db40d4-9273-47d6-af6e-98665b2b0bb6",
        "file_s":"solr.log",
        "_version_":1662407100102344704},
      {
        "date_dt":"2020-03-28T11:25:54.899Z",
        "qtime_i":2146,
        "status_s":"0",
        "params_t":"replicationFactor=1&amp;maxShardsPerNode=-1&amp;collection.configName=test&amp;name=test&amp;action=CREATE&amp;numShards=1&amp;wt=json",
        "wt_s":"json",
        "distrib_s":"true",
        "shards_s":"false",
        "ids_s":"false",
        "path_s":"/admin/collections",
        "type_s":"admin",
        "id":"51a735fc-fc90-49b6-ae13-2823a708c287",
        "file_s":"solr.log",
        "_version_":1662407100103393280},
      {
        "date_dt":"2020-03-28T11:26:20.675Z",
        "qtime_i":2,
        "status_s":"0",
        "params_t":"wt=javabin&amp;version=2&amp;key=solr.core.test.shard1.replica_n1:QUERY./select.requests&amp;key=solr.core.test.shard1.replica_n1:UPDATE./update.requests&amp;key=solr.core.test.shard1.replica_n1:INDEX.sizeInBytes",
        "wt_s":"javabin",
        "distrib_s":"true",
        "shards_s":"false",
        "ids_s":"false",
        "path_s":"/admin/metrics",
        "type_s":"admin",
        "id":"17928b68-4a83-41e9-84b2-15533028c0c4",
        "file_s":"solr.log",
        "_version_":1662407100104441856},
      {
        "date_dt":"2020-03-28T11:26:20.683Z",
        "qtime_i":1,
        "status_s":"0",
        "params_t":"wt=javabin&amp;version=2&amp;key=solr.jvm:os.processCpuLoad&amp;key=solr.node:CONTAINER.fs.coreRoot.usableSpace&amp;key=solr.jvm:os.systemLoadAverage&amp;key=solr.jvm:memory.heap.used",
        "wt_s":"javabin",
        "distrib_s":"true",
        "shards_s":"false",
        "ids_s":"false",
        "path_s":"/admin/metrics",
        "type_s":"admin",
        "id":"a8cd34ff-4a13-4d6e-a59a-21b882aacd19",
        "file_s":"solr.log",
        "_version_":1662407100105490432},
      {
        "date_dt":"2020-03-28T11:27:10.751Z",
        "type_s":"commit",
        "line_t":"2020-03-28 11:27:10.751 INFO  (qtp776700275-20) [c:test s:shard1 r:core_node2 x:test_shard1_replica_n1] o.a.s.u.DirectUpdateHandler2 start commit{_version_=1662406970049560576,optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=false,prepareCommit=false}",
        "soft_commit_s":"false",
        "open_searcher_s":"true",
        "collection_s":"test",
        "core_s":"test_shard1_replica_n1",
        "shard_s":"shard1",
        "replica_s":"core_node2",
        "id":"11eacb14-ba19-4fcf-bf37-e13e75b58a17",
        "file_s":"solr.log",
        "_version_":1662407100106539008},
      {
        "date_dt":"2020-03-28T11:27:10.888Z",
        "core_s":"test_shard1_replica_n1",
        "type_s":"newSearcher",
        "line_t":"2020-03-28 11:27:10.888 INFO  (searcherExecutor-14-thread-1-processing-n:192.168.1.197:8983_solr x:test_shard1_replica_n1 c:test s:shard1 r:core_node2) [c:test s:shard1 r:core_node2 x:test_shard1_replica_n1] o.a.s.c.SolrCore [test_shard1_replica_n1] Registered new searcher Searcher@404ea7b6[test_shard1_replica_n1] main{ExitableDirectoryReader(UninvertingDirectoryReader(Uninverting(_0(8.5.0):C2:[diagnostics={os=Mac OS X, java.vendor=Oracle Corporation, java.version=1.8.0_191, java.vm.version=25.191-b12, lucene.version=8.5.0, os.arch=x86_64, java.runtime.version=1.8.0_191-b12, source=flush, os.version=10.15.4, timestamp=1585394830809}]:[attributes={Lucene50StoredFieldsFormat.mode=BEST_SPEED}])))}",
        "id":"6a0a6fe0-7390-49c8-921d-e269f14de12f",
        "file_s":"solr.log",
        "_version_":1662407100107587584}]
  }}</code></pre>



<p>Oczywiście należy pamiętać, iż korzystamy z konfiguracji <em>_default</em><span style="text-decoration: underline;">,</span> ale już w tym momencie widać kilka ciekawych informacji, które dostępne są w odpowiednich polach:</p>



<ul class="wp-block-list"><li>czas wystąpienia zdarzenia dostępny w polu <strong>date_dt</strong></li><li>czas trwania zapytania w polu <strong>qtime_i</strong></li><li>parametry zapytania w polu <strong>params_s</strong></li><li>nazwa kolekcji w polu <strong>collection_s</strong></li><li>shard oraz core w polach <strong>shard_s</strong> i <strong>core_s</strong></li></ul>



<p>Znając nazwy pól możemy np. poprosić o wszystkie żądania do handlera <strong>/select</strong> i zobaczyć jakie kolekcje były używane oraz np. sprawdzić, czy były  zapytania wykonujące się pomiędzy 0, a 100ms oraz powyżej 100ms:</p>



<pre class="wp-block-code"><code class="">http://localhost:8983/solr/logs/select?q=path_s:\/select&amp;facet=true&amp;facet.field=collection_s&amp;facet.interval=qtime_i&amp;&amp;facet.interval.set=[0,100)&amp;facet.interval.set=[100,*]</code></pre>



<p>Odpowiedź Solr w tym wypadku byłaby następująca:</p>



<pre class="wp-block-code"><code class="">{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":0,
    "params":{
      "q":"path_s:\\/select",
      "facet.field":"collection_s",
      "facet.interval":"qtime_i",
      "facet":"true",
      "facet.interval.set":["[0,100)",
        "[100,*]"]}},
  "response":{"numFound":2,"start":0,"docs":[
      {
        "date_dt":"2020-03-28T11:27:39.401Z",
        "qtime_i":51,
        "status_s":"0",
        "hits_l":2,
        "params_t":"q=*:*",
        "q_s":"*:*",
        "q_t":"*:*",
        "distrib_s":"true",
        "shards_s":"false",
        "ids_s":"false",
        "collection_s":"test",
        "core_s":"test_shard1_replica_n1",
        "shard_s":"shard1",
        "replica_s":"core_node2",
        "path_s":"/select",
        "type_s":"query",
        "id":"3af60e9f-85cf-4958-89c5-b239e80af179",
        "file_s":"solr.log",
        "_version_":1662407100112830464},
      {
        "date_dt":"2020-03-28T11:27:52.597Z",
        "qtime_i":11,
        "status_s":"0",
        "hits_l":1,
        "params_t":"q=*:*&amp;fq=id:1",
        "q_s":"*:*",
        "q_t":"*:*",
        "distrib_s":"true",
        "shards_s":"false",
        "ids_s":"false",
        "collection_s":"test",
        "core_s":"test_shard1_replica_n1",
        "shard_s":"shard1",
        "replica_s":"core_node2",
        "path_s":"/select",
        "type_s":"query",
        "id":"c6190ce0-845b-4fe8-b646-e5fc3d69bc80",
        "file_s":"solr.log",
        "_version_":1662407100113879040}]
  },
  "facet_counts":{
    "facet_queries":{},
    "facet_fields":{
      "collection_s":[
        "test",2,
        "logs",0]},
    "facet_ranges":{},
    "facet_intervals":{
      "qtime_i":{
        "[0,100)":2,
        "[100,*]":0}},
    "facet_heatmaps":{}}}</code></pre>



<p>Dwa zapytania, wszystkie do kolekcji <strong>test</strong>, wszystkie w przedziale od 0 do 100ms. </p>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p>Narzędzie <strong>bin/postlogs</strong> jest moim zdaniem dobrym krokiem w kierunku łatwego i szybkiego indeksowania logów w przypadku kiedy chcemy skorzystać z możliwości analizy i wyszukiwania danych Solr. Indeksując dane zyskujemy możliwość wykorzystania nie tylko wyszukiwania pełnotekstowego, ale także skorzystania z facetingu, czyli analizy danych. Oczywiście, aby korzystać z tego rozwiązania w środowisku produkcyjnym i traktować je jako element na którym możemy polegać w przypadku awarii konieczne byłoby indeksowanie danych co pewien interwał czasu oraz utrzymywanie oddzielnego klastra Solr do samych logów. Ale to już temat na inny wpis <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" />  </p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2020/03/30/solr-8-5-0-narzedzie-bin-postlogs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
