diff --git a/include/tarantool.h b/include/tarantool.h
index 5abc21366758f9f18a3426b9ea5bc55339900235..675ddfb9c31d7a278c28ffbfb9bc0ff15fbfea79 100644
--- a/include/tarantool.h
+++ b/include/tarantool.h
@@ -45,6 +45,7 @@ i32 mod_reload_config(struct tarantool_cfg *old_conf, struct tarantool_cfg *new_
 int mod_cat(const char *filename);
 void mod_snapshot(struct log_io *, struct nbatch *batch);
 void mod_info(struct tbuf *out);
+const char * mod_status(void);
 
 extern struct tarantool_cfg cfg;
 extern const char *cfg_filename;
diff --git a/include/tarantool_lua.h b/include/tarantool_lua.h
index 83aefc03e6037e660230c43ddfdc4bee58b39fdd..53c65fb2ec0e14ef4b45a6b91b753a5bc1f6f946 100644
--- a/include/tarantool_lua.h
+++ b/include/tarantool_lua.h
@@ -102,4 +102,12 @@ void
 tarantool_lua(struct lua_State *L,
 	      struct tbuf *out, const char *str);
 
+/**
+ * push uint64_t to Lua stack
+ *
+ * @param L is a Lua State
+ * @param val is a value to push
+ *
+ */
+int luaL_pushnumber64(struct lua_State *L, uint64_t val);
 #endif /* INCLUDES_TARANTOOL_LUA_H */
diff --git a/mod/box/CMakeLists.txt b/mod/box/CMakeLists.txt
index 9b3ec9b45f6839d9f4782c928f55be0f8e5bdbd7..477404b273ba20ef454d537d5cd427355097555a 100644
--- a/mod/box/CMakeLists.txt
+++ b/mod/box/CMakeLists.txt
@@ -39,4 +39,5 @@ set_source_files_properties(memcached.m
     PROPERTIES COMPILE_FLAGS "-Wno-uninitialized")
 
 tarantool_module("box" tuple.m index.m tree.m space.m port.m request.m
+    box_lua_info.m
     txn.m box.m box.lua.c box_lua.m memcached.m memcached-grammar.m)
diff --git a/mod/box/box.m b/mod/box/box.m
index 5bacba6c962a853fae7ef083c58783b1c0c058ad..c8c96c77a1dcad04616e48a40671a994cd508087 100644
--- a/mod/box/box.m
+++ b/mod/box/box.m
@@ -585,3 +585,7 @@ mod_info(struct tbuf *out)
 	tbuf_printf(out, "  status: %s" CRLF, status);
 }
 
+
+const char * mod_status(void) {
+    return status;
+}
diff --git a/mod/box/box_lua.m b/mod/box/box_lua.m
index 3d8b9caea2ad9f8e3136cb82d26bfc597027e4dc..aac3cdab942a7343660dcee88435a815cf60f999 100644
--- a/mod/box/box_lua.m
+++ b/mod/box/box_lua.m
@@ -46,7 +46,7 @@
 #include "tuple.h"
 #include "space.h"
 #include "port.h"
-
+#include "box_lua_info.h"
 
 /* contents of box.lua */
 extern const char box_lua[];
@@ -1049,7 +1049,11 @@ mod_lua_init(struct lua_State *L)
 	/* Load box.lua */
 	if (luaL_dostring(L, box_lua))
 		panic("Error loading box.lua: %s", lua_tostring(L, -1));
+	
+	lbox_info_init(L);
+
 	assert(lua_gettop(L) == 0);
+
 	return L;
 }
 
