- 8 Konfiguracja Elasticsearch
- Adres URL HTTP[S] magazynu historii.
- Obowiązkowe: nie
- Domyślne:
- HistoryStorageURL=
- 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
- Przechowywanie danych historycznych w wielu indeksach opartych na datach
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.
2. W przypadku korzystania z Elasticsearch, zapytania o zakresy pobierające wartości z bazy danych są ograniczone znacznikiem czasu okresu przechowywania danych.
:::
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.
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;
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.
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.
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:
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.
Aby korzystać z Elasticsearch, zapoznaj się z Wymaganiami w celu uzyskania dodatkowych informacji.
Housekeeper nie usuwa żadnych danych z Elasticsearch.
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:
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:
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:
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.
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
Rozwiązywanie problemów
Poniższe kroki mogą pomóc w rozwiązaniu problemów z konfiguracją Elasticsearch:
- Sprawdź, czy mapowanie jest poprawne (żądanie GET do wymaganego adresu URL indeksu,
np.
http://localhost:9200/uint). - Sprawdź, czy shardy nie są w stanie awarii (ponowne uruchomienie Elasticsearch powinno pomóc).
- Sprawdź konfigurację Elasticsearch. Konfiguracja powinna umożliwiać dostęp z hosta frontendowego Zabbix i hosta serwera Zabbix.
- Sprawdź logi Elasticsearch.
LogSlowQueriesmoż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.).