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.
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.
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:
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:
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:
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ć):
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.
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
Następujące kroki mogą pomóc Ci w rozwiązywaniu problemów z konfiguracją Elasticsearch:
http://localhost:9200/uint
).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.).