Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Как использовать

Использование Elasticsearch для временных рядов

Elasticsearch предоставляет возможности для хранения, управления и поиска временных рядов данных, таких как журналы и метрики. После добавления данных в Elasticsearch вы можете анализировать и визуализировать их с помощью Kibana и других функций Elastic Stack.

Настройка уровней данных

Функция ILM Elasticsearch использует уровни данных для автоматического перемещения устаревших данных на узлы с более дешёвым оборудованием по мере их старения. Это помогает улучшить производительность и снизить затраты на хранение.

Требуются уровни «горячий» и «контент». Уровни «тёплый», «холодный» и «замороженный» являются необязательными.

Используйте высокопроизводительные узлы в уровнях «горячий» и «тёплый» для более быстрого индексирования и поиска последних данных. Используйте медленные и более дешёвые узлы в уровнях «холодный» и «замороженный», чтобы снизить затраты.

Уровень «контент» обычно не используется для временных рядов данных. Однако он требуется для создания системных индексов и других индексов, которые не являются частью потока данных.

Шаги по настройке уровней данных различаются в зависимости от типа вашего развертывания:

  1. Войдите в Консоль службы Elasticsearch.
  2. Добавьте или выберите своё развертывание на главной странице службы Elasticsearch или на странице развертываний.
  3. В меню развертывания выберите Изменить развертывание.
  4. Чтобы включить уровень данных, нажмите Добавить емкость.

Включить автоматическое масштабирование

Автоматическое масштабирование автоматически регулирует емкость вашего развертывания для удовлетворения потребностей в хранении. Чтобы включить автоматическое масштабирование, выберите Автомасштабировать это развертывание на странице Изменить развертывание. Автоматическое масштабирование доступно только для службы Elasticsearch.

Чтобы назначить узел уровню данных, добавьте соответствующую роль узла в файл elasticsearch.yml узла. Изменение ролей существующего узла требует поэтапной перезагрузки.

# Content tier
node.roles: [ data_content ]

# Hot tier
node.roles: [ data_hot ]

# Warm tier
node.roles: [ data_warm ]

# Cold tier
node.roles: [ data_cold ]

# Frozen tier
node.roles: [ data_frozen ]

Рекомендуется использовать выделенные узлы в уровне «замороженный». При необходимости вы можете назначить другие узлы на несколько уровней.

node.roles: [ data_content, data_hot, data_warm ]

Назначьте узлам любые другие необходимые роли для вашего кластера. Например, небольшой кластер может иметь узлы с несколькими ролями.

node.roles: [ master, ingest, ml, data_hot, transform ]

Зарегистрировать хранилище снимков

Уровни «холодный» и «замороженный» могут использовать поисковые снимки для снижения локальных затрат на хранение.

Для использования поисковых снимков необходимо зарегистрировать поддерживаемое хранилище снимков. Шаги по регистрации этого хранилища зависят от типа вашего развертывания и поставщика хранилища:

При создании кластера служба Elasticsearch автоматически регистрирует хранилище по умолчанию found-snapshots. Это хранилище поддерживает поисковые снимки.

Хранилище found-snapshots специфично для вашего кластера. Для использования хранилища по умолчанию другого кластера обратитесь к документации облака по снимкам и восстановлению.

Вы также можете использовать любой из следующих типов пользовательских хранилищ с поисковыми снимками:

  • Google Cloud Storage (GCS)
  • Хранилище Azure Blob
  • Amazon Web Services (AWS)

Используйте любой из следующих типов хранилищ с поисковыми снимками:

  • AWS S3
  • Google Cloud Storage
  • Хранилище Azure Blob
  • Хранилище Hadoop Distributed File Store (HDFS)
  • Общего файловой системы, такие как NFS
  • Только для чтения URL-хранилища

Вы также можете использовать альтернативные реализации этих типов хранилищ, например, MinIO, если они полностью совместимы. Используйте API анализа хранилища, чтобы проанализировать пригодность вашего хранилища для использования с поисковыми снимками.

Создать или изменить политику жизненного цикла индекса

Поток данных хранит ваши данные в нескольких поддерживающих индексах. ILM использует политику жизненного цикла индекса для автоматического перемещения этих индексов по уровням данных.

