8 Elasticsearch iestatīšana
Zabbix var glabāt vēstures datus Elasticsearch kā alternatīvu relāciju datubāzei.
Elasticsearch atbalsts pašlaik ir eksperimentāls.
Šajā rokasgrāmatā ir aprakstīta Elasticsearch 7.X iestatīšana. Ja izmantojat citu versiju, daļa funkcionalitātes var nedarboties, kā paredzēts.
Iestatīšana ietver Elasticsearch glabātuves atrašanās vietas izveidi katram vērtības tipam, priekšapstrādes iestatīšanu (ja nepieciešams) un Zabbix savienošanu ar jūsu Elasticsearch instanci.
Elasticsearch var glabāt šādus vērtību tipus:
| Vienuma vērtības tips | Datubāzes tabula | Elasticsearch tips |
|---|---|---|
| Skaitlisks (bez zīmes) | history_uint | uint |
| Skaitlisks (peldošā komata) | history | dbl |
| Rakstzīmes | history_str | str |
| Žurnāls | history_log | log |
| Teksts | history_text | text |
| Binārs | history_bin | Zabbix neatbalsta |
| JSON | history_json | json |
Svarīgas piezīmes
- Elasticsearch nepieciešams libcurl. Sīkāku informāciju skatiet prasībās.
- Housekeeper nedzēš datus no Elasticsearch.
- Ja visi vēstures dati tiek glabāti Elasticsearch, tendences datubāzē netiek aprēķinātas vai saglabātas. Apsveriet iespēju pagarināt vēstures glabāšanas periodu.
- Ja tiek izmantots Elasticsearch, diapazona vaicājumus, kas izgūst vērtības no datubāzes, ierobežo datu glabāšanas perioda laikspiedols.
- Elasticsearch netiek atbalstīts Zabbix starpniekserverim; tā vietā, lūdzu, izmantojiet SQLite.
Ja Elasticsearch vēl nav instalēts, pirms turpināt skatiet oficiālo instalēšanas rokasgrāmatu.
Elasticsearch konfigurēšana
Lai glabātu vēstures datus Elasticsearch, jums ir nepieciešams:
- Izveidot indeksu katram vērtības tipam, ko vēlaties glabāt — šeit Elasticsearch glabā datus, līdzīgi kā tabulā relāciju datubāzē.
- Definēt kartējumu katram indeksam — tas nosaka datu struktūru, līdzīgi kā tabulas shēma.
- Iestatīt uzņemšanas konveijeru, lai apstrādātu vērtības pirms glabāšanas (nepieciešams JSON vērtībām un uz datumu balstītiem indeksiem).
Elasticsearch var glabāt datus vienā indeksā katram vērtības tipam vai vairākos uz datumu balstītos indeksos. Abas pieejas ir aprakstītas tālāk.
Vēstures glabāšana vienā indeksā
Šajā pieejā visi vēstures dati konkrētam vērtības tipam tiek ierakstīti vienā indeksā (piemēram, uint vai text).
Lai izveidotu indeksu vērtības tipam Numeric (unsigned), nosūtiet šādu pieprasījumu (ar /uint URL adresē) uz savu Elasticsearch instanci:
curl -X PUT \
http://localhost:9200/uint \
-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": { "type": "long" }
}
}
}'
Elasticsearch atbildēs ar apstiprinājumu, ka indekss ir izveidots:
{"acknowledged": true, "shards_acknowledged": true, "index": "uint"}
Līdzīgi pieprasījumi jānosūta katram papildu vērtības tipam, kuru vēlaties glabāt Elasticsearch.
Kartējumi visiem vērtību tipiem ir pieejami Zabbix avota repozitorijā.
Piemēram, lai izveidotu indeksu vērtības tipam Text:
curl -X PUT \
http://localhost: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"
}
}
}
}'
JSON vērtības tips
Atšķirībā no citiem vērtību tipiem JSON vērtībām pirms saglabāšanas ir nepieciešama papildu apstrāde.
Tālāk norādītais indekss izmanto atsevišķus laukus parsētām un neapstrādātām vērtībām, tāpēc ir nepieciešams ingest pipeline, lai parsētu katru vērtību kā JSON un saglabātu to pareizajā laukā.
Lai izveidotu indeksu JSON vērtības tipam, nosūtiet šādu pieprasījumu (ar /json URL adresē) uz savu Elasticsearch instanci.
curl -X PUT \
http://localhost:9200/json \
-H 'content-type:application/json' \
-d '{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"dynamic": false,
"properties": {
"itemid": { "type": "long" },
"clock": { "type": "date", "format": "epoch_second" },
"ns": { "type": "long" },
"value_parsed": { "type": "flattened" },
"value_raw": { "type": "keyword", "ignore_above": 1000000 }
}
}
}'
Pēc tam izveidojiet ingest pipeline:
curl -X PUT \
http://localhost:9200/_ingest/pipeline/json \
-H 'content-type:application/json' \
-d '{
"processors": [
{
"json": {
"field": "value",
"target_field": "value_parsed",
"ignore_failure": true
}
},
{
"set": {
"if": "ctx.value_parsed == null",
"field": "value_raw",
"value": "{{{ value }}}"
}
}
],
"on_failure": [
{
"set": {
"field": "value_raw",
"value": "{{{ value }}}"
}
}
]
}'
Elasticsearch atbildēs ar apstiprinājumu, ka ingest pipeline tika izveidots:
{"acknowledged": true}
Vēstures glabāšana datumos balstītos indeksos
Tā vietā, lai visus vēstures datus rakstītu vienā indeksā (piemēram, uint), Elasticsearch var sadalīt šos datus vairākos datumos balstītos indeksos (piemēram, uint-2026-01-01, uint-2026-01-02).
Tas atvieglo datu apjoma un glabāšanas ilguma pārvaldību laika gaitā.
Lai to iespējotu, jums ir jāveic tālāk norādītais:
- Izveidojiet indeksa veidni katram vērtību tipam, ko vēlaties glabāt — tā norāda Elasticsearch, kādu kartējumu piemērot, kad tas automātiski izveido jaunu datumā balstītu indeksu.
- Izveidojiet uzņemšanas konveijeru katram vērtību tipam — tas apstrādā katru ienākošo vērtību un novirza to uz pareizo datumā balstīto indeksu.
- Konfigurējiet parametru
HistoryStorageDateIndexZabbix servera konfigurācijas failā — tas iespējo vērtību glabāšanu vairākos datumos balstītos indeksos.
Indeksu veidnes
Lai izveidotu veidni text indeksam, nosūtiet pieprasījumu ar šādu informāciju:
- Izmantojiet
_template/text_templatesava Elasticsearch instances URL. - Izmantojiet
"text*"laukā"index_patterns", lai atbilstu indeksa nosaukumam. - Izmantojiet kartējumu
textvērtības tipam (skatiet kartējumus Zabbix avota repozitorijā).
curl -X PUT \
http://localhost: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"
}
}
}
}'
Veidne json indeksam:
curl -X PUT \
http://localhost:9200/_template/json_template \
-H 'content-type:application/json' \
-d '{
"index_patterns": [ "json*" ],
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"dynamic": false,
"properties": {
"itemid": { "type": "long" },
"clock": { "type": "date", "format": "epoch_second" },
"ns": { "type": "long" },
"value_parsed": { "type": "flattened" },
"value_raw": { "type": "keyword", "ignore_above": 1000000 }
}
}
}'
Uzņemšanas konveijeri
Lai izveidotu uzņemšanas konveijeru text indeksam:
- Izmantojiet
_ingest/pipeline/text-pipelinesavas Elasticsearch instances URL. - Iekļaujiet
date_index_nameprocesoru, lai novirzītu katru vērtību uz pareizo uz datumu balstīto indeksu, pamatojoties uz tās laikspiedolu.
curl -X PUT \
http://localhost:9200/_ingest/pipeline/text-pipeline \
-H 'content-type:application/json' \
-d '{
"description": "daily text index naming",
"processors": [
{
"date_index_name": {
"field": "clock",
"date_formats": ["UNIX"],
"index_name_prefix": "text-",
"date_rounding": "d"
}
}
]
}'
json indeksam konveijeram pirms novirzīšanas uz pareizo indeksu ir arī jāparsē JSON vērtība:
curl -X PUT \
http://localhost:9200/_ingest/pipeline/json-pipeline \
-H 'content-type:application/json' \
-d '{
"description": "daily json index naming"
"processors": [
{
"json": {
"field": "value",
"target_field": "value_parsed",
"ignore_failure": true
}
},
{
"script": {
"source": "if (ctx.value_parsed == null || !(ctx.value_parsed instanceof Map)) { ctx.value_raw = ctx.value; ctx.remove(\"value_parsed\"); }"
}
},
{
"date_index_name": {
"field": "clock",
"date_formats": [ "UNIX" ],
"index_name_prefix": "json-",
"date_rounding": "d"
}
}
]
}'
Zabbix servera konfigurēšana
Jūsu Zabbix servera konfigurācijas failā (zabbix_server.conf) iestatiet šādus parametrus:
HistoryStorageURL- jūsu Elasticsearch instances URL.HistoryStorageTypes- ar komatiem atdalīts vērtību tipu saraksts, ko glabāt Elasticsearch.
Piemēram, lai Elasticsearch glabātu Character, Log, Text un JSON tipa vērtības (vienlaikus saglabājot Numeric vērtības datubāzē):
HistoryStorageURL=http://localhost:9200
HistoryStorageTypes=str,log,text,json
Ja izmantojat uz datumu balstītus indeksus visām Elasticsearch glabātajām vērtībām, iestatiet arī parametru HistoryStorageDateIndex:
HistoryStorageDateIndex=1
Pēc izmaiņu veikšanas restartējiet Zabbix serveri:
systemctl restart zabbix-server
Zabbix lietotāja saskarnes konfigurēšana
Zabbix lietotāja saskarnes konfigurācijas failā (zabbix.conf.php) deklarējiet $HISTORY kā globālu mainīgo un iestatiet tā url un types vērtības atbilstoši servera konfigurācijai:
// Zabbix GUI configuration file.
global $DB, $HISTORY;
$HISTORY['url'] = 'http://localhost:9200';
$HISTORY['types'] = ['str', 'log', 'text', 'json'];
Problēmu novēršana
Tālāk norādītās darbības var palīdzēt novērst problēmas ar jūsu Elasticsearch iestatījumu:
- Pārbaudiet, vai
auto_create_indexir iespējots:
curl -X GET \
"http://localhost:9200/_cluster/settings?include_defaults=true&filter_path=**.auto_create_index"
# {"defaults": {"action": {"auto_create_index": "false"} } }
Lai to iespējotu, nosūtiet šādu pieprasījumu:
curl -X PUT \
http://localhost:9200/_cluster/settings \
-H 'content-type:application/json' \
-d '{
"persistent": {
"action.auto_create_index": "true"
}
}'
# {"acknowledged": true, "persistent": {"action": {"auto_create_index": "true"} }, "transient": {} }
- Pārbaudiet, vai kartējumi, veidnes un ingest cauruļvadi ir pareizi, nosūtot
GETpieprasījumus uz to attiecīgajiem URL:
curl -X GET http://localhost:9200/json
curl -X GET http://localhost:9200/_template/json*
curl -X GET http://localhost:9200/_ingest/pipeline/json*
Saņemtās atbildes varat salīdzināt ar sagaidāmajām atbildēm Elasticsearch API dokumentācijā.
-
Pārbaudiet, vai kādas šķembas nav kļūmes stāvoklī; Elasticsearch restartēšana var palīdzēt to novērst.
-
Pārbaudiet, vai jūsu Elasticsearch konfigurācija atļauj piekļuvi no Zabbix serveris un Zabbix lietotāja saskarne.
-
Izmantojiet Zabbix serveris konfigurācijas parametru
LogSlowQueries, lai noteiktu lēnus vaicājumus. -
Pārbaudiet Elasticsearch žurnālus, vai tajos nav kļūdu.
-
Ja nepieciešams atiestatīt Elasticsearch iestatījumu un sākt no jauna, varat dzēst visus indeksus, veidnes un ingest cauruļvadus:
curl -X DELETE "http://localhost:9200/_all"
curl -X DELETE "http://localhost:9200/_template/*"
curl -X DELETE "http://localhost:9200/_ingest/pipeline/*"