Skip to content
Snippets Groups Projects
Commit 2eaf0756 authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

Добавлено описание протокола сервиса логирования

parent ecd75686
No related branches found
No related tags found
1 merge request!30Добавлено описание протокола сервиса логирования
......@@ -14,10 +14,13 @@ message Filter {
message FindOptions {
repeated string sort = 1;
int32 page_num = 2;
int32 page_size = 3;
int32 page_num = 2; // Deprecated
int32 page_size = 3; // Deprecated
repeated string fields = 4;
bool exclude_fields = 5;
int32 offset = 6;
int32 limit = 7;
}
......
syntax = "proto3";
package log;
import "google/protobuf/timestamp.proto";
import "google/protobuf/any.proto";
import "common/error.proto";
option go_package = "git.perx.ru/perxis/perxis-go/proto/log;log";
// LogLevel задает уровень журналирования.
enum LogLevel {
// INFO - обозначает сообщения с нормальным, операционным уровнем журналирования.
INFO = 0;
// WARNING - обозначает сообщения, которые содержат потенциально вредные ситуации.
WARNING = 1;
// ERROR - обозначает другие ошибки в работе.
ERROR = 2;
// CRITICAL - обозначает серьезные ошибки, из-за которых программа может не выполнять некоторые функции.
CRITICAL = 3;
// FATAL - обозначает очень серьезные ошибки, которые могут привести к остановке приложения.
FATAL = 4;
}
// Caller представляет собой сообщение, которое содержит информацию о вызывающем объекте.
// Каждый вызывающий объект может быть в одном из трех состояний: user, client, service.
message Caller {
oneof caller {
string user = 1; // user отображает учетную запись пользователя, инициировавшего действие.
string client = 2; // client отображает учетную запись клиента, инициировавшего действие.
string service = 3; // service отображает службу, инициировавшую действие.
}
}
// LogEntry представляет собой структуру данных для хранения информации о журнале.
message LogEntry {
// id является уникальным идентификатором каждой записи в журнале.
string id = 1;
// action описывает действие, которое было произведено. Это поле может принимать разные значения в зависимости от сервиса.
// Примеры:
// - item.create
// - item.update
// - organization.create
// - action.run
// - reference.create
string action = 11;
// timestamp указывает на временную метку, указывающую когда было создано данное сообщение.
google.protobuf.Timestamp timestamp = 2;
// level это поле, обозначающее уровень приоритета сообщения в логе.
LogLevel level = 3;
// message это основное сообщение, которое требуется записать в лог.
string message = 4;
// category указывает на категорию события.
// Примеры:
// -
string category = 5;
// component обозначает компонент системы, где произошло данное событие.
// Примеры:
// - Items.Service
// - Items.API
// - Users.Service
// - Users.API
// - Janitor.Service
// - Tasks.Worker
string component = 6;
// organization обозначает организацию, с которой связано данное событие.
// В случае если событие не связано с организацией, то данное поле должно быть пустым.
// В случае если событие связано с организацией, то данное поле должно содержать идентификатор организации который
// проставляется системой логирования автоматически.
string organization = 7;
// space обозначает пространство, которому принадлежит данное событие.
// В случае если событие не связано с пространством, то данное поле должно быть пустым.
string space = 8;
// env обозначает среду в которой произошло данный процесс.
// В случае если событие не связано с средой, то данное поле должно быть пустым.
// По умолчанию среда равна master. При этом в лог записывается идентификатор среды соответсвующий master.
string env = 9;
// collection обозначает коллекцию в которой произошло событие.
// В случае если событие не связано с коллекцией, то данное поле должно быть пустым.
string collection = 10;
// object_type обозначает тип объекта с которым связано событие.
string object_type = 16;
// object_id это идентификатор объекта связанного с событием
string object_id = 17;
// caller содержит информацию о сущности вызвавшей событие
Caller caller = 13;
// attr содержит дополнительные связанные с событием атрибуты в формате Any
// позволяет добавить дополнительные данные в событие
google.protobuf.Any attr = 14;
// tags содержит теги связанные с событием, на усмотрение сервиса
repeated string tags = 15;
}
\ No newline at end of file
syntax = "proto3";
package log;
import "common/common.proto";
import "common/error.proto";
import "log/log.proto";
import "google/protobuf/timestamp.proto";
option go_package = "git.perx.ru/perxis/perxis-go/proto/log;log";
// Сервис для записи активности в системе
// Позволяет всем компонентам системы записывать логи в единое хранилище и получать их оттуда
service LogService {
// Метод для записи логов
rpc Log(stream LogRequest) returns (LogResponse) {}
// Метод для обработки отдельной записи лога
rpc LogEntry(LogRequest) returns (LogResponse) {}
// Метод для поиска логов по заданным параметрам
rpc Find(FindRequest) returns (FindResponse) {}
// Метод для удаления логов по заданным параметрам
rpc Delete(DeleteRequest) returns (DeleteResponse) {}
}
// Запрос для лога
message LogRequest {
// Запись лога
LogEntry entry = 1;
}
// Ответ сервера на запрос лога
message LogResponse {
// Содержит информацию об ошибке, если таковая имеется
common.Error error = 1;
}
message Filter {
// Запрос на поиск логов
// Примеры:
// 1. `timestamp > '2019-01-01' AND timestamp < '2019-01-02'`
// 2. `timestamp > '2019-01-01' AND timestamp < '2019-01-02' AND level = 'error'`
// 3. `component = 'api' AND object.id = '123' AND object.type = 'item' AND context.space = 'spc1'`
// 4. `id in ['1', '2', '3']`
repeated string q = 3; // Список выражений для фильтрации
}
// Запрос на поиск логов
message FindRequest {
// Фильтры для поиска
Filter filter = 2;
// Опции поиска
common.FindOptions options = 3;
}
// Результат поиска
message FindResult {
// Найденные записи лога
repeated LogEntry entries = 1;
// Использовавшийся для поиска фильтр
// Для
common.Filter filter = 2;
// Использовавшиеся для поиска опции
common.FindOptions options = 3;
// Общее количество найденных записей
uint32 total = 4;
}
// Ответ сервера на запрос поиска
message FindResponse {
oneof response {
// Результаты поиска
FindResult result = 1;
// Информация об ошибке, если таковая имеется
common.Error error = 2;
}
}
// Запрос на удаление логов
message DeleteRequest {
// Фильтры для удаления
Filter filter = 2;
}
// Ответ сервера на запрос удаления
message DeleteResponse {
// Информация об ошибке, если таковая имеется
common.Error error = 1;
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment