diff --git a/src/box/box.cc b/src/box/box.cc
index a3c71885ad102c746e47d7f77d9f2d96831f834a..b635f12c58eb1f99be4002690603679f9e4691bc 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -784,7 +784,10 @@ box_check_flightrec(void)
 			cfg_geti64("flightrec_logs_max_msg_size"),
 			cfg_geti("flightrec_logs_log_level"),
 			cfg_getd("flightrec_metrics_interval"),
-			cfg_geti64("flightrec_metrics_period")) != 0)
+			cfg_geti64("flightrec_metrics_period"),
+			cfg_geti64("flightrec_requests_size"),
+			cfg_geti64("flightrec_requests_max_req_size"),
+			cfg_geti64("flightrec_requests_max_res_size")) != 0)
 		diag_raise();
 }
 
diff --git a/src/box/flightrec.h b/src/box/flightrec.h
index 566e7cad7afc6efa9acc99c6520276a3f3c97575..0544e071e7255969a136cfde4d399a1f9f7f3e2a 100644
--- a/src/box/flightrec.h
+++ b/src/box/flightrec.h
@@ -25,7 +25,9 @@ extern "C" {
 static inline void
 flightrec_init(const char *fr_dirname, size_t logs_size,
 	       size_t logs_max_msg_size, int logs_log_level,
-	       double metrics_interval, size_t metrics_period)
+	       double metrics_interval, size_t metrics_period,
+	       size_t requests_size, size_t requests_max_req_size,
+	       size_t requests_max_res_size)
 {
 	(void)fr_dirname;
 	(void)logs_size;
@@ -33,6 +35,9 @@ flightrec_init(const char *fr_dirname, size_t logs_size,
 	(void)logs_log_level;
 	(void)metrics_interval;
 	(void)metrics_period;
+	(void)requests_size;
+	(void)requests_max_req_size;
+	(void)requests_max_res_size;
 	say_error("Flight recorder is not available in this build");
 }
 
@@ -46,16 +51,40 @@ flightrec_free(void)
 static inline int
 flightrec_check_cfg(int64_t logs_size, int64_t logs_max_msg_size,
 		    int logs_log_level, double metrics_interval,
-		    int64_t metrics_period)
+		    int64_t metrics_period, int64_t requests_size,
+		    int64_t requests_max_req_size,
+		    int64_t requests_max_res_size)
 {
 	(void)logs_size;
 	(void)logs_max_msg_size;
 	(void)logs_log_level;
 	(void)metrics_interval;
 	(void)metrics_period;
+	(void)requests_size;
+	(void)requests_max_req_size;
+	(void)requests_max_res_size;
 	return 0;
 }
 
+/** No-op in OS version. */
+static inline void
+flightrec_write_request(char *request_mspack, size_t len)
+{
+	(void)request_mspack;
+	(void)len;
+}
+
+struct obuf;
+struct obuf_svp;
+
+/** No-op in OS version. */
+static inline void
+flightrec_write_response(struct obuf *buf, struct obuf_svp *svp)
+{
+	(void)buf;
+	(void)svp;
+}
+
 #if defined(__cplusplus)
 } /* extern "C" */
 #endif /* defined(__cplusplus) */
diff --git a/src/box/iproto.cc b/src/box/iproto.cc
index 78815938d2f88241658b1cc47daf42f5f4f6d42b..8a457239ad39a70124d7453b31a44edac9296104 100644
--- a/src/box/iproto.cc
+++ b/src/box/iproto.cc
@@ -70,6 +70,7 @@
 #include "assoc.h"
 #include "txn.h"
 #include "on_shutdown.h"
+#include "flightrec.h"
 
 enum {
 	IPROTO_SALT_SIZE = 32,
@@ -1883,6 +1884,7 @@ tx_accept_msg(struct cmsg *m)
 	msg->connection->iproto_thread->tx.requests_in_progress++;
 	rmean_collect(msg->connection->iproto_thread->tx.rmean,
 		      REQUESTS_IN_PROGRESS, 1);
+	flightrec_write_request(msg->p_ibuf->rpos, msg->len);
 	return msg;
 }
 
@@ -1894,7 +1896,9 @@ tx_end_msg(struct iproto_msg *msg, struct obuf_svp *svp)
 		msg->stream->txn = txn_detach();
 	}
 	msg->connection->iproto_thread->tx.requests_in_progress--;
