-
Notifications
You must be signed in to change notification settings - Fork 0
Home
- ts - время * 1000000 округленное до масштаба. Например для часового int(время/3600)*3600
- name — имя счетчика
- ag — значения
Пример запроса
{ "jsonrpc":"2.0", "method": "set", "id": 1, "params": { "name":"server~~serice~~script", "ts":123456789000000, "ag":{ "avg":1, "count":2, "perc50":3, "perc80":4, "perc95":5, "perc99":6, "perc100":7, } } }
Пример ответа
{ "jsonrpc":"2.0", "id":1, "result": true }
- если ts=0, то берётся текущее время сервера
- name — единственный обязательный параметр
- cl — набор данных, по которым посчитаны указанные в ag параметры
Пример запроса
{ "jsonrpc":"2.0", "method": "add", "id": 1, "params": { "name":"server~~serice~~script", "ts":123456789000000, "ag":{ "avg":1, "count":2, "perc50":3, "perc80":4, "perc95":5, "perc99":6, "perc100"7, }, "cl":[1,2,3,4] } }
Пример ответа
{ "jsonrpc":"2.0", "id":1, "result": true }
- name - имя удаляемого счетчика
Пример запроса
{ "jsonrpc":"2.0", "method": "del", "id": 1, "params": { "name":"server~~serice~~script" }
Пример ответа
{ "jsonrpc":"2.0", "id":1, "result": true|false }
Команду на мерж надо отправить на 5sec кольцо, на остальные не нужно.
Запрос для объедениения данных счетчиков по имени Парметры:
- ts - время с которого начать мержинг
- src - источник для мержа (имя счетчика)
- dst - куда мержить (имя счетсчика)
- delsrc - удилять источник по операции
Пример запроса
{ "jsonrpc":"2.0", "method": "merge", "id": 1, "params": { "ts": 1234567890000000|0, "src": имя (строка), "dst": имя (строка), "delsrc": true|false } }
Пример ответа: merge
{ "jsonrpc":"2.0", "id":1, "result": true|false }
Думаем сделать 2 варианта:
- get - выгрибаем счетчики для одного имени
- multi_get - выгрибаем счетчики для нескольких имен
@ts@ — это время, начиная с которого нужно получить счётчики, в микросекундах. @limit@ — это не совсем лимит в привычном понимании. Это количество фиксированных точек в заданном масштабе, которые нужно охватить запросом. Пример: масштаб 5 секунд, просим limit=100 точек, начиная с ts=100500. Это значит, что мы просим охватить временной интервал с t1=100500 до t2=100500+1005 (ts+limitscale). Ненулевые значения при этом могут иметь как все 100, так и ни одной точки.
Пример запроса
{ "jsonrpc":"2.0", "method": "get", "id": 1, "params": { "name": "server~~service~~script", "ts": 1234567890000000|0, "offset": число|по умолчанию 0, "limit": чилсо|по умолчанию 3000 } }
Пример ответа: get
{ "jsonrpc":"2.0", "id":1, "result": { "name": "server~~service~~script~~name", "scale": 5000000, "counters": [ [123456789000000, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0], [123456794000000, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0], ... таких элементов будет не больше limit; гарантируется, что не будет нулевых элементов ... ] } }
Пояснение. Формат одного элемента в массиве: [ts, avg, count, perc50, perc80, perc95, perc99, perc100, min, max, lossy]
Ограничение limit&offset применяеются для всего набора имен
{ "jsonrpc":"2.0", "method": "multi_get", "id": 1, "params": { "names": [ "A", "B", "C", ... ], "ts": 1234567890000000|0, "offset": число|по умолчанию 0, "limit": чилсо|по умолчанию 3000 } }
Пример ответа: multi_get
{ "jsonrpc":"2.0", "id":1, "result": { "scale": 5000000, "data": [ { "name": "A", "counters": [ [123456789000000, 1, 2, 3, 4, 5, 6, 7], [123456794000000, 1, 2, 3, 4, 5, 6, 7], ... таких элементов будет не больше limit; гарантируется, что не будет нулевых элементов ... ] }, { "name": "B", "counters": [ [123456789000000, 1, 2, 3, 4, 5, 6, 7], [123456794000000, 1, 2, 3, 4, 5, 6, 7], ... таких элементов будет не больше limit; гарантируется, что не будет нулевых элементов ... ] }, .... ] } }
Пример запроса. После обработки prefix, suffix ограничений запроса по всем значениям имен, имена сортируются, потом накладываются ограничения limit&offset. Например, чтобы выгрести все имена нужно использовать такие параметры: "prefix": "", "suffix": "", "limit": большое число (>400000)
в запросе по умолчанию следующие значения: prefix: "" suffix: "" limit: 10 offset: 0 sortby: "count"
{ "jsonrpc":"2.0", "method": "get_names", "id": 1, "params": { "prefix":"server", "suffix":"~~hitlis:get" "offset": 0, "limit": 100, "sortby": "avg|count|perc50|perc80|perc95|perc99|perc100" } }
Пример ответа
{ "jsonrpc":"2.0", "id":1, "result": { "scale": 5000000, "names_ts": [ { "name": "server~~service~~script~~A", "ts": 123456794000000 }, { "name": "server~~service~~script~~B", "ts": 123456794000000 }, ...... ] } }
"sep": "~~" - значение сепаратора по умолчанию ntype (node type) - дополнительная фильтрация по типу (ветка в дереве или лист, либо оба) для вытаскиваемых данных При указании "leaf|all" можно указать сортировку получаемых имен (sortby). В случае "all" сначала добавляются значения, которые не листья (лексографическая сортировка), потом листья (сортировка по sortby). В конце накладываются ограничения limit&offset
{ "jsonrpc":"2.0", "method": "get_name_tree", "id": 1, "params": { "prefix":"server", "depth": 1, "ntype": "all|branch|leaf" /*это перечисление*/ "sep": "~~", "offset": 0, "limit": 100, "sortby": "count" } }
Пример ответа
{ "jsonrpc":"2.0", "id":1, "result": { "scale": 5000000, "prefix": "server" "branches": [ "service1", "service2", "service3", ...... ] } }
RT демон служит только для отправки счетчиков, делает первичную агрегацию. Сюда стата отправляется с php, далее по цепочке уходит в другие масштабы: rt->ag5s->ag1m->ag1h->ag1d .
@ts@ — в микросекундах.
{ "jsonrpc":"2.0", "method": "multi_add", "id": 1, "params": { "data": [ {"name": "a", ts: 0|123456000000, "cl": [1,2,3,4,5,6,7,8,9,...], "count": 100500}, {"name": "b", ts: 0|123456000000, "cl": [1,2,3,4,5,6,7,8,9,...], "count": 100500}, ... ] } }
Пример ответа
{ "jsonrpc":"2.0", "id":1, "result": true }
@ts@ — в микросекундах.
Пример запроса
{ "jsonrpc":"2.0", "method": "add или set", "id": 1, "params": { "name":"server~~serice~~script", "ts":123456789000000, "count": 100500 "cl":[1,2,3,4] } }
Пример ответа
{ "jsonrpc":"2.0", "id":1, "result": true }
- name - имя удаляемого счетчика
Пример запроса
{ "jsonrpc":"2.0", "method": "del", "id": 1, "params": { "name":"server~~serice~~script" }
Пример ответа
{ "jsonrpc":"2.0", "id":1, "result": true|false }