Spec-Zone.ru › OpenTSDB

HTTP API

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

Обзор

HTTP API имеет RESTful характер, но предоставляет альтернативный доступ через различные переопределения, поскольку не все клиенты могут придерживаться строгого протокола REST. По умолчанию обмен данными происходит через JSON, хотя через запрос можно получить доступ к подключаемым formatters для отправки или получения данных в разных форматах. Стандартные HTTP-коды ответов используются для всех возвращаемых результатов, а ошибки возвращаются как содержимое с использованием правильного формата.

Версии 1.X до 2.x

OpenTSDB 1.x имел простой HTTP API, который предоставлял доступ к общему поведению, такому как запросы данных, автозаполнение запросов и запросы статических файлов. OpenTSDB 2.0 представляет новый формализованный API, как документировано здесь. API 1.0 все еще доступен, хотя большинство вызовов устарели и могут быть удалены в версии 3. Все вызовы API 2.0 начинаются с /api/.

Сериализаторы

2.0 вводит подключаемые сериализаторы, которые позволяют парсить пользовательский ввод и возвращать результаты в различных форматах, таких как XML или JSON. Сериализаторы применяются только к вызовам API 2.0, все вызовы 1.0 ведут себя так же, как и раньше. Для получения подробной информации о сериализаторах и поддерживаемых вариантах, пожалуйста, обратитесь к HTTP Serializers

Все вызовы API используют сериализатор JSON по умолчанию, если не указано иное в параметрах запроса или Content-Type заголовке. Для переопределения:

  • Параметр запроса - Укажите параметр, например, serializer=<serializer_name> , где <serializer_name> - жестко заданное имя сериализатора, как показано в /api/serializers serializer поле вывода.

    Предупреждение

    Если не найдено сериализатора, соответствующего значению <serializer_name>, запрос вернет ошибку вместо дальнейшей обработки.

  • Content-Type - Если параметр запроса не указан, TSD проанализирует Content-Type заголовок из HTTP-запроса. Каждый сериализатор может предоставить тип содержимого, и если он совпадает с входящим запросом, будет использован соответствующий сериализатор. Если сериализатор не найден, соответствующий типу содержимого, будет использован сериализатор по умолчанию.

  • По умолчанию - Если параметр запроса не задан или тип содержимого отсутствует или не совпадает, будет использован сериализатор JSON по умолчанию.

Документация API будет отображать запросы и ответы с использованием сериализатора JSON. См. документацию плагина для получения информации о том, как сериализаторы изменяют поведение.

Примечание

Спецификация JSON указывает, что поля могут появляться в любом порядке, поэтому не предполагайте, что порядок в приведенных примерах будет сохранен. Массивы могут быть отсортированы, и, если это так, это будет задокументировано.

Аутентификация/Разрешения

На данный момент OpenTSDB не имеет системы аутентификации и управления доступом. Поэтому аутентификация не требуется при доступе к API. Если вы хотите ограничить доступ к OpenTSDB, используйте сетевые ACL или брандмауэры для блокирования доступа. Не рекомендуется запускать OpenTSDB на компьютере с общедоступным IP-адресом.

Коды ответов

Каждый запрос будет возвращен со стандартным HTTP-кодом ответа. Большинство ответов будут содержать содержимое, в частности коды ошибок, которые будут включать подробности о возникшей проблеме в теле. К успешным кодам ответов API относятся:

Код Описание
200 Запрос успешно выполнен
204 Сервер успешно завершил запрос, но не возвращает содержимое в теле. Это используется в первую очередь для хранения точек данных, так как нет необходимости возвращать данные вызывающему объекту
301 Может быть использован в случае, если вызов API был перенесен или должен быть перенаправлен на другой сервер

Общие коды ответов об ошибках включают:

