Перейти к основному содержимому

Как отправлять данные

important

Прежде чем отправлять данные, создайте метрику вручную в интерфейсе StatsHouse.

warning

Не отправляйте данные в чужие метрики — вы можете испортить чьи-то данные.

С использованием клиентских библиотек

Мы рекомендуем инструментировать код приложений с помощью клиентских библиотек StatsHouse — они помогают отправлять данные в правильном формате. Вот репозитории готовых библиотек:

Для использования StatsHouse с nginx есть отдельный модуль.

Ниже показаны примеры кода. Чтобы установить нужную библиотеку, следуйте рекомендациям из соответствующего файла README.

#include "statshouse.hpp"
#include <cstdio>

using namespace statshouse;

Registry r{{
logger: puts // debug output
}};

int main() {
auto v = r.metric("my_value_metric")
.tag("subsystem", "foo")
.tag("protocol", "bar")
.event_metric_ref();

v.write_value(42.5);
return 0;
}

"Что делать, если нет библиотеки для нужного мне языка?"

Лучше всего отправить нам запрос на GitHub.

Вы можете самостоятельно разработать библиотеку для нужного вам языка. Однако в этом случае мы не сможем отвечать за её качество и обеспечить полноценную поддержку.

Если вы всё же решили это сделать, используйте одну из готовых библиотек StatsHouse в качестве модели — изучите модель данных StatsHouse.

"Что делать, если нативная библиотека не предоставляет необходимую функциональность?"

Лучше всего отправить нам запрос на GitHub.

Вы также можете подготовить JSON-файл и отправить данные в StatsHouse, но мы не рекомендуем так делать. Вы не сможете использовать агрегацию и другие встроенные функции StatsHouse.

Без использования клиентских библиотек

Чтобы проверить, как работает отправка данных, можно использовать Netcat:

echo '{"metrics":[{"name":"my_metric","tags":{},"counter":1000}]}' | nc -q 1 -u 127.0.0.1 13337

Пример такого использования приведён в Кратком руководстве.

important

Мы настоятельно рекомендуем использовать клиентские библиотеки StatsHouse.

Клиентские библиотеки агрегируют данные перед отправкой. Агрегация предотвращает потерю данных. Можно не использовать библиотеку, а просто создать сокет, подготовить JSON-файл и отправить данные — но только если у вас не очень много данных.

StatsHouse отправляет данные по UDP. Если отправлять датаграмму на каждое событие, а событий слишком много, буфер UDP-сокета может переполниться, и никто этого не заметит.

Если вы не используете клиентскую библиотеку, ваши неагрегированные данные будут поступать в агент, и он всё равно будет их агрегировать.