Поддержка Elasticsearch экспериментальная!
Zabbix поддерживает хранение данных истории посредством Elasticsearch вместо базы данных. Теперь пользователям предоставляется возможность выбора места хранения данных истории между совместимой базой данных и Elasticsearch. Процедура настройки, которая рассматривается в этом разделе, применима к Elasticsearch версии 7.x. В случае, если используется более старая или более новая версия Elasticsearch, некоторый функционал может не работать должным образом.
Если все данные истории хранятся в Elasticsearch, данные динамики изменений не рассчитываются и не сохраняются в базе данных. Если данные динамики изменений не рассчитываются и не хранятся, период хранения истории может потребоваться продлить.
Для обеспечения надлежащей связи между всеми задействованными элементами убедитесь, что параметры файла конфигурации сервера и файла конфигурации веб-интерфейса настроены должным образом.
Выдержка из файла конфигурации Zabbix сервера с параметрами, которые необходимо обновить:
### 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
Пример значений параметров, которые требуется указать в файле конфигурации Zabbix сервера:
Подобная конфигурация заставит Zabbix сервер хранить значения истории числовых типов в соответствующей базе данных, а текстовых данных истории в Elasticsearch.
Elasticsearch поддерживает следующие типы элементов данных:
Разъяснение поддерживаемых типов элементов данных:
Тип значения элемента данных | Таблица в базе данных | Тип в Elasticsearch |
Числовой (целое положительное) | history_uint | uint |
Числовой (с плавающей точкой) | history | dbl |
Символ | history_str | str |
Журнал (лог) | history_log | log |
Текст | history_text | text |
Выдержка из файла конфигурации веб-интерфейса Zabbix (conf/zabbix.conf.php
) с параметрами, которые необходимо обновить:
// 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'];
Пример значений параметров, которые требуется указать в файле конфигурации Zabbix веб-интерфейса:
Подобная конфигурация заставит хранить значения истории Текст
, Символ
и Журнал (лог)
в Elasticsearch.
Также требуется сделать $HISTORY глобальной переменной в conf/zabbix.conf.php
, чтобы убедиться, что всё работает должным образом (смотрите файл conf/zabbix.conf.php.example
, как это сделать):
Последними двумя шагами, чтобы все заработало, являются установка самого Elasticsearch и создание процесса сопоставления.
Для установки Elasticsearch, пожалуйста, обратитесь к инструкции по установке Elasticsearch [en].
Сопоставление является структурой данных в 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": "long"
},
"clock": {
"format": "epoch_second",
"type": "date"
},
"value": {
"fields": {
"analyzed": {
"index": true,
"type": "text",
"analyzer": "standard"
}
},
"index": false,
"type": "text"
}
}
}
}'
Похожий запрос требуется выполнить для создания сопоставлений по значениям истории Символ
и Журнал (лог)
с соответствующим исправлением типа.
Чтобы работать с Elasticsearch, пожалуйста, обратитесь к странице требований для получения более подробной информации.
Очистка истории не удаляет никакие данные из Elasticsearch.
В этом разделе описываются дополнительные шаги, которые необходимы для работы с конвейерами и узлами 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
. :
Например, можно использовать следующую команду, чтобы создать шаблон для текстового индекса text:
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 задавать корректные сопоставления для индексов, которые создаются автоматически. Затем это требуется для создания определения конвейера. Конвейер является своего рода предварительной обработкой данных перед тем как поместить их в индексы. Можно использовать следующую команду, чтобы создать конвейер для индекса 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"), чтобы задать спефицичный период ротации индекса. Для создания остальных конвейеров пользователю необходимо изменить URL (последняя часть является именем конвейера) и изменить поле "index_name_prefix", чтобы оно соответствовало имени индекса.
Смотрите также документацию Elasticsearch [en].
Кроме того, запись данных истории в несколько индексов на основе даты необходимо также включить в новом параметре в конфигурации 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:
http://localhost:9200/uint
).Если у вас по-прежнему возникают проблемы с вашей инсталляцией, пожалуйста, создайте отчёт об ошибке со всей информацией из этого списка (сопоставления, журналы ошибок, настройка, версия и так далее).