Если вы используете Fleet или Elastic Agent, отредактируйте одну из встроенных политик жизненного цикла Elasticsearch. Если вы используете пользовательское приложение, создайте собственную политику. В любом случае убедитесь, что ваша политика:

  • Включает фазу для каждого уровня данных, который вы настроите.
  • Вычисляет порог или min_age для перехода фазы с помощью переключения.
  • Использует поисковые снимки в фазах «холодный» и «замороженный», если требуется.
  • Включает фазу удаления, если необходимо.

Fleet и Elastic Agent используют следующие встроенные политики жизненного цикла:

  • logs
  • metrics
  • synthetics

Вы можете настроить эти политики в зависимости от требований к производительности, отказоустойчивости и сохранению.

Для изменения политики в Kibana откройте главное меню и перейдите к Управление стеком > Политики жизненного цикла индексов. Нажмите на политику, которую вы хотите изменить.

Вы также можете использовать API обновления политики жизненного цикла.

PUT _ilm/policy/logs
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_primary_shard_size": "50gb"
          }
        }
      },
      "warm": {
        "min_age": "30d",
        "actions": {
          "shrink": {
            "number_of_shards": 1
          },
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "cold": {
        "min_age": "60d",
        "actions": {
          "searchable_snapshot": {
            "snapshot_repository": "found-snapshots"
          }
        }
      },
      "frozen": {
        "min_age": "90d",
        "actions": {
          "searchable_snapshot": {
            "snapshot_repository": "found-snapshots"
          }
        }
      },
      "delete": {
        "min_age": "735d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

Чтобы создать политику в Kibana, откройте главное меню и перейдите к Управление стеком > Политики жизненного цикла индексов. Нажмите Создать политику.

Вы также можете использовать API обновления политики жизненного цикла.

PUT _ilm/policy/my-lifecycle-policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_primary_shard_size": "50gb"
          }
        }
      },
      "warm": {
        "min_age": "30d",
        "actions": {
          "shrink": {
            "number_of_shards": 1
          },
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "cold": {
        "min_age": "60d",
        "actions": {
          "searchable_snapshot": {
            "snapshot_repository": "found-snapshots"
          }
        }
      },
      "frozen": {
        "min_age": "90d",
        "actions": {
          "searchable_snapshot": {
            "snapshot_repository": "found-snapshots"
          }
        }
      },
      "delete": {
        "min_age": "735d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

Создание шаблонов компонентов

Если вы используете Fleet или Elastic Agent, перейдите к Поиск и визуализация данных. Fleet и Elastic Agent используют встроенные шаблоны для создания потоков данных.

Если вы используете пользовательское приложение, вам нужно настроить собственный поток данных. Поток данных требует соответствующего шаблона индекса. В большинстве случаев этот шаблон индекса составляется с использованием одного или нескольких шаблонов компонентов. Обычно используются отдельные шаблоны компонентов для отображения и настроек индекса. Это позволяет повторно использовать шаблоны компонентов в нескольких шаблонах индексов.

При создании шаблонов компонентов включите:

  • date или date_nanos отображение для поля @timestamp. Если вы не укажете отображение, Elasticsearch отобразит поле @timestamp как поле date с параметрами по умолчанию.
  • Вашу политику жизненного цикла в настройке индекса index.lifecycle.name.

Используйте Elastic Common Schema (ECS) при сопоставлении ваших полей. Поля ECS по умолчанию интегрируются с несколькими функциями Elastic Stack.

Если вы не уверены, как сопоставить ваши поля, используйте динамические поля для извлечения полей из неструктурированного содержимого во время поиска. Например, вы можете индексировать сообщение журнала в поле wildcard и впоследствии извлекать IP-адреса и другие данные из этого поля во время поиска.

Чтобы создать шаблон компонента в Kibana, откройте главное меню и перейдите к Управление стеком > Управление индексами. В представлении Шаблоны индексов нажмите Создать шаблон компонента.

Вы также можете использовать API создания шаблона компонента.

# Creates a component template for mappings
PUT _component_template/my-mappings
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date",
          "format": "date_optional_time||epoch_millis"
        },
        "message": {
          "type": "wildcard"
        }
      }
    }
  },
  "_meta": {
    "description": "Mappings for @timestamp and message fields",
    "my-custom-meta-field": "More arbitrary metadata"
  }
}

# Creates a component template for index settings
PUT _component_template/my-settings
{
  "template": {
    "settings": {
      "index.lifecycle.name": "my-lifecycle-policy"
    }
  },
  "_meta": {
    "description": "Settings for ILM",
    "my-custom-meta-field": "More arbitrary metadata"
  }
}

Создать шаблон индекса

