7 Elasticsearch подешавање

Подршка Elasticsearch-а је експериментална!

Zabbix подржава складиштење историјских података помоћу Elasticsearch-а уместо базе података. Корисници могу да изаберу место складиштења за историју податке између компатибилне базе података и Elasticsearch-а. Подешавање процедура описана у овој секцији је применљива на Elasticsearch верзију 7.X. У случају да се користи ранија или новија верзија Elasticsearch-а, неке функције можда неће радити како је предвиђено.

Ако су сви подаци историје ускладиштени у Elasticsearch-у, трендови се не израчунавају нити чувају у бази података. Без трендова који нису израчунати или сачувани, период складиштења историје ће можда морати да буде продужен.

Конфигурација

Да бисте осигурали правилну комуникацију између свих укључених елемената, уверите се да су конфигурациона датотека сервера и параметри конфигурационе датотеке корисничког интерфејса правилно конфигурисани.

Zabbix сервер и кориснички интерфејс

Нацрт конфигурационе датотеке Zabbix сервера са параметрима које треба ажурирати:

### Опција: 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

Пример вредности параметара за попуњавање конфигурационе датотеке Zabbix сервера са:

HistoryStorageURL=http://test.elasticsearch.lan:9200
       HistoryStorageTypes=str,log,text

Ова конфигурација приморава Zabbix сервер да чува вредности историје нумеричких типова у одговарајућој бази података и податке о историји текста у Elasticsearch-у.

Elasticsearch подржава следеће типове ставки:

uint,dbl,str,log,text

Објашњење подржаног типа ставке:

Item value type Database table Elasticsearch type
Numeric (unsigned) history_uint uint
Numeric (float) history dbl
Character history_str str
Log history_log log
Text history_text text

Конфигурациона датотека Zabbix корисничког интерфејса (conf/zabbix.conf.php) нацрт са параметрима за ажурирање:

// Elasticsearch url (може бити стринг ако се исти url користи за све типове).
       $HISTORY['url']= [
             'uint' => 'http://localhost:9200',
             'text' => 'http://localhost:9200'
       ];
       // Типови вредности сачувани у Elasticsearch-у.
       $HISTORY['types'] = ['uint', 'text'];

Пример вредности параметара за попуњавање конфигурационе датотеке Zabbix корисничког интерфејса са:

$HISTORY['url']= 'http://test.elasticsearch.lan:9200';
       $HISTORY['types'] = ['str', 'text', 'log'];

Ова конфигурација приморава да складиштење вредности историје Text, Character and Log у Elasticsearch-у.

Такође је потребно направити $HISTORY глобалном у conf/zabbix.conf.php да се уверите да све ради како треба (погледајте conf/zabbix.conf.php.example за како то да урадите):

// Zabbix GUI конфигурациона датотека.
       global $DB, $HISTORY;
Инсталирање Еластицсеарцх-а и креирање мапирања

Последња два корака да ствари функционишу су инсталирање Elasticsearch-а и процес креирања мапирања.

Да бисте инсталирали Elasticsearch, погледајте Упутство за инсталирање Elasticsearch-а.

Мапирање је структура података у Elasticsearch-у (слично као табела у бази података). Мапирање за све типове података историје је доступно овде: database/elasticsearch/elasticsearch.map.

Креирање мапирања је обавезно. Неке функционалности биће покварене ако се мапирање не креира у складу са упутством.

Да бисте креирали мапирање за тип text, пошаљите следећи захтев на 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": "date"
                },
                "clock": {
                   "format": "epoch_second",
                   "type": "date"
                },
                "value": {
                   "fields": {
                      "analyzed": {
                         "index": true,
                         "type": "text",
                         "analyzer": "standard"
                      }
                   },
                   "index": false,
                   "type": "text"
                }
             }
          }
       }'

Сличан захтев је потребно извршити за Character и Log креирање мапирања вредности историје уз одговарајуће прилагођавање типа.

За рад са Elasticsearch-ем погледајте Страницу са захтевима за додатне информације.

Одржавање не брише никакве податке са Elasticsearch-а.

Чување података историје у више индекса заснованих на датумима

Ова секција описује додатне кораке потребне за рад са pipeline и ingest чворова.

За почетак, морате креирати шаблоне за индексе.

Следећи пример показује захтев за креирање шаблона за 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"
                }
             }
          }
       }'

Да бисте креирали друге шаблоне, корисник треба да промени URL (последњи део је назив шаблона), промените поље "index_patterns" да одговара називу индекса и да поставите важеће мапирање, које се може узети из database/elasticsearch/elasticsearch.map.

На пример, следећа команда се може користити за креирање шаблона за индекс текста:

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"
                }
             }
          }
       }'

Ово је неопходно да би се омогућило Elasticsearch-у да постави важеће мапирање за индексе који се креирају аутоматски. Затим је потребно направити pipeline дефиницију. Pipeline је нека врста претходне обраде података пре стављања податке у индексе. Следећа команда се може користити за креирање pipeline-а за 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"
                }
             }
          ]
       }'

Корисник може да промени параметар заокруживања ("date_rounding") како би подесио одређени период ротације индекса. Да би креирао друге pipeline-ове, корисник треба променити URL (последњи део је назив pipeline-а) и променити "index_name_prefix" поље које одговара називу индекса.

Погледајте такође Elasticsearch документацију.

Поред тога, требало би да се чувају подаци о историји у више индекса заснованих на датумима треба бити омогућен у новом параметру у конфигурацији 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

Решавање проблема

Следећи кораци могу вам помоћи да решите проблеме са Elasticsearch подешавањем:

  1. Проверите да ли је мапирање исправно (GET захтев за тражену URL адресу индекса попут http://localhost:9200/uint).
  2. Проверите да ли делови нису у неуспешном стању (поновно покретање Elasticsearch-а требало би да помогне).
  3. Проверите конфигурацију Elasticsearch-а. Конфигурација би требало да дозволи приступ са Zabbix домаћина корисничког интерфејса и домаћина Zabbix сервера.
  4. Проверите Elasticsearch логове.

Ако и даље имате проблема са инсталацијом молимо вас да направите извештај о грешци са свим информацијама са ове листе (мапирање, евиденција грешака, конфигурација, верзија, итд.)