Как отправлять данные
Прежде чем отправлять данные, создайте метрику вручную в интерфейсе StatsHouse.
Не отправляйте данные в чужие метрики — вы можете испортить чьи-то данные.
С использованием клиентских библиотек
Мы рекомендуем инструментировать код приложений с помощью клиентских библиотек StatsHouse — они помогают отправлять данные в правильном формате. Вот репозитории готовых библиотек:
Для использования StatsHouse с nginx есть отдельный модуль.
Ниже показаны примеры кода. Чтобы установить нужную библиотеку, следуйте рекомендациям из соответствующего файла README.
- C++
- Python
- Go
- PHP
- Java
#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;
}
import statshouse
statshouse.value("my_value_metric", {"subsystem": "foo", "protocol": "bar"}, 42.5)
To be provided later
To be provided later
To be provided later
"Что делать, если нет библиотеки для нужного мне языка?"
Лучше всего отправить нам запрос на 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
Пример такого использования приведён в Кратком руководстве.
Мы настоятельно рекомендуем использовать клиентские библиотеки StatsHouse.
Клиентские библиотеки агрегируют данные перед отправкой. Агрегация предотвращает потерю данных. Можно не использовать библиотеку, а просто создать сокет, подготовить JSON-файл и отправить данные — но только если у вас не очень много данных.
StatsHouse отправляет данные по UDP. Если отправлять датаграмму на каждое событие, а событий слишком много, буфер UDP-сокета может переполниться, и никто этого не заметит.
Если вы не используете клиентскую библиотеку, ваши неагрегированные данные будут поступать в агент, и он всё равно будет их агрегировать.