O suporte ao Elasticsearch é experimental!
O Zabbix suporta o armazenamento de dados históricos por meio do Elasticsearch em vez de um banco de dados. Os usuários podem escolher o local de armazenamento dos dados históricos entre um banco de dados compatível e o Elasticsearch. O procedimento de configuração descrito nesta seção é aplicável à versão 7.X do Elasticsearch. Caso uma versão anterior ou posterior do Elasticsearch seja utilizada, algumas funcionalidades podem não funcionar conforme o esperado.
1. Se todos os dados históricos forem armazenados no Elasticsearch, as tendências não são calculadas nem armazenadas no banco de dados. Sem tendências calculadas e armazenadas, o período de armazenamento do histórico pode precisar ser estendido.
2. Quando o Elasticsearch é utilizado, as consultas de intervalo que recuperam valores do banco de dados são limitadas pelo timestamp do período de armazenamento dos dados.
Para garantir a comunicação adequada entre todos os elementos envolvidos, certifique-se de os parâmetros do arquivo de configuração do servidor e do arquivo de configuração do frontend são configurado corretamente.
Rascunho do arquivo de configuração do servidor Zabbix com parâmetros a serem atualizados:
### Opção: HistoryStorageURL
# URL de armazenamento de histórico HTTP[S].
#
# Obrigatório: não
# Predefinição:
# HistoryStorageURL=
### Opção: HistoryStorageTypes
# Lista separada por vírgulas de tipos de valores a serem enviados para o armazenamento de histórico.
#
# Obrigatório: não
# Predefinição:
# HistoryStorageTypes=uint,dbl,str,log,textoValores de parâmetro de exemplo para preencher o arquivo de configuração do servidor Zabbix com:
Esta configuração força o Zabbix Server a armazenar valores de histórico de tipos numéricos no banco de dados correspondente e dados de histórico textual em Pesquisa elástica.
O Elasticsearch oferece suporte aos seguintes tipos de itens:
Explicação do tipo de item suportado:
| Tipo de valor de item | Tabela de banco de dados | Tipo de pesquisa elástica |
| Numérico (sem sinal) | história_uint | uint |
| Numérico (flutuante) | histórico | dbl |
| Personagem | história_str | str |
| Log | histórico_log | log |
| Texto | história_texto | texto |
Rascunho do arquivo de configuração de frontend do Zabbix (conf/zabbix.conf.php) com parâmetros a serem atualizados:
// URL do Elasticsearch (pode ser string se o mesmo URL for usado para todos os tipos).
$HISTORY['url'] = [
'uint' => 'http://localhost:9200',
'texto' => 'http://localhost:9200'
];
// Tipos de valor armazenados no Elasticsearch.
$HISTORY['types'] = ['uint', 'text'];Valores de parâmetro de exemplo para preencher o arquivo de configuração do frontend do Zabbix com:
Esta configuração força a armazenar o histórico de Text, Character e Log valores no Elasticsearch.
Também é necessário tornar $HISTORY global em conf/zabbix.conf.php para certifique-se de que tudo está funcionando corretamente (consulte conf/zabbix.conf.php.example para saber como fazer isso):
Os dois últimos passos para fazer tudo funcionar são instalar o Elasticsearch e criar o processo de mapeamento.
Para instalar o Elasticsearch, consulte o guia de instalação do Elasticsearch.
O mapeamento é uma estrutura de dados no Elasticsearch (semelhante a uma tabela em um banco de dados). O mapeamento para todos os tipos de dados de histórico está disponível aqui: database/elasticsearch/elasticsearch.map.
A criação do mapeamento é obrigatória. Algumas funcionalidades não funcionarão se o mapeamento não for criado de acordo com as instruções.
Para criar o mapeamento para o tipo text, envie a seguinte solicitação para o 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"
}
}
}
}'Solicitação semelhante deve ser executada para a criação do mapeamento dos valores de histórico Character e Log, com a devida correção do tipo.
Para trabalhar com o Elasticsearch, consulte os Requisitos para informações adicionais.
O Housekeeper não exclui nenhum dado do Elasticsearch.
Esta seção descreve as etapas adicionais necessárias para trabalhar com pipelines e ingerir nós.
Para começar, você deve criar modelos para índices.
O exemplo a seguir mostra uma solicitação para criar o modelo uint:
curl -X PUT \
http://your-elasticsearch.here:9200/_template/uint_template \
-H 'content-type:application/json' \
-d'{
"index_patterns": [
"uint*"
],
"definições": {
"índice": {
"number_of_replicas": 1,
"number_of_shards": 5
}
},
"mapeamentos": {
"propriedades": {
"item": {
"tipo": "longo"
},
"relógio": {
"format": "epoch_second",
"tipo": "data"
},
"valor": {
"tipo": "longo"
}
}
}
}'Para criar outros modelos, o usuário deve alterar a URL (a última parte é a nome do modelo), altere o campo "index_patterns" para corresponder ao nome do índice e para definir um mapeamento válido, que pode ser obtido de banco de dados/elasticsearch/elasticsearch.map.
Por exemplo, o comando a seguir pode ser usado para criar um modelo para índice de texto:
curl -X PUT \
http://your-elasticsearch.here:9200/_template/text_template \
-H 'content-type:application/json' \
-d'{
"index_patterns": [
"texto*"
],
"definições": {
"índice": {
"number_of_replicas": 1,
"number_of_shards": 5
}
},
"mapeamentos": {
"propriedades": {
"item": {
"tipo": "longo"
},
"relógio": {
"format": "epoch_second",
"tipo": "data"
},
"valor": {
"Campos": {
"analisado": {
"índice": verdadeiro,
"tipo": "texto",
"analisador": "padrão"
}
},
"índice": falso,
"tipo": "texto"
}
}
}
}'Isso é necessário para permitir que o Elasticsearch defina um mapeamento válido para índices criado automaticamente. Em seguida, é necessário criar o pipeline definição. Pipeline é algum tipo de pré-processamento de dados antes colocando dados em índices. O comando a seguir pode ser usado para criar pipeline para o índice uint:
curl -X PUT \
http://your-elasticsearch.here:9200/_ingest/pipeline/uint-pipeline \
-H 'content-type:application/json' \
-d'{
"description": "nomeação diária do índice uint",
"processadores": [
{
"date_index_name": {
"campo": "relógio",
"date_formats": [
"UNIX"
],
"index_name_prefix": "uint-",
"date_rounding": "d"
}
}
]
}'O usuário pode alterar o parâmetro de arredondamento ("date_rounding") para definir um período específico de rotação do índice. Para criar outros pipelines, o usuário deve altere a URL (a última parte é o nome do pipeline) e altere campo "index_name_prefix" para corresponder ao nome do índice.
Veja também Elasticsearch documentação.
Além disso, armazenar dados históricos em vários índices baseados em datas deve também ser habilitado no novo parâmetro na configuração do servidor Zabbix:
### Opção: HistoryStorageDateIndex
# Habilite o pré-processamento de valores de histórico no armazenamento de histórico para armazenar valores em diferentes índices com base na data.
# 0 - desabilitar
#1 - habilitar
#
# Obrigatório: não
# Predefinição:
# HistoryStorageDateIndex=0As etapas a seguir podem ajudá-lo a solucionar problemas com a configuração do Elasticsearch:
http://localhost:9200/uint).LogSlowQueries pode ser usado para verificar consultas lentas no banco de dados Elasticsearch.Se você ainda estiver enfrentando problemas com sua instalação, crie um relatório de bug com todas as informações desta lista (mapeamento, logs de erro, configuração, versão, etc.)