[comment]: # ({47c25517-4ff8e217})
# 8 Konfiguracja Elasticsearch

::: uwaga ważna
Obsługa Elasticsearch jest eksperymentalna!

:::

Zabbix obsługuje przechowywanie danych historycznych za pomocą Elasticsearch
zamiast bazy danych. Użytkownicy mogą wybrać miejsce przechowywania danych historycznych
pomiędzy kompatybilną bazą danych a Elasticsearch. Procedura
konfiguracji opisana w tej sekcji dotyczy Elasticsearch
wersji 7.X. W przypadku korzystania ze starszej lub nowszej wersji Elasticsearch
niektóre funkcje mogą nie działać zgodnie z przeznaczeniem.

::: uwaga ostrzeżenie
1\. Jeśli wszystkie dane historyczne są przechowywane w Elasticsearch,
trendy **nie** są obliczane ani przechowywane w bazie danych. Bez obliczania i zapisywania trendów okres przechowywania historii może wymagać
wydłużenia.<br>
2\. W przypadku korzystania z Elasticsearch, zapytania o zakresy pobierające wartości z bazy danych są ograniczone znacznikiem czasu okresu przechowywania danych.
:::

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

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

Aby zapewnić prawidłową komunikację między wszystkimi zaangażowanymi elementami, upewnij się, że
parametry pliku konfiguracyjnego serwera i pliku konfiguracyjnego front-endu są
poprawnie skonfigurowane.

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

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

Wersja robocza pliku konfiguracyjnego serwera Zabbix z parametrami do aktualizacji:

### Opcja: HistoryStorageURL
# Adres URL HTTP[S] magazynu historii.
#
# Obowiązkowe: nie
# Domyślne:
# HistoryStorageURL=
### Opcja: HistoryStorageTypes
# Lista typów wartości oddzielonych przecinkami, które mają zostać wysłane do magazynu historii.
#
# Obowiązkowe: nie
# Domyślne:
# HistoryStorageTypes=uint,dbl,str,log,text

Przykładowe wartości parametrów do wypełnienia pliku konfiguracyjnego serwera Zabbix
za pomocą:

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

Ta konfiguracja wymusza na serwerze Zabbix przechowywanie wartości historycznych
typów liczbowych w odpowiedniej bazie danych oraz tekstowych danych historycznych w
Elasticsearch.

Elasticsearch obsługuje następujące typy elementów:

uint, dbl, str, log, text

Objaśnienie obsługiwanych typów elementów:

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

Plik konfiguracyjny front-endu Zabbix (`conf/zabbix.conf.php`) z
parametrami do aktualizacji:

// Adres URL Elasticsearch (może być ciągiem znaków, jeśli dla wszystkich typów używany jest ten sam adres URL).
$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 wypełnienia pliku konfiguracyjnego front-endu Zabbix
tym:

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

Ta konfiguracja wymusza przechowywanie wartości historii `Text`, `Character` i `Log` w Elasticsearch.

Wymagane jest również ustawienie zmiennej $HISTORY jako globalnej w pliku `conf/zabbix.conf.php`, aby
zapewnić prawidłowe działanie (zobacz
`conf/zabbix.conf.php.example`, aby dowiedzieć się, jak to zrobić):

// Plik konfiguracyjny graficznego interfejsu użytkownika Zabbix.
global $DB, $HISTORY;

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

[comment]: # ({000d1106-e9a9c5bd})
##### Instalacja Elasticsearch i tworzenie mapowania

Ostatnie dwa kroki, które należy wykonać, to instalacja samego Elasticsearch
i utworzenie procesu mapowania.

Aby zainstalować Elasticsearch, zapoznaj się z [przewodnikiem instalacji 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 funkcje
mogą nie działać, 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 jest wymagane do utworzenia mapowania wartości historii `Character` i `Log`
z odpowiednią korektą typu.

::: noteclassic
Aby korzystać z Elasticsearch, zapoznaj się z [Wymaganiami](/manual/installation/requirements#serverproxy) w celu uzyskania dodatkowych
informacji.
:::

::: noteclassic
[Housekeeper](/manual/web_interface/frontend_sections/administration/housekeeping)
nie usuwa żadnych danych z Elasticsearch.
:::

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

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

W tej sekcji opisano dodatkowe kroki wymagane do pracy z potokami
i węzłami przetwarzania.

Na początek należy utworzyć szablony dla indeksów.

Poniższy przykład przedstawia żądanie utworzenia szablonu 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 odpowiadało nazwie indeksu
oraz ustawić prawidłowe mapowanie, które można pobrać z pliku
`database/elasticsearch/elasticsearch.map`.

Na przykład, poniższe polecenie może zostać 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 wymagane, aby Elasticsearch mógł ustawić prawidłowe mapowanie dla indeksów
tworzonych automatycznie. Następnie wymagane jest utworzenie definicji
potoku. Potok to swego rodzaju wstępne przetwarzanie danych przed
umieszczeniem ich w indeksach. Do utworzenia
potoku dla indeksu uint można użyć następującego polecenia:

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

Użytkownik może zmienić parametr zaokrąglania („date\_rounding”), aby ustawić
konkretny okres rotacji indeksu. Aby utworzyć inne potoki, użytkownik powinien
zmienić adres URL (ostatnia część to nazwa potoku) i zmienić
pole „index\_name\_prefix”, aby odpowiadało nazwie 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:

### Opcja: HistoryStorageDateIndex
# Włącz wstępne przetwarzanie wartości historycznych w pamięci historycznej, aby przechowywać wartości w różnych indeksach w zależności od daty.
# 0 - wyłącz
# 1 - włącz
#
# Obowiązkowe: nie
# Domyślne:
# HistoryStorageDateIndex=0

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

[comment]: # ({52123e63-5c4a5e3c})
#### Rozwiązywanie problemów

Poniższe kroki mogą pomóc w rozwiązaniu problemów z
konfiguracją Elasticsearch:

1. Sprawdź, czy mapowanie jest poprawne (żądanie GET do wymaganego adresu URL indeksu,
np. `http://localhost:9200/uint`).
2. Sprawdź, czy shardy nie są w stanie awarii (ponowne uruchomienie Elasticsearch
powinno pomóc).
3. Sprawdź konfigurację Elasticsearch. Konfiguracja powinna umożliwiać
dostęp z hosta frontendowego Zabbix i hosta serwera Zabbix.
4. Sprawdź logi Elasticsearch.
5. [``LogSlowQueries``](/manual/appendix/config/zabbix_server#logslowqueries) może być użyte do sprawdzenia wolnych zapytań w bazie danych Elasticsearch.

Jeśli nadal występują problemy z instalacją,
utwórz raport o błędzie ze wszystkimi informacjami z tej listy
(mapowanie, logi błędów, konfiguracja, wersja itp.).

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