[comment]: # ({47c25517-4ff8e217})
# 8 Configuração do Elasticsearch

::: noteimportant
 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.

::: notewarning
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.<br>
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.
:::

[comment]: # ({/47c25517-4ff8e217})

[comment]: # ({0b6587bd-0b6587bd})
#### 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.

[comment]: # ({/0b6587bd-0b6587bd})

[comment]: # ({293ef64c-293ef64c})
##### 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;

[comment]: # ({/293ef64c-293ef64c})

[comment]: # ({000d1106-e9a9c5bd})
##### Instalando o Elasticsearch e criando o mapeamento

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](https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html).

::: noteclassic
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`.
:::

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

``` {.java}
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.

::: noteclassic
Para trabalhar com o Elasticsearch, consulte os [Requisitos](/manual/installation/requirements#serverproxy) para informações adicionais.
:::

::: noteclassic
O [Housekeeper](/manual/web_interface/frontend_sections/administration/housekeeping)
não exclui nenhum dado do Elasticsearch.
:::

[comment]: # ({/000d1106-e9a9c5bd})

[comment]: # ({8451a0a2-8451a0a2})
#### 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:

``` {.java}
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:

``` {.java}
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:

``` {.java}
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](https://www.elastic.co/guide/en/elasticsearch/reference/master/date-index-name-processor.html).

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

[comment]: # ({/8451a0a2-8451a0a2})

[comment]: # ({52123e63-5c4a5e3c})
#### 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 a URL do índice necessário, como `http://localhost:9200/uint`).
2. Verifique se os shards não estão em estado de falha (reiniciar o Elasticsearch pode ajudar).
3. Verifique a configuração do Elasticsearch. A configuração deve permitir o acesso a partir do host do frontend do Zabbix e do host do server do Zabbix.
4. Verifique os logs do Elasticsearch.
5. [``LogSlowQueries``](/manual/appendix/config/zabbix_server#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.)

[comment]: # ({/52123e63-5c4a5e3c})
