diff --git a/cfg_checker/modules/ceph/__init__.py b/cfg_checker/modules/ceph/__init__.py
index 29b9a29..e2f0049 100644
--- a/cfg_checker/modules/ceph/__init__.py
+++ b/cfg_checker/modules/ceph/__init__.py
@@ -1,5 +1,7 @@
 #    Author: Alex Savatieiev (osavatieiev@mirantis.com; a.savex@gmail.com)
 #    Copyright 2019-2022 Mirantis, Inc.
+from datetime import datetime
+
 from cfg_checker.agent.fio_runner import get_fio_options
 from cfg_checker.agent.fio_runner import seq_modes, mix_modes
 from cfg_checker.common import logger_cli
@@ -7,6 +9,7 @@
 from cfg_checker.helpers import args_utils
 from cfg_checker.modules.ceph import info, bench
 
+
 command_help = "Ceph Storage information and benchmarks"
 supported_envs = [ENV_TYPE_KUBE]
 
@@ -54,17 +57,18 @@
     )
 
     ceph_info_parser.add_argument(
-        '--tgz',
-        metavar='ceph_tgz_filename',
-        help="TGZ archive filename to save gathered data"
+        '--client-name',
+        metavar='client_name',
+        help="Client name for archive naming"
     )
 
-    ceph_report_parser = ceph_subparsers.add_parser(
-        'report',
-        help="Generate Ceph Info report"
+    ceph_info_parser.add_argument(
+        '--project-name',
+        metavar='projectname',
+        help="Project name for archive naming"
     )
 
-    ceph_report_parser.add_argument(
+    ceph_info_parser.add_argument(
         '--html',
         metavar='ceph_html_filename',
         help="HTML filename to save report"
@@ -179,11 +183,22 @@
     # Ceph info
     # Gather ceph info and create an archive with data
     args_utils.check_supported_env(ENV_TYPE_KUBE, args, config)
-    # check tgz
-    _tgzfile = "ceph_info_archive.tgz" if not args.tgz else args.tgz
 
+    # check client and project names
+    if not args.client_name or not args.project_name:
+        logger_cli.error(
+            "ERROR: Missing '--client-name' or '--project-name' options"
+        )
+        return
     # _class = _selectClass(_env)
     ceph_info = info.KubeCephInfo(config)
+    _tgzfilename = ceph_info.get_info_archive_filename(
+        args.client_name,
+        args.project_name
+    )
+    logger_cli.info("# Archive will be generated to '{}'".format(_tgzfilename))
+    # get html
+    _htmlfilename = args_utils.get_arg(args, 'html')
 
     logger_cli.info("# Collecting Ceph cluster information")
     ceph_info.gather_info()
@@ -195,30 +210,13 @@
     # ceph_info.load_info()
     # end debug
 
-    ceph_info.generate_archive(_tgzfile)
-    ceph_info.print_summary()
-
-    return
-
-
-def do_report(args, config):
-    # Ceph Report
-    # Gather ceph info and create HTML report with all of the data
-    args_utils.check_supported_env(ENV_TYPE_KUBE, args, config)
-    _filename = args_utils.get_arg(args, 'html')
-    logger_cli.info("# Ceph cluster Configuration report")
-
-    # _class = _selectClass(_env)
-    ceph_info = info.KubeCephInfo(config)
-    # Debug, enable if needed to debug report generation
-    # without actuall data collecting each time
-    # ceph_info.load_info()
-    # end debug
-    ceph_info.gather_info()
-    ceph_info.gather_osd_configs()
     ceph_info.get_transposed_latency_table()
     ceph_info.get_latest_health_readout()
-    ceph_info.create_html_report(_filename)
+    ceph_info.create_html_report(_htmlfilename)
+
+    # handle cli part
+    ceph_info.generate_archive(_tgzfilename)
+    ceph_info.print_summary()
 
     return
 
diff --git a/cfg_checker/modules/ceph/info.py b/cfg_checker/modules/ceph/info.py
index 0eb1f15..a3006af 100644
--- a/cfg_checker/modules/ceph/info.py
+++ b/cfg_checker/modules/ceph/info.py
@@ -6,7 +6,7 @@
 import tarfile
 import io
 from time import sleep
-
+from datetime import datetime
 
 from cfg_checker.common import logger_cli
 from cfg_checker.common.exception import KubeException
@@ -25,6 +25,22 @@
         self.env_config = config
         return
 
+    def get_info_archive_filename(self, client, project):
+        # prefill known data
+        _tags = ["CephCollectData"]
+        _tags.append(client)
+        _tags.append(project)
+
+        # generate date for tgz
+        _file_datetime_fmt = "%Y-%m-%d"
+        _dt = datetime.now().strftime(_file_datetime_fmt)
+        _tags.append(_dt)
+
+        # extension
+        _tags.append("tar")
+        _tags.append("gz")
+        return ".".join(_tags)
+
     def get_transposed_latency_table(self):
         _table = {
             "<dev>": []
@@ -164,6 +180,9 @@
             self.ceph_info = json.load(_f)
 
     def generate_archive(self, tgzfilename):
+        def _ensure_fname(ext):
+            return key + ext if _fname is None else _fname
+
         if not self.ceph_info:
             logger_cli.warning(
                 "WARNING: Ceph Info Data not detected. "
@@ -178,18 +197,23 @@
             )
             # Iterate every key and write data to tar file
             for key, d in self.ceph_info.items():
-                _filename = None
+                _fname = None
                 # Cast buf to a proper type
                 _buf = None
+                if "filename" in d:
+                    _fname = d["filename"]
                 if isinstance(d["data"], dict) or isinstance(d["data"], list):
                     _buf = json.dumps(d["data"], indent=2)
-                    _filename = key + ".json"
+                    # _filename = key + ".json" if _fname is not None else _fname
+                    _filename = _ensure_fname(".json")
                 elif isinstance(d["data"], str):
                     _buf = d["data"]
-                    _filename = key + ".txt"
+                    # _filename = key + ".txt"
+                    _filename = _ensure_fname(".txt")
                 else:
                     _buf = str(d["data"])
-                    _filename = key + ".txt"
+                    # _filename = key + ".txt"
+                    _filename = _ensure_fname(".txt")
                 logger_cli.debug("... writing '{}'".format(_filename))
                 _tgz.add_file(_filename, buf=_buf, replace=True)
 
@@ -332,7 +356,8 @@
             logger_cli.debug("... found '{}'".format(_names[0]))
         return _names[0]
 
-    def _add_ceph_info_item(self, key, title, data):
+    def _add_ceph_info_item(self, key, title, data, filename=None):
+        # handle data
         if key in self.ceph_info:
             self.ceph_info[key]["title"] = title
             self.ceph_info[key]["data"] = data
@@ -341,6 +366,8 @@
                 "title": title,
                 "data": data
             }
+        if filename:
+            self.ceph_info[key]["filename"] = filename
 
     def _parse_dev_classes(self, deviceClasses):
         _devClasses = []
@@ -439,13 +466,15 @@
         self._add_ceph_info_item(
             "crushmap_json",
             "Crush Map (json)",
-            _cj("crushtool -i " + _cmap_tmp_path + " --dump")
+            _cj("crushtool -i " + _cmap_tmp_path + " --dump"),
+            filename="crushmap.json"
         )
         # _crushmap = _cj("crushtool -i " + _cmap_tmp_path + " --dump")
         self._add_ceph_info_item(
             "crushmap_text",
             "Crush Map (text)",
-            _c("crushtool -d " + _cmap_tmp_path)
+            _c("crushtool -d " + _cmap_tmp_path),
+            filename="crushmap.json"
         )
 
         logger_cli.info("-> Collecting ceph osd crush dump")