Код Описание
400 Предоставленная пользователем API информация, через параметр запроса или данные содержимого, была ошибочной или отсутствовала. Обычно это включает информацию в теле ошибки о том, какой параметр вызвал проблему. Исправьте данные и повторите попытку.
404 Запрашиваемая конечная точка или файл не найден. Обычно это связано с конечной точкой статических файлов.
405 Запрашиваемый глагол или метод не разрешен. Пожалуйста, обратитесь к документации конечной точки, которую вы пытаетесь открыть
406 Запрос не смог сгенерировать ответ в указанном формате. Например, если вы запросите PNG-файл для logs конечной точки, вы получите ответ 406, так как записи журналов нельзя (легко) преобразовать в изображение PNG
408 Запрос истек по времени. Это может быть связано с истечением времени ожидания при получении данных из базовой системы хранения или другими проблемами
413 Результаты, возвращенные запросом, могут быть слишком большими для буферов сервера. Это может произойти, если вы запрашиваете много сырых данных из OpenTSDB. В таких случаях разбейте ваш запрос на более мелкие запросы и выполните каждый по отдельности
500 Произошла внутренняя ошибка в OpenTSDB. Убедитесь, что все системы, от которых зависит OpenTSDB, доступны, и проверьте список ошибок для поиска проблем
501 Запрашиваемая функция еще не реализована. Это может появиться при использовании форматеров или при вызове методов, зависящих от плагинов
503 Произошла временная перегрузка. Проверьте с другими пользователями/приложениями, взаимодействующими с OpenTSDB, и определите, нужно ли уменьшить запросы или масштабировать вашу систему.

Ошибки

Если произойдет ошибка, API вернет ответ с объектом ошибки, отформатированным в соответствии с запрошенным типом ответа. Поля объекта ошибки включают:

Имя поля Тип данных Всегда присутствует Описание Пример
код Целое число Да HTTP-код состояния 400
сообщение Строка Да Дескриптивное сообщение об ошибке о том, что пошло не так Не хватает обязательного параметра
подробности Строка Необязательно Подробности об ошибке, часто стек вызовов Отсутствует значение: тип
стек Строка Необязательно JAVA-стек вызовов, описывающий место, где произошла ошибка. Это можно отключить с помощью параметра конфигурации tsd.http.show_stack_trace. По умолчанию для TSD отображается стек вызовов. См. ниже

Все ошибки будут возвращены с допустимым HTTP-кодом ошибки и телом содержимого с подробными сведениями об ошибке. По умолчанию форматер возвращает сообщения об ошибках в формате JSON с типом содержимого application/json. Если был запрошен другой форматер, вывод может отличаться. См. документацию форматера для получения подробной информации.

Пример результата ошибки

{
  "error": {
    "code": 400,
    "message": "Missing parameter <code>type</code>",
    "trace": "net.opentsdb.tsd.BadRequestException: Missing parameter <code>type</code>\r\n\tat net.opentsdb.tsd.BadRequestException.missingParameter(BadRequestException.java:78) ~[bin/:na]\r\n\tat net.opentsdb.tsd.HttpQuery.getRequiredQueryStringParam(HttpQuery.java:250) ~[bin/:na]\r\n\tat net.opentsdb.tsd.SuggestRpc.execute(SuggestRpc.java:63) ~[bin/:na]\r\n\tat net.opentsdb.tsd.RpcHandler.handleHttpQuery(RpcHandler.java:172) [bin/:na]\r\n\tat net.opentsdb.tsd.RpcHandler.messageReceived(RpcHandler.java:120) [bin/:na]\r\n\tat org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75) [netty-3.5.9.Final.jar:na]\r\n\tat org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:565) [netty-3.5.9.Final.jar:na]
    ....\r\n\tat java.lang.Thread.run(Unknown Source) [na:1.6.0_26]\r\n"
  }
}

Обратите внимание, что стек вызовов усечен. Также стек вызовов будет содержать специфичные для системы символы конца строки (в данном случае \r\n для Windows). При отображении для пользователя или записи в журнал убедитесь, что символы \n или \r\n и \r заменены на новые строки и табуляции.

Глаголы