Используйте шаблоны компонентов для создания шаблона индекса. Укажите:

  • Один или несколько шаблонов индексов, соответствующих имени потока данных. Рекомендуется использовать нашу схему именования потоков данных.
  • Что шаблон поддерживает потоки данных.
  • Любые шаблоны компонентов, содержащие ваши отображения и настройки индекса.
  • Приоритет выше, чем 200, чтобы избежать конфликтов с встроенными шаблонами. См. Избегайте конфликтов шаблонов индексов.

Чтобы создать шаблон индекса в Kibana, откройте главное меню и перейдите к Управление стеком > Управление индексами. В представлении Шаблоны индексов нажмите Создать шаблон.

Вы также можете использовать API создания шаблона индекса. Включите объект data_stream, чтобы включить потоки данных.

PUT _index_template/my-index-template
{
  "index_patterns": ["my-data-stream*"],
  "data_stream": { },
  "composed_of": [ "my-mappings", "my-settings" ],
  "priority": 500,
  "_meta": {
    "description": "Template for my time series data",
    "my-custom-meta-field": "More arbitrary metadata"
  }
}

Добавление данных в поток данных

Запросы индексирования добавляют документы в поток данных. Эти запросы должны использовать op_type типа create. Документы должны содержать поле @timestamp.

Для автоматического создания потока данных отправьте запрос индексирования, который направлен на имя потока. Это имя должно соответствовать одному из шаблонов индекса вашего шаблона индекса.

PUT my-data-stream/_bulk
{ "create":{ } }
{ "@timestamp": "2099-05-06T16:21:15.000Z", "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736" }
{ "create":{ } }
{ "@timestamp": "2099-05-06T16:25:42.000Z", "message": "192.0.2.255 - - [06/May/2099:16:25:42 +0000] \"GET /favicon.ico HTTP/1.0\" 200 3638" }

POST my-data-stream/_doc
{
  "@timestamp": "2099-05-06T16:21:15.000Z",
  "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
}

Поиск и визуализация данных

Чтобы исследовать и искать ваши данные в Kibana, откройте главное меню и выберите Обзор. См. документацию Kibana по обзору.

Используйте функцию Панель мониторинга Kibana для визуализации ваших данных в виде диаграммы, таблицы, карты и многое другое. См. документацию Kibana по панели мониторинга.

Вы также можете искать и агрегировать ваши данные с помощью API поиска. Используйте динамические поля и шаблоны Grok для динамического извлечения данных из сообщений журналов и другого неструктурированного содержимого во время поиска.

GET my-data-stream/_search
{
  "runtime_mappings": {
    "source.ip": {
      "type": "ip",
      "script": """
        String sourceip=grok('%{IPORHOST:sourceip} .*').extract(doc[ "message" ].value)?.sourceip;
        if (sourceip != null) emit(sourceip);
      """
    }
  },
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "@timestamp": {
              "gte": "now-1d/d",
              "lt": "now/d"
            }
          }
        },
        {
          "range": {
            "source.ip": {
              "gte": "192.0.2.0",
              "lte": "192.0.2.255"
            }
          }
        }
      ]
    }
  },
  "fields": [
    "*"
  ],
  "_source": false,
  "sort": [
    {
      "@timestamp": "desc"
    },
    {
      "source.ip": "desc"
    }
  ]
}

По умолчанию поисковые запросы Elasticsearch являются синхронными. Поиски по замороженным данным, большим временным диапазонам или большим наборам данных могут занимать больше времени. Используйте API асинхронного поиска для выполнения поисков в фоновом режиме. Для получения дополнительных параметров поиска см. Поиск ваших данных.

POST my-data-stream/_async_search
{
  "runtime_mappings": {
    "source.ip": {
      "type": "ip",
      "script": """
        String sourceip=grok('%{IPORHOST:sourceip} .*').extract(doc[ "message" ].value)?.sourceip;
        if (sourceip != null) emit(sourceip);
      """
    }
  },
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "@timestamp": {
              "gte": "now-2y/d",
              "lt": "now/d"
            }
          }
        },
        {
          "range": {
            "source.ip": {
              "gte": "192.0.2.0",
              "lte": "192.0.2.255"
            }
          }
        }
      ]
    }
  },
  "fields": [
    "*"
  ],
  "_source": false,
  "sort": [
    {
      "@timestamp": "desc"
    },
    {
      "source.ip": "desc"
    }
  ]
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/use-elasticsearch-for-time-series-data.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API