6 Configuração do Elasticsearch

::: não importante O suporte do Elasticsearch é experimental!

:::

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 para histórico dados entre um banco de dados compatível e o Elasticsearch. A configuração procedimento descrito nesta seção é aplicável ao Elasticsearch versão 7.X. Caso uma versão anterior ou posterior do Elasticsearch seja usado, algumas funcionalidades podem não funcionar como pretendido.

Se todos os dados do histórico estiverem armazenados no Elasticsearch, as tendências não são calculadas nem armazenadas no banco de dados. Sem tendências calculado e armazenado, o período de armazenamento do histórico pode precisar ser estendido.

Configuração

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.

Servidor e frontend Zabbix

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,texto

Valores de parâmetro de exemplo para preencher o arquivo de configuração do servidor Zabbix com:

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

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:

uint,dbl,str,log,texto

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:

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

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):

// Arquivo de configuração da interface gráfica do Zabbix.
       global $DB, $HISTÓRICO;
Instalando o Elasticsearch e criando mapeamento

As duas etapas finais para fazer as coisas funcionarem são a instalação do Elasticsearch em si e criando o processo de mapeamento.

Para instalar o Elasticsearch, consulte Instalação do Elasticsearch guia.

Mapeamento é uma estrutura de dados no Elasticsearch (semelhante a um tabela em um banco de dados). O mapeamento para todos os tipos de dados do histórico está disponível aqui: database/elasticsearch/elasticsearch.map.

A criação de mapeamento é obrigatória. Algumas funcionalidades será quebrado se o mapeamento não for criado de acordo com o instrução.

Para criar mapeamento para o tipo text, envie a seguinte solicitação para 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 Character e Log criação de mapeamento de valores de histórico com correção de tipo correspondente.

Para trabalhar com o Elasticsearch, consulte Página de Requisito para em formação.

Housekeeper não está excluindo nenhum dado do Elasticsearch..

Armazenando dados do histórico em vários índices baseados em data

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=0

Solução de problemas

As etapas a seguir podem ajudá-lo a solucionar problemas com a configuração do Elasticsearch:

  1. Verifique se o mapeamento está correto (solicitação GET para URL de índice necessário como http://localhost:9200/uint).
  2. Verifique se os fragmentos não estão em estado de falha (a reinicialização do Elasticsearch deve ajudar).
  3. Verifique a configuração do Elasticsearch. A configuração deve permitir o acesso do host Zabbix Frontend e do host do Zabbix Server.
  4. Verifique os logs do Elasticsearch.

Se você ainda está tendo problemas com sua instalação, por favor, crie um relatório de bug com todas as informações desta lista (mapeamento, logs de erros, configuração, versão, etc.)