HTTP API имеет RESTful характер, что означает, что он старается придерживаться REST-протокола, используя HTTP-глаголы для определения курса действий. Например, запрос GET должен возвращать только данные, PUT или POST должны изменять данные, а DELETE - удалять их. Документация будет отражать, какие глаголы могут быть использованы на конечной точке и что они делают.

Однако в некоторых ситуациях глаголы, такие как DELETE и PUT, блокируются брандмауэрами, прокси-серверами или не реализованы в клиентах. Кроме того, большинство разработчиков привыкли использовать GET и POST исключительно. Поэтому, хотя OpenTSDB API поддерживает расширенные глаголы, большинство запросов можно выполнить с помощью GET, добавив параметр запроса method_override. Этот параметр позволяет клиентам передавать данные для большинства вызовов API в виде значений параметров запроса вместо содержимого тела. Например, вы можете удалить аннотацию, выполнив GET с параметром запроса /api/annotation?start_time=1369141261&tsuid=010101&method_override=delete. В следующей таблице описывается поведение глаголов и переопределения.

Глагол Описание Переопределение
GET Используется для получения данных из OpenTSDB. Можно указать переопределения для изменения содержимого. Примечание: Запросы через GET могут использовать только параметры запроса; см. примечание ниже. N/A
POST Используется для обновления или создания объекта в OpenTSDB, используя содержимое тела запроса. Будет использоваться форматер для анализа содержимого тела method_override=post
PUT Замена всего объекта в системе предоставленным содержимым method_override=put
DELETE Используется для удаления данных из системы method_override=delete

Если метод не поддерживается для данного вызова API, TSD вернет ошибку 405.

Примечание

Спецификация HTTP указывает, что не должно быть связи между данными, передаваемыми в теле запроса, и URI в запросе GET. Таким образом, OpenTSDB API не анализирует содержимое тела в запросах GET. Однако вы можете указать параметр запроса с данными и переопределением для обновления данных в определенных конечных точках. Но мы рекомендуем использовать POST для любых операций записи данных.

Версии API

API-вызовы OpenTSDB 2.0 имеют версионирование, позволяющее пользователям обновлять систему с гарантированной обратной совместимостью. Для доступа к определенной версии API вы создаете URL, например /api/v<version>/<endpoint> , например /api/v2/suggest. Это даст доступ к версии 2 конечной точки suggest. Версионирование начинается с 1 для OpenTSDB 2.0.0. Запросы к несуществующей версии приведут к обращению к последней версии. Также, если вы не укажете явную версию, например /api/suggest, будет использована последняя версия.

Строка запроса против содержимого тела запроса

Большинство API-конечных точек поддерживают параметры строки запроса, особенно те, которые извлекают данные из системы. Однако из-за сложностей кодирования некоторых символов, особенно Unicode, все конечные точки также поддерживают доступ через содержимое тела POST-запроса с использованием форматеров. По умолчанию используется формат JSON, поэтому клиенты могут использовать свой любимый способ генерации объекта JSON и отправить его в API OpenTSDB через POST запрос. POST запросы обычно предоставляют большую гибкость в предлагаемых полях и полную поддержку Unicode по сравнению со строками запросов.

Сжатые запросы

API может принимать содержимое тела, которое было сжато. Убедитесь, что вы установили заголовок Content-Encoding в gzip и передали двоичные закодированные данные по сети. Это особенно полезно для отправки точек данных на /api/put конечную точку. Пример с использованием curl:

$ gzip -9c clear-32k.json > gzip-32k.json

$ file gzip-32k.json
gzip-32k.json: gzip compressed data, was "clear-32k.json", from Unix, last modified: Thu Jan 16 15:31:55 2014

$ ls -l gzip-32k.json
-rw-r--r-- 1 root root 1666 févr.  4 09:57 gzip-32k.json

$ curl -X POST --data-binary "@gzip-32k.json" --header "Content-Type: application/json" --header "Content-Encoding: gzip" http://mytsdb1:4242/api/put?details
{"errors":[],"failed":0,"success":280}

CORS