-	(void)svp;
+	/* Log response to the flight recorder. */
+	struct obuf *out = msg->connection->tx.p_obuf;
+	flightrec_write_response(out, svp);
 }
 
 /**
diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua
index 50d0b4f9f167b8128a85c4697960a1f0c3cf4b99..11cc52aff50d0d11d0c11e9e84e9a7181165fc66 100644
--- a/src/box/lua/load_cfg.lua
+++ b/src/box/lua/load_cfg.lua
@@ -79,6 +79,9 @@ local default_cfg = {
     flightrec_logs_log_level = 6,
     flightrec_metrics_interval = 1.0,
     flightrec_metrics_period = 60 * 3,
+    flightrec_requests_size = 10485760,
+    flightrec_requests_max_req_size = 16384,
+    flightrec_requests_max_res_size = 16384,
 
     io_collect_interval = nil,
     readahead           = 16320,
@@ -202,6 +205,9 @@ local template_cfg = {
     flightrec_logs_log_level = 'number',
     flightrec_metrics_interval = 'number',
     flightrec_metrics_period = 'number',
+    flightrec_requests_size = 'number',
+    flightrec_requests_max_req_size = 'number',
+    flightrec_requests_max_res_size = 'number',
 
     io_collect_interval = 'number',
     readahead           = 'number',
diff --git a/src/main.cc b/src/main.cc
index ffef0eb51f3051a4838ce99a8a30ceebcbdfed8c..a424073ed98e6f6378808d8c25ccc8548155b6ee 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -473,7 +473,10 @@ load_cfg(void)
 			       cfg_geti64("flightrec_logs_max_msg_size"),
 			       cfg_geti("flightrec_logs_log_level"),
 			       cfg_getd("flightrec_metrics_interval"),
-			       cfg_geti("flightrec_metrics_period"));
+			       cfg_geti("flightrec_metrics_period"),
+			       cfg_geti("flightrec_requests_size"),
+			       cfg_geti("flightrec_requests_max_req_size"),
+			       cfg_geti("flightrec_requests_max_res_size"));
 	}
 
 	memtx_tx_manager_use_mvcc_engine = cfg_getb("memtx_use_mvcc_engine");
diff --git a/test/app-tap/init_script.result b/test/app-tap/init_script.result
index ad79f6598a8ef62ecb05b96a0dc8a98272247ab3..d987b253d70573a55c8e80b9cb028cbd764ab218 100644
--- a/test/app-tap/init_script.result
+++ b/test/app-tap/init_script.result
@@ -24,6 +24,9 @@ flightrec_logs_max_msg_size:4096
 flightrec_logs_size:10485760
 flightrec_metrics_interval:1
 flightrec_metrics_period:180
+flightrec_requests_max_req_size:16384
+flightrec_requests_max_res_size:16384
+flightrec_requests_size:10485760
 force_recovery:false
 hot_standby:false
 iproto_threads:1
diff --git a/test/box/admin.result b/test/box/admin.result
index e5fabc47530cb1ca1e04705e7e56240644bcf580..e77289e9488dec3a9cb8b664e7deba3df4aa3faf 100644
--- a/test/box/admin.result
+++ b/test/box/admin.result
@@ -69,6 +69,12 @@ cfg_filter(box.cfg)
     - 1
   - - flightrec_metrics_period
     - 180
+  - - flightrec_requests_max_req_size
+    - 16384
+  - - flightrec_requests_max_res_size
+    - 16384
+  - - flightrec_requests_size
+    - 10485760
   - - force_recovery
     - false
   - - hot_standby
diff --git a/test/box/cfg.result b/test/box/cfg.result
index 8112032ce2f23eefe6f78a9783691d839a29d33c..c4e30fcecec6a99c8900f446e2e817b59c1c584d 100644
--- a/test/box/cfg.result
+++ b/test/box/cfg.result
@@ -57,6 +57,12 @@ cfg_filter(box.cfg)
  |     - 1
  |   - - flightrec_metrics_period
  |     - 180
+ |   - - flightrec_requests_max_req_size
+ |     - 16384
+ |   - - flightrec_requests_max_res_size
+ |     - 16384
+ |   - - flightrec_requests_size
+ |     - 10485760
  |   - - force_recovery
  |     - false
  |   - - hot_standby
@@ -210,6 +216,12 @@ cfg_filter(box.cfg)
  |     - 1
  |   - - flightrec_metrics_period
  |     - 180
+ |   - - flightrec_requests_max_req_size
+ |     - 16384
+ |   - - flightrec_requests_max_res_size
+ |     - 16384
+ |   - - flightrec_requests_size
+ |     - 10485760
  |   - - force_recovery
  |     - false
  |   - - hot_standby