diff --git a/mod/box/box_lua_info.h b/mod/box/box_lua_info.h
new file mode 100644
index 0000000000000000000000000000000000000000..c1b4bef5315461cc73b2850103774cf8082122c9
--- /dev/null
+++ b/mod/box/box_lua_info.h
@@ -0,0 +1,7 @@
+#ifndef __BOX_LUA_INFO_H__
+#define __BOX_LUA_INFO_H__
+
+struct lua_State;
+void lbox_info_init(struct lua_State *L);
+
+#endif /* __BOX_LUA_INFO_H__ */
diff --git a/mod/box/box_lua_info.m b/mod/box/box_lua_info.m
new file mode 100644
index 0000000000000000000000000000000000000000..c088274dedbb5c4a8829b07cb8b6ea48956e8b70
--- /dev/null
+++ b/mod/box/box_lua_info.m
@@ -0,0 +1,90 @@
+#include "box_lua_info.h"
+#include "lua.h"
+#include "lauxlib.h"
+#include "lualib.h"
+#include <tarantool_lua.h>
+#include <tarantool.h>
+#include <say.h>
+#include <string.h>
+#include <recovery.h>
+
+
+static int lbox_info_index(struct lua_State *L) {
+
+    const char *key = lua_tolstring(L, -1, NULL);
+
+    if (strcmp(key, "lsn") == 0) {
+        luaL_pushnumber64(L, recovery_state->confirmed_lsn);
+        return 1;
+    }
+
+    if (strcmp(key, "recovery_lag") == 0) {
+
+        if (recovery_state->remote)
+            lua_pushnumber(L, recovery_state->remote->recovery_lag);
+        else
+            lua_pushnil(L);
+        return 1;
+    }
+
+    if (strcmp(key, "recovery_last_update") == 0) {
+
+        if (recovery_state->remote)
+            lua_pushnumber(L,
+                recovery_state->remote->recovery_last_update_tstamp);
+        else
+            lua_pushnil(L);
+        return 1;
+    }
+
+    if (strcmp(key, "status") == 0) {
+        lua_pushstring(L, mod_status());
+        return 1;
+    }
+    
+
+    return 0;
+}
+
+
+static const struct luaL_reg lbox_info_meta [] = {
+	{"__index", lbox_info_index},
+	{NULL, NULL}
+};
+
+void lbox_info_init(struct lua_State *L) {
+
+    lua_getfield(L, LUA_GLOBALSINDEX, "box");
+
+    lua_pushstring(L, "info");
+    lua_newtable(L);
+
+    lua_newtable(L);
+    luaL_register(L, NULL, lbox_info_meta);
+    lua_setmetatable(L, -2);
+    
+
+    /* tarantool version */
+    lua_pushstring(L, "version");
+    lua_pushstring(L, tarantool_version());
+    lua_settable(L, -3);
+
+    /* pid */
+    lua_pushstring(L, "pid");
+    lua_pushnumber(L, getpid());
+    lua_settable(L, -3);
+
+    /* logger_pid */
+    lua_pushstring(L, "logger_pid");
+    lua_pushnumber(L, logger_pid);
+    lua_settable(L, -3);
+
+    /* config */
+    lua_pushstring(L, "config");
+    lua_pushstring(L, cfg_filename_fullpath);
+    lua_settable(L, -3);
+
+
+    lua_settable(L, -3);    /* box.info = created table */
+    lua_pop(L, 1);          /* cleanup stack */
+}
diff --git a/src/tarantool_lua.m b/src/tarantool_lua.m
index 679a531473efc9a6fc040271df25406639d3f1a7..c5509930e640622813e2f7f60b85f196a7138c33 100644
--- a/src/tarantool_lua.m
+++ b/src/tarantool_lua.m
@@ -299,7 +299,7 @@ luaL_pushcdata(struct lua_State *L, CTypeID id, int bits)
 	return cd;
 }
 
-static int
+int
 luaL_pushnumber64(struct lua_State *L, uint64_t val)
 {
 	GCcdata *cd = luaL_pushcdata(L, CTID_UINT64, 8);
diff --git a/test/box/info.result b/test/box/info.result
new file mode 100644
index 0000000000000000000000000000000000000000..b0788770746fe311d96c3f09fbacc6f30dd2c0ca
--- /dev/null
+++ b/test/box/info.result
@@ -0,0 +1,40 @@
+lua
+---
+unknown command. try typing help.
+...
+lua 1
+---
+ - 1
+...
+lua box.info.version
+---
+ - 1.4.7-92-g4ba95ca
+...
+lua string.match(box.info.pid, '^[1-9][0-9]*$') ~= nil
+---
+ - true
+...
+lua string.match(box.info.logger_pid, '^[1-9][0-9]*$') ~= nil
+---
+ - true
+...
+lua box.info.lsn > 0
+---
+ - true
+...
+lua box.info.recovery_lag
+---
+ - nil
+...
+lua box.info.recovery_last_update
+---
+ - nil
+...
+lua box.info.status
+---
+ - primary
+...
+lua box.info.config
+---
+ - /home/unera/work/tarantool/test/var/tarantool.cfg
+...
diff --git a/test/box/info.test b/test/box/info.test
new file mode 100644
index 0000000000000000000000000000000000000000..1690d68c8d934a0009512162cfcf910c4e3c8671
--- /dev/null
+++ b/test/box/info.test
@@ -0,0 +1,16 @@
+# encoding: tarantool
+import os
+import sys
+# Test Lua from admin console. Whenever producing output,
+# make sure it's a valid YAML.
+exec admin "lua"
+exec admin "lua 1"
+exec admin "lua box.info.version"
+exec admin "lua string.match(box.info.pid, '^[1-9][0-9]*$') ~= nil"
+exec admin "lua string.match(box.info.logger_pid, '^[1-9][0-9]*$') ~= nil"
+exec admin "lua box.info.lsn > 0"
+exec admin "lua box.info.recovery_lag"
+exec admin "lua box.info.recovery_last_update"
+exec admin "lua box.info.status"
+exec admin "lua box.info.config"
+
diff --git a/test/box/lua.result b/test/box/lua.result
index 7d77cb8f8405ec8d9e03488f71714e46dae6e68f..31566418fc1be79f9d1f3b7d0298bc88b49f36d4 100644
--- a/test/box/lua.result
+++ b/test/box/lua.result
@@ -20,6 +20,7 @@ lua for n in pairs(box) do print('  - box.', n) end
   - box.replace
   - box.update
   - box.insert
+  - box.info
   - box.space
   - box.cfg
   - box.dostring