[comment]: # ({025717bd-4ff8e217})
# 7 Elasticsearch iestatīšana

::: noteimportant
 Elasticsearch atbalsts ir eksperimentāls!

:::

Zabbix atbalsta vēsturisko datu glabāšanu, izmantojot Elasticsearch
datubāzes vietā. Lietotāji var izvēlēties vēsturisko datu glabāšanas
vietu starp saderīgu datubāzi un Elasticsearch. Šajā sadaļā aprakstītā
iestatīšanas procedūra ir piemērojama Elasticsearch 7.X versijai. Ja tiek
izmantota agrāka vai jaunāka Elasticsearch versija, dažas funkcijas var
nedarboties, kā paredzēts.

::: notewarning
1\.Ja visi vēsturiskie dati tiek glabāti Elasticsearch,
tendences netiek **aprēķinātas** un netiek glabātas datubāzē. Ja
tendences netiek aprēķinātas un glabātas, var būt nepieciešams pagarināt
vēsturisko datu glabāšanas periodu.<br>
2\. Ja tiek izmantots Elasticsearch, diapazona vaicājumi, kas izgūst
vērtības no datubāzes, ir ierobežoti ar datu glabāšanas perioda laika
zīmogu.
:::

[comment]: # ({/025717bd-4ff8e217})

[comment]: # ({0b6587bd-0b6587bd})
#### Konfigurācija

Lai nodrošinātu pareizu saziņu starp visiem iesaistītajiem elementiem, pārliecinieties, ka servera konfigurācijas faila un lietotāja saskarnes konfigurācijas faila parametri ir pareizi konfigurēti.

[comment]: # ({/0b6587bd-0b6587bd})

[comment]: # ({293ef64c-293ef64c})
##### Zabbix serveris un lietotāja saskarne

Zabbix servera konfigurācijas faila melnraksts ar parametriem, kas jāatjaunina:

    ### Option: HistoryStorageURL
    # Vēstures glabātuves HTTP[S] URL.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageURL= 
    ### Option: HistoryStorageTypes
    # Ar komatiem atdalīts vērtību tipu saraksts, kas jānosūta uz vēstures glabātuvi.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageTypes=uint,dbl,str,log,text

Piemēra parametru vērtības, ar kurām aizpildīt Zabbix servera konfigurācijas failu:

    HistoryStorageURL=http://test.elasticsearch.lan:9200
    HistoryStorageTypes=str,log,text

Šī konfigurācija liek Zabbix Server saglabāt skaitlisko tipu vēstures vērtības atbilstošajā datubāzē, bet teksta vēstures datus - Elasticsearch.

Elasticsearch atbalsta šādus vienumu tipus:

    uint,dbl,str,log,text

Atbalstīto vienumu tipu skaidrojums:

|   |   |   |
|---|---|---|
|**Vienuma vērtības tips**|**Datubāzes tabula**|**Elasticsearch tips**|
|Numeric (unsigned)|history\_uint|uint|
|Numeric (float)|history|dbl|
|Character|history\_str|str|
|Log|history\_log|log|
|Text|history\_text|text|

Zabbix lietotāja saskarnes konfigurācijas faila (`conf/zabbix.conf.php`) melnraksts ar parametriem, kas jāatjaunina:

    // Elasticsearch url (can be string if same url is used for all types).
    $HISTORY['url']   = [
          'uint' => 'http://localhost:9200',
          'text' => 'http://localhost:9200'
    ];
    // Value types stored in Elasticsearch.
    $HISTORY['types'] = ['uint', 'text'];

Piemēra parametru vērtības, ar kurām aizpildīt Zabbix lietotāja saskarnes konfigurācijas failu:

    $HISTORY['url']   = 'http://test.elasticsearch.lan:9200';
    $HISTORY['types'] = ['str', 'text', 'log'];

Šī konfigurācija liek saglabāt `Text`, `Character` un `Log` vēstures vērtības Elasticsearch.

Lai viss darbotos pareizi, `conf/zabbix.conf.php` failā ir arī jāpadara $HISTORY globāls (skatiet `conf/zabbix.conf.php.example`, lai redzētu, kā to izdarīt):

    // Zabbix GUI configuration file.
    global $DB, $HISTORY;

[comment]: # ({/293ef64c-293ef64c})

[comment]: # ({000d1106-e9a9c5bd})
##### Elasticsearch instalēšana un mapping izveide

Pēdējie divi soļi, lai viss darbotos, ir Elasticsearch
instalēšana un mapping procesa izveide.

Lai instalētu Elasticsearch, lūdzu, skatiet [Elasticsearch instalēšanas
rokasgrāmatu](https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html).

::: noteclassic
Mapping ir datu struktūra Elasticsearch (līdzīga tabulai datubāzē). Mapping visiem vēstures datu tipiem ir pieejams šeit: `database/elasticsearch/elasticsearch.map`.
:::

::: notewarning
Mapping izveide ir obligāta. Daļa funkcionalitātes nedarbosies, ja mapping netiks izveidots atbilstoši
instrukcijai.
:::

Lai izveidotu `text` tipa mapping, nosūtiet šādu pieprasījumu uz
Elasticsearch:

``` {.java}
curl -X PUT \
 http://your-elasticsearch.here:9200/text \
 -H 'content-type:application/json' \
 -d '{
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "properties": {
         "itemid": {
            "type": "long"
         },
         "clock": {
            "format": "epoch_second",
            "type": "date"
         },
         "value": {
            "fields": {
               "analyzed": {
                  "index": true,
                  "type": "text",
                  "analyzer": "standard"
               }
            },
            "index": false,
            "type": "text"
         }
      }
   }
}'
```

