diff --git a/proto/common/common.proto b/proto/common/common.proto
index 3221bdc3319e1da379daf089ca79f180e5b7f140..ac9e243400a7e36028ab9a096aee7af4106455d8 100644
--- a/proto/common/common.proto
+++ b/proto/common/common.proto
@@ -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;
 }
 
 
diff --git a/proto/log/log.proto b/proto/log/log.proto
new file mode 100644
index 0000000000000000000000000000000000000000..44bacd5c2e61073d3f250c02bf03df4ec1d9400f
--- /dev/null
+++ b/proto/log/log.proto
@@ -0,0 +1,102 @@
+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;
+}
+
+// LogEntry представляет собой структуру данных для хранения информации о журнале.
+message LogEntry {
+  // id является уникальным идентификатором каждой записи в журнале.
+  string id = 1;
+
+  // 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;
+  // action описывает действие, которое было произведено. Это поле может принимать разные значения в зависимости от сервиса.
+  // Примеры:
+  // - item.create
+  // - item.update
+  // - organization.create
+  // - action.run
+  // - reference.create
+  string event = 7;
+
+  // object это идентификатор объекта связанного с событием
+  // Идентификатор объекта должен быть в формате GlobalID:
+  // <контекст>/<тип объекта>/<идентификатор объекта>
+  // РіРґРµ:
+  // - <контекст> - представляет собой иднетификатор родительского объекта, если таковой имеется
+  // - <тип объекта> - представляет собой тип объекта, например:
+  //   spaces, envs, cols, items, revs, fields, clients, roles, orgs, users
+  // - <идентификатор объекта> - представляет собой идентификатор объекта
+  //
+  // Примеры:
+  // /spaces/<space_id> - пространство
+  // /spaces/<space_id>/envs/<env_id> - окружение
+  // /spaces/<space_id>/envs/<env_id>/cols/<collection_id> - коллекция
+  // /spaces/<space_id>/cols/<collection_id> - коллекция в окружении "master"
+  // /spaces/<space_id>/envs/<env_id>/schema/<collection_id> - схема коллекции
+  // /spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id> - элемент коллекции
+  // /spaces/<space_id>/cols/<collection_id>/items/<item_id> - элемент коллекции в окружении "master"
+  // /spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>/fields/<field_name> - поле элемента коллекции
+  // /spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>/revs/<rev_id> - ревизия элемента коллекции
+  // /spaces/<space_id>/clients/<client_id> - клиент
+  // /spaces/<space_id>/roles/<role_id> - роль
+  // /orgs/<org_id> - организация
+  // /users/<user_id> - пользователь
+  // /services/<service_id> - сервис
+  string object = 8;
+
+  // caller содержит идентификатор сущности вызвавшей событиe, аналогично полю object
+  //
+  // Примеры:
+  // /users/<user_id> - пользователь
+  // /spaces/<space_id>/clients/<client_id> - клиент
+  // /services/<service_id> - сервис
+  string caller = 9;
+
+  // attr содержит дополнительные связанные с событием атрибуты в формате Any
+  // позволяет добавить дополнительные данные в событие
+  google.protobuf.Any attr = 10;
+
+  // tags содержит теги связанные с событием, на усмотрение сервиса
+  repeated string tags = 11;
+}
\ No newline at end of file
diff --git a/proto/log/log_service.proto b/proto/log/log_service.proto
new file mode 100644
index 0000000000000000000000000000000000000000..80bb537180646babc3d737875884d84a171db6ae
--- /dev/null
+++ b/proto/log/log_service.proto
@@ -0,0 +1,97 @@
+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 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;
+
+  // Использовавшийся для поиска фильтр
+  // Для
+  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