[comment]: # translation:outdated

[comment]: # ({4ff8e217-4ff8e217})
# 6 Konfiguracja Elasticsearch

::: noteimportant
 Wsparcie dla Elasticsearch jest eksperymentalne!

:::

Zabbix obsługuje przechowywanie danych historycznych za pomocą Elasticsearch
zamiast bazy danych. Użytkownicy mogą wybrać miejsce przechowywania
danych historycznych między kompatybilną bazą danych a Elasticsearch. Procedura
konfiguracji opisana w tej sekcji dotyczy wersji Elasticsearch
7.X. W przypadku użycia wcześniejszej lub późniejszej wersji Elasticsearch
niektóre funkcje mogą nie działać poprawnie.

::: notewarning
 Jeśli wszystkie dane historyczne są przechowywane w Elasticsearch,
trendy **nie** są obliczane ani przechowywane w bazie danych. Bez obliczonych i 
przechowywanych trendów, może być konieczne wydłużenie okresu przechowywania 
historii.
:::

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

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

Aby zapewnić poprawną komunikację między wszystkimi zaangażowanymi elementami, upewnij się,
że plik konfiguracyjny serwera oraz parametry pliku konfiguracyjnego frontendu są
prawidłowo skonfigurowane.

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

[comment]: # ({293ef64c-293ef64c})
##### Serwer i frontend Zabbix

Wersja robocza pliku konfiguracyjnego serwera Zabbix z parametrami do zaktualizowania:

    ### Option: HistoryStorageURL
    # History storage HTTP[S] URL.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageURL= 
    ### Option: HistoryStorageTypes
    # Comma separated list of value types to be sent to the history storage.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageTypes=uint,dbl,str,log,text

Przykładowe wartości parametrów do uzupełnienia pliku konfiguracyjnego serwera 
Zabbix:

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

Ta konfiguracja zmusza serwer Zabbix do przechowywania wartości historycznych
typów numerycznych w odpowiedniej bazie danych i danych tekstowych w 
Elasticsearch.

Elasticsearch obsługuje następujące typy pozycji:

    uint,dbl,str,log,text

Wyjaśnienie obsługiwanych typów pozycji:

|   |   |   |
|---|---|---|
|**Typ wartości pozycji**|**Tabela bazy danych**|**Typ Elasticsearch**|
|Liczba (całkowita bez znaku)|history\_uint|uint|
|Liczba (zmiennoprzecinkowa)|history|dbl|
|Znak|history\_str|str|
|Log|history\_log|log|
|Tekst|history\_text|text|

Wersja robocza pliku konfiguracyjnego frontendu Zabbix (`conf/zabbix.conf.php`) z parametrami do zaktualizowania:

    // Adres URL Elasticsearch (może być łańcuchem znaków, jeśli ten sam adres URL jest używany dla wszystkich typów).
    $HISTORY['url']   = [
          'uint' => 'http://localhost:9200',
          'text' => 'http://localhost:9200'
    ];
    // Typy wartości przechowywane w Elasticsearch.
    $HISTORY['types'] = ['uint', 'text'];

Przykładowe wartości parametrów do uzupełnienia pliku konfiguracyjnego frontendu Zabbix:

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

Ta konfiguracja zmusza do przechowywania wartości historycznych `Tekst`, `Znak` i `Log` w Elasticsearch.

Konieczne jest również zrobienie $HISTORY globalnym w pliku `conf/zabbix.conf.php`, aby 
zapewnić prawidłowe działanie całości (zobacz 
`conf/zabbix.conf.php.example` jak to zrobić):

    // Plik konfiguracyjny interfejsu Zabbix.
    global $DB, $HISTORY;

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

[comment]: # ({e9a9c5bd-e9a9c5bd})
##### Instalacja Elasticsearcha i tworzenie mapowania

Ostatnie dwa kroki, aby wszystko zadziałało, to instalacja samego Elasticsearch 
oraz proces tworzenia mapowania.

Aby zainstalować Elasticsearch, proszę odnieść się do [przewodnika instalacyjnego 
Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html).

