7 Konfiguracja Elasticsearch
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 między zgodną 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ć zgodnie z oczekiwaniami.
1. Jeśli wszystkie dane historyczne są przechowywane w Elasticsearch, trendy nie są obliczane ani zapisywane w bazie danych. Jeśli trendy nie są obliczane i zapisywane, może być konieczne wydłużenie okresu przechowywania danych historycznych.
2. Gdy używany jest Elasticsearch, zapytania zakresowe 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 frontend są poprawnie skonfigurowane.
Zabbix serwer i frontend
Szkic pliku konfiguracyjnego Zabbix serwer z parametrami do aktualizacji:
### Option: HistoryStorageURL
# HTTP[S] URL magazynu historii.
#
# Mandatory: no
# Default:
# HistoryStorageURL=
### Option: HistoryStorageTypes
# Lista typów wartości rozdzielona przecinkami, które mają być wysyłane do magazynu historii.
#
# Mandatory: no
# Default:
# HistoryStorageTypes=uint,dbl,str,log,text
Przykładowe wartości parametrów do wpisania w pliku konfiguracyjnym Zabbix serwer :
HistoryStorageURL=http://test.elasticsearch.lan:9200
HistoryStorageTypes=str,log,text
Ta konfiguracja wymusza na Zabbix Server przechowywanie wartości historii typów numerycznych w odpowiedniej bazie danych, a danych historycznych 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 |
| Numeryczny (bez znaku) | history_uint | uint |
| Numeryczny (zmiennoprzecinkowy) | history | dbl |
| Znakowy | history_str | str |
| Log | history_log | log |
| Tekst | history_text | text |
Szkic pliku konfiguracyjnego frontend Zabbix (conf/zabbix.conf.php) z
parametrami do aktualizacji:
// 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'];
Przykładowe wartości parametrów do wpisania w pliku konfiguracyjnym frontend Zabbix :
$HISTORY['url'] = 'http://test.elasticsearch.lan:9200';
$HISTORY['types'] = ['str', 'text', 'log'];
Ta konfiguracja wymusza przechowywanie wartości historii typu Text, Character i Log
w Elasticsearch.
W pliku conf/zabbix.conf.php należy również ustawić $HISTORY jako globalną zmienną, aby
zapewnić poprawne działanie wszystkiego (zobacz
conf/zabbix.conf.php.example, aby dowiedzieć się, jak to zrobić):
// Zabbix GUI configuration file.
global $DB, $HISTORY;
Instalowanie Elasticsearch i tworzenie mapowania
Ostatnie dwa kroki, aby wszystko zaczęło działać, to instalacja samego Elasticsearch oraz 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. Część funkcjonalności będzie działać nieprawidłowo, jeśli mapowanie nie zostanie utworzone zgodnie z instrukcją.
Aby utworzyć mapowanie dla typu text, wyślij do Elasticsearch następujące żądanie:
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ć również w celu utworzenia mapowania wartości historycznych Character i Log, z odpowiednią korektą typu.
Aby pracować z Elasticsearch, zapoznaj się z sekcją Wymagania, aby uzyskać dodatkowe informacje.
Housekeeper nie usuwa żadnych danych z Elasticsearch.
Przechowywanie danych historycznych w wielu indeksach opartych na dacie
Ta sekcja opisuje dodatkowe kroki wymagane do pracy z pipeline'ami i węzłami ingest.
Na początek należy utworzyć szablony dla indeksów.
Poniższy przykład pokazuje żą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ć URL (ostatnia część to
nazwa szablonu), zmienić pole "index_patterns", aby pasowało do nazwy indeksu,
oraz ustawić prawidłowe mapowanie, które można pobrać z
database/elasticsearch/elasticsearch.map.
Na przykład poniższe polecenie można wykorzystać 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 umożliwić Elasticsearch ustawienie prawidłowego mapowania dla indeksów tworzonych automatycznie. Następnie należy utworzyć definicję pipeline'u. Pipeline to pewnego rodzaju wstępne przetwarzanie danych przed zapisaniem ich w indeksach. Poniższe polecenie można wykorzystać do utworzenia pipeline'u dla indeksu uint:
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"
}
}
]
}'
Użytkownik może zmienić parametr zaokrąglania ("date_rounding"), aby ustawić określony okres rotacji indeksu. Aby utworzyć inne pipeline'y, użytkownik powinien zmienić URL (ostatnia część to nazwa pipeline'u) oraz zmienić pole "index_name_prefix", aby pasowało do nazwy 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:
### 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
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, na przykład
http://localhost:9200/uint). - Sprawdź, czy fragmenty nie znajdują się w stanie błędu (ponowne uruchomienie Elasticsearch powinno pomóc).
- Sprawdź konfigurację Elasticsearch. Konfiguracja powinna zezwalać na dostęp z hosta frontend Zabbixa oraz hosta serwera Zabbixa.
- Sprawdź logi Elasticsearch.
LogSlowQueriesmożna użyć do sprawdzenia wolnych zapytań w bazie danych Elasticsearch.
Jeśli nadal występują problemy z instalacją, utwórz zgłoszenie błędu, dołączając wszystkie informacje z tej listy (mapowanie, logi błędów, konfiguracja, wersja itp.)