OpenTSDB предоставляет простую и предварительную поддержку Cross-Origin Resource Sharing (CORS) запросов. Для включения CORS, вы должны указать либо символ подстановки * , либо список отдельных доменов через запятую в настройке tsd.http.request.cors_domains и перезапустить OpenTSDB. Например, вы можете указать значение * или предоставить список доменов, таких как beeblebrox.com,www.beeblebrox.com,aurtherdent.com. Список доменов нечувствителен к регистру, но должен полностью соответствовать любому значению, отправляемому клиентами.

Когда GET, POST, PUT или DELETE запрос поступает с заголовком Origin , установленным на допустимое имя домена, сервер сравнивает домен с настроенным списком. Если домен появляется в списке или был установлен символ подстановки, сервер добавит заголовки Access-Control-Allow-Origin и Access-Control-Allow-Methods в ответ после завершения обработки. Разрешенные методы всегда будут GET, POST, PUT, DELETE. Они не изменяются в зависимости от конечной точки. Если запрос является предварительным CORS, т.е. используется метод OPTION, ответ будет таким же, но с пустым телом содержимого и кодом состояния 200.

Если домен Origin не совпадает ни с одним доменом в настроенном списке, ответ будет кодом состояния 200 и телом содержимого с ошибкой (см. выше), указывающей на отказ в доступе, независимо от того, был ли запрос предварительным или обычным. Запрос больше не будет обрабатываться.

По умолчанию список tsd.http.request.cors_domains пуст, и CORS отключен. Запросы проходят без добавления специальных заголовков CORS. Если приходит Options запрос, он получит сообщение об ошибке 405.

Примечание

Не полагайтесь на CORS для безопасности. Очень легко подделать домен в запросе HTTP, и OpenTSDB не выполняет обратные DNS-поиски или валидацию доменов. CORS реализован только для упрощения работы JavaScript-разработчиков с API.

Документация

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

Параметры запроса — это список имен полей, которые можно передавать в запросе. Каждая таблица содержит следующую информацию:

  • Имя — имя поля
  • Тип данных — тип данных, которые нужно предоставить. Например, String должно быть текстом, Integer должно быть целым числом (положительным или отрицательным), Float должно быть десятичным числом. Тип данных также может быть сложным объектом, например, массивом или отображением значений или объектов. Если вы видите Present в этом столбце, то просто добавление параметра в строку запроса устанавливает значение в true, фактическое значение параметра игнорируется. Например, /api/put?summary фактически устанавливает summary=true. Если вы запросите /api/put?summary=false, API все равно будет рассматривать запрос как summary=true.
  • Обязательно — требуется ли параметр для успешного запроса. Если параметр обязателен, вы увидите Required, в противном случае — Optional.
  • Описание — подробное описание параметра, включая допустимые значения, если применимо.
  • Значение по умолчанию — значение по умолчанию параметра Optional . Если данные обязательны, это поле будет пустым.
  • QS — можно ли указать параметр через строку запроса, в этом поле будет Yes, в противном случае No, означая, что параметр может быть указан только в теле запроса.
  • RW — описывает, может ли этот параметр привести к обновлению данных, хранящихся в OpenTSDB. Возможные значения в этом столбце:
    • пустое — это означает, что поле используется только для запросов и не обязательно представляет поле в ответе.
    • RO — поле, которое отображается в ответе, но является только для чтения. Переданное вместе с запросом значение не изменит поле вывода.
    • RW или W — поле, которое будет приводить к обновлению данных, хранящихся в системе
  • Пример — пример значения параметра

Устаревший API

См. Устаревший HTTP API

API-конечные точки

  • /s
  • /api/aggregators
  • /api/annotation
  • /api/config
  • /api/dropcaches
  • /api/put
  • /api/rollup
  • /api/query
  • /api/search
  • /api/serializers
  • /api/stats
  • /api/suggest
  • /api/tree
  • /api/uid
  • /api/version

© 2010–2016 The OpenTSDB Authors
Licensed under the GNU LGPLv2.1+ and GPLv3+ licenses.
http://opentsdb.net/docs/build/html/api_http/index.html

Spec-Zone.ru

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