::: noteclassic
Mapowanie to struktura danych w Elasticsearch (podobna do 
tabeli w bazie danych). Mapowanie dla wszystkich typów danych historycznych jest dostępne 
tutaj: `database/elasticsearch/elasticsearch.map`.
:::

::: notewarning
Utworzenie mapowania jest obowiązkowe. Niektóre funkcjonalności 
mogą nie działać poprawnie, jeśli mapowanie nie zostanie utworzone zgodnie z 
instrukcją.
:::

Aby utworzyć mapowanie dla typu `text`, wyślij następujące żądanie do 
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"
         }
      }
   }
}'
```

Podobne żądanie należy wykonać w celu utworzenia mapowania dla wartości 
historycznych typu `Character` oraz `Log` z odpowiednią korektą typu.

::: noteclassic
Aby pracować z Elasticsearch, proszę odnieść się do [strony 
wymagań](/manual/installation/requirements#server) po dodatkowe 
informacje.
:::

::: noteclassic
[Proces porządkowania](/manual/installation/requirements?s[]=housekeeper) 
nie usuwa żadnych danych z Elasticsearcha.
:::

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

[comment]: # ({8451a0a2-8451a0a2})
#### Przechowywanie danych historycznych w wielu indeksach opartych na dacie

Ta sekcja opisuje dodatkowe kroki wymagane do pracy z pipeline 
i węzłami ingest.

Aby rozpocząć, należy utworzyć szablony dla indeksów.

Poniższy przykład przedstawia żądanie utworzenia szablonu dla typu uint:

``` {.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"
         }
      }
   }
}'
```

Aby utworzyć inne szablony, użytkownik powinien zmienić adres URL (ostatnia część to 
nazwa szablonu), zmienić pole `"index_patterns"` tak, aby pasowało do nazwy indeksu, 
oraz ustawić poprawne mapowanie, które można wziąć z 
`database/elasticsearch/elasticsearch.map`.

Na przykład, następujące polecenie może być użyte do utworzenia szablonu dla 
indeksu tekstowego:

``` {.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"
         }
      }
   }
}'
```

Jest to konieczne, aby umożliwić Elasticsearch ustawienie poprawnego mapowania dla automatycznie 
tworzonych indeksów. Następnie należy utworzyć definicję 
pipeline. Pipeline jest pewnego rodzaju przetwarzaniem danych przed 
umieszczeniem ich w indeksach. Poniższe polecenie może być użyte do utworzenia 
pipeline dla indeksu uint:

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

Użytkownik może zmienić parametr zaokrąglenia ("date\_rounding"), aby ustawić 
określony okres rotacji indeksu. Aby utworzyć inne pipeline, użytkownik powinien 
zmienić adres URL (ostatnia część to nazwa pipeline) oraz zmienić 
pole "index\_name\_prefix" tak, aby pasowało do nazwy indeksu.

Zobacz także [dokumentację 
Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/master/date-index-name-processor.html).

Dodatkowo, przechowywanie danych historycznych w wielu indeksach opartych na dacie powinno 
być również włączone w nowym parametrze w konfiguracji serwera Zabbix:

    ### 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]: # ({5c4a5e3c-5c4a5e3c})
#### Rozwiązywanie problemów

Następujące kroki mogą pomóc Ci w rozwiązywaniu problemów z 
konfiguracją Elasticsearch:

1.  Sprawdź, czy mapowanie jest poprawne (żądanie GET do wymaganego adresu URL
    indeksu, na przykład `http://localhost:9200/uint`).
2.  Sprawdź, czy shard nie znajdują się w stanie błędu (ponowne uruchomienie Elasticsearch
    powinno pomóc).
3.  Sprawdź konfigurację Elasticsearch. Konfiguracja powinna umożliwiać
    dostęp z hosta frontendu Zabbix oraz z hosta serwera Zabbix.
4.  Sprawdź logi Elasticsearch.

Jeśli nadal napotykasz problemy z instalacją, proszę 
utwórz raport o błędzie zawierający wszystkie informacje z tego listy 
(mapowanie, dzienniki błędów, konfiguracja, wersja, itp.).

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