-
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
}