Līdzīgs pieprasījums ir jāizpilda arī `Character` un `Log`
vēstures vērtību mapping izveidei, attiecīgi koriģējot tipu.

::: noteclassic
Lai strādātu ar Elasticsearch, lūdzu, skatiet [Prasības](/manual/installation/requirements#serverproxy), lai iegūtu papildu
informāciju.
:::

::: noteclassic
[Housekeeper](/manual/web_interface/frontend_sections/administration/housekeeping)
neizdzēš nekādus datus no Elasticsearch.
:::

[comment]: # ({/000d1106-e9a9c5bd})

[comment]: # ({8451a0a2-8451a0a2})
#### Vēstures datu glabāšana vairākos uz datumu balstītos indeksos

Šajā sadaļā ir aprakstītas papildu darbības, kas nepieciešamas darbam ar cauruļvadiem un ingest mezgliem.

Vispirms ir jāizveido indeksu veidnes.

Tālāk redzamajā piemērā ir parādīts pieprasījums uint veidnes izveidei:

``` {.java}
curl -X PUT \
 http://your-elasticsearch.here:9200/_template/uint_template \
 -H 'content-type:application/json' \
 -d '{
   "index_patterns": [
      "uint*"
   ],
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "properties": {
         "itemid": {
            "type": "long"
         },
         "clock": {
            "format": "epoch_second",
            "type": "date"
         },
         "value": {
            "type": "long"
         }
      }
   }
}'
```

Lai izveidotu citas veidnes, lietotājam jāmaina URL (pēdējā daļa ir veidnes nosaukums), jāmaina lauks `"index_patterns"`, lai tas atbilstu indeksa nosaukumam, un jāiestata derīgs kartējums, ko var ņemt no
`database/elasticsearch/elasticsearch.map`.

Piemēram, šādu komandu var izmantot, lai izveidotu veidni teksta indeksam:

``` {.java}
curl -X PUT \
 http://your-elasticsearch.here:9200/_template/text_template \
 -H 'content-type:application/json' \
 -d '{
   "index_patterns": [
      "text*"
   ],
   "settings": {
      "index": {
         "number_of_replicas": 1,
         "number_of_shards": 5
      }
   },
   "mappings": {
      "properties": {
         "itemid": {
            "type": "long"
         },
         "clock": {
            "format": "epoch_second",
            "type": "date"
         },
         "value": {
            "fields": {
               "analyzed": {
                  "index": true,
                  "type": "text",
                  "analyzer": "standard"
               }
            },
            "index": false,
            "type": "text"
         }
      }
   }
}'
```

Tas ir nepieciešams, lai Elasticsearch varētu iestatīt derīgu kartējumu automātiski izveidotiem indeksiem. Pēc tam ir jāizveido cauruļvada definīcija. Cauruļvads ir sava veida datu pirmapstrāde pirms datu ievietošanas indeksos. Tālāk redzamo komandu var izmantot, lai izveidotu cauruļvadu uint indeksam:

``` {.java}
curl -X PUT \
 http://your-elasticsearch.here:9200/_ingest/pipeline/uint-pipeline \
 -H 'content-type:application/json' \
 -d '{
   "description": "daily uint index naming",
   "processors": [
      {
         "date_index_name": {
            "field": "clock",
            "date_formats": [
               "UNIX"
            ],
            "index_name_prefix": "uint-",
            "date_rounding": "d"
         }
      }
   ]
}'
```

Lietotājs var mainīt noapaļošanas parametru ("date\_rounding"), lai iestatītu noteiktu indeksa rotācijas periodu. Lai izveidotu citus cauruļvadus, lietotājam jāmaina URL (pēdējā daļa ir cauruļvada nosaukums) un jāmaina lauks "index\_name\_prefix", lai tas atbilstu indeksa nosaukumam.

Skatiet arī [Elasticsearch dokumentāciju](https://www.elastic.co/guide/en/elasticsearch/reference/master/date-index-name-processor.html).

Papildus tam vēstures datu glabāšana vairākos uz datumu balstītos indeksos ir jāiespējo arī jaunā parametrā Zabbix servera konfigurācijā:

    ### Option: HistoryStorageDateIndex
    # Enable preprocessing of history values in history storage to store values in different indices based on date.
    # 0 - disable
    # 1 - enable
    #
    # Mandatory: no
    # Default:
    # HistoryStorageDateIndex=0

[comment]: # ({/8451a0a2-8451a0a2})

[comment]: # ({52123e63-5c4a5e3c})
#### Problēmu novēršana

Tālāk norādītās darbības var palīdzēt novērst problēmas ar
Elasticsearch iestatīšanu:

1.  Pārbaudiet, vai kartējums ir pareizs (GET pieprasījums uz nepieciešamo indeksa URL,
    piemēram, `http://localhost:9200/uint`).
2.  Pārbaudiet, vai shardi nav kļūmes stāvoklī (Elasticsearch restartēšana
    var palīdzēt).
3.  Pārbaudiet Elasticsearch konfigurāciju. Konfigurācijai jāatļauj
    piekļuve no Zabbix lietotāja saskarnes hosta un Zabbix servera hosta.
4.  Pārbaudiet Elasticsearch žurnālus.
5.  [``LogSlowQueries``](/manual/appendix/config/zabbix_server#logslowqueries) var izmantot, lai pārbaudītu lēnos vaicājumus Elasticsearch datubāzē.

Ja joprojām rodas problēmas ar jūsu instalāciju, lūdzu,
izveidojiet kļūdas ziņojumu, iekļaujot visu šajā sarakstā norādīto informāciju
(kartējums, kļūdu žurnāli, konfigurācija, versija utt.)

[comment]: # ({/52123e63-5c4a5e3c})
