6 Konfiguracja Elasticsearch
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.
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.
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.
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;
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.
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 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:
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.
Aby pracować z Elasticsearch, proszę odnieść się do strony wymagań po dodatkowe informacje.
Proces porządkowania nie usuwa żadnych danych z Elasticsearcha.
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:
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:
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:
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.
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
Następujące kroki mogą pomóc Ci w rozwiązywaniu 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 shard nie znajdują się w stanie błędu (ponowne uruchomienie Elasticsearch powinno pomóc).
- Sprawdź konfigurację Elasticsearch. Konfiguracja powinna umożliwiać dostęp z hosta frontendu Zabbix oraz z hosta serwera Zabbix.
- 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.).