From 4e1a7951ff3f6c479c6dfe4b414f303be962e625 Mon Sep 17 00:00:00 2001 From: zhuofeng Date: Fri, 20 Sep 2024 14:24:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9B=B8=E5=85=B3bug=201?= =?UTF-8?q?=E3=80=81=E5=BD=93=E7=8E=AF=E5=A2=83=E6=9C=AC=E8=BA=AB=E5=B0=B1?= =?UTF-8?q?=E8=B6=85=E8=BF=8710=E4=B8=AAdisk=EF=BC=8C=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=88=90default=E4=BC=9A=E5=AF=BC=E8=87=B4=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=9C=89=E9=97=AE=E9=A2=98=202=E3=80=81=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E5=B7=A1=E6=A3=80=E4=BB=BB=E5=8A=A1=E5=81=9C=E6=AD=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=90=8E=EF=BC=8C=E5=9B=9E=E6=98=BE=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=9C=89=E8=AF=AF=203=E3=80=81=E9=87=8D=E6=9E=84=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81=E5=92=8C=E4=BF=AE=E6=94=B9=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E7=BA=A7=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...bout-collect-module-and-avg-block-io.patch | 226 ++++++++++++++++++ sysSentry.spec | 9 +- 2 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 fix-some-about-collect-module-and-avg-block-io.patch diff --git a/fix-some-about-collect-module-and-avg-block-io.patch b/fix-some-about-collect-module-and-avg-block-io.patch new file mode 100644 index 0000000..a32e5c7 --- /dev/null +++ b/fix-some-about-collect-module-and-avg-block-io.patch @@ -0,0 +1,226 @@ +From dea58a559f3dbad3dbce3b681639ee89c20b1cee Mon Sep 17 00:00:00 2001 +From: zhuofeng +Date: Fri, 20 Sep 2024 14:35:39 +0800 +Subject: [PATCH] fix some about collect module and avg block io + +--- + config/tasks/avg_block_io.mod | 4 ++-- + src/python/sentryCollector/collect_io.py | 18 +++++++++++------- + src/python/sentryCollector/collect_plugin.py | 17 ++++++++--------- + src/python/sentryCollector/collect_server.py | 6 +++--- + src/python/sentryCollector/collectd.py | 2 -- + .../sentryPlugins/avg_block_io/avg_block_io.py | 13 ++++++++++--- + 6 files changed, 34 insertions(+), 26 deletions(-) + +diff --git a/config/tasks/avg_block_io.mod b/config/tasks/avg_block_io.mod +index 814c483..b9b6f34 100644 +--- a/config/tasks/avg_block_io.mod ++++ b/config/tasks/avg_block_io.mod +@@ -1,5 +1,5 @@ + [common] + enabled=yes + task_start=/usr/bin/python3 /usr/bin/avg_block_io +-task_stop=pkill avg_block_io +-type=oneshot +\ No newline at end of file ++task_stop=pkill -f /usr/bin/avg_block_io ++type=oneshot +diff --git a/src/python/sentryCollector/collect_io.py b/src/python/sentryCollector/collect_io.py +index b826dc4..104b734 100644 +--- a/src/python/sentryCollector/collect_io.py ++++ b/src/python/sentryCollector/collect_io.py +@@ -175,8 +175,7 @@ class CollectIo(): + + threading.Timer(self.period_time, self.task_loop).start() + +- def main_loop(self): +- logging.info("collect io thread start") ++ def is_kernel_avaliable(self): + base_path = '/sys/kernel/debug/block' + for disk_name in os.listdir(base_path): + if not self.loop_all and disk_name not in self.disk_list: +@@ -198,8 +197,13 @@ class CollectIo(): + self.window_value[disk_name] = {} + IO_GLOBAL_DATA[disk_name] = {} + +- if len(self.disk_map_stage) == 0: +- logging.warning("no disks meet the requirements. the thread exits") ++ return len(IO_GLOBAL_DATA) != 0 ++ ++ def main_loop(self): ++ logging.info("collect io thread start") ++ ++ if not self.is_kernel_avaliable() or len(self.disk_map_stage) == 0: ++ logging.warning("no disks meet the requirements. collect io thread exits") + return + + for disk_name, stage_list in self.disk_map_stage.items(): +@@ -213,7 +217,7 @@ class CollectIo(): + start_time = time.time() + + if self.stop_event.is_set(): +- logging.info("collect io thread exit") ++ logging.debug("collect io thread exit") + return + + for disk_name, stage_list in self.disk_map_stage.items(): +@@ -227,7 +231,7 @@ class CollectIo(): + continue + while sleep_time > 1: + if self.stop_event.is_set(): +- logging.info("collect io thread exit") ++ logging.debug("collect io thread exit") + return + time.sleep(1) + sleep_time -= 1 +@@ -235,5 +239,5 @@ class CollectIo(): + + # set stop event, notify thread exit + def stop_thread(self): +- logging.info("collect io thread is preparing to exit") ++ logging.debug("collect io thread is preparing to exit") + self.stop_event.set() +diff --git a/src/python/sentryCollector/collect_plugin.py b/src/python/sentryCollector/collect_plugin.py +index 49ce0a8..9132473 100644 +--- a/src/python/sentryCollector/collect_plugin.py ++++ b/src/python/sentryCollector/collect_plugin.py +@@ -142,22 +142,21 @@ def validate_parameters(param, len_limit, char_limit): + ret = ResultMessage.RESULT_INVALID_LENGTH + return [False, ret] + +- if len(param) > len_limit: +- print(f"{param} length more than {len_limit}") +- ret = ResultMessage.RESULT_EXCEED_LIMIT +- return [False, ret] +- + pattern = r'^[a-zA-Z0-9_-]+$' + for info in param: +- if len(info) > char_limit: +- print(f"{info} length more than {char_limit}") +- ret = ResultMessage.RESULT_EXCEED_LIMIT +- return [False, ret] + if not re.match(pattern, info): + print(f"{info} is invalid char") + ret = ResultMessage.RESULT_INVALID_CHAR + return [False, ret] + ++ # length of len_limit is exceeded, keep len_limit ++ if len(param) > len_limit: ++ print(f"{param} length more than {len_limit}, keep the first {len_limit}") ++ param[:] = param[0:len_limit] ++ ++ # only keep elements under the char_limit length ++ param[:] = [elem for elem in param if len(elem) <= char_limit] ++ + return [True, ret] + + def is_iocollect_valid(period, disk_list=None, stage=None): +diff --git a/src/python/sentryCollector/collect_server.py b/src/python/sentryCollector/collect_server.py +index fa49781..bab4e56 100644 +--- a/src/python/sentryCollector/collect_server.py ++++ b/src/python/sentryCollector/collect_server.py +@@ -256,7 +256,7 @@ class CollectServer(): + + def server_loop(self): + """main loop""" +- logging.info("collect server thread start") ++ logging.info("collect listen thread start") + server_fd = self.server_fd_create() + if not server_fd: + return +@@ -267,7 +267,7 @@ class CollectServer(): + logging.debug("start server_loop loop") + while True: + if self.stop_event.is_set(): +- logging.info("collect server thread exit") ++ logging.debug("collect listen thread exit") + server_fd = None + return + try: +@@ -281,5 +281,5 @@ class CollectServer(): + pass + + def stop_thread(self): +- logging.info("collect server thread is preparing to exit") ++ logging.debug("collect listen thread is preparing to exit") + self.stop_event.set() +diff --git a/src/python/sentryCollector/collectd.py b/src/python/sentryCollector/collectd.py +index b77c642..3a836df 100644 +--- a/src/python/sentryCollector/collectd.py ++++ b/src/python/sentryCollector/collectd.py +@@ -49,7 +49,6 @@ def sig_handler(signum, _f): + Thread_List[i][0].stop_thread() + + remove_sock_file() +- sys.exit(0) + + def main(): + """main +@@ -64,7 +63,6 @@ def main(): + try: + signal.signal(signal.SIGINT, sig_handler) + signal.signal(signal.SIGTERM, sig_handler) +- signal.signal(signal.SIGHUP, sig_handler) + + logging.info("finish main parse_args") + +diff --git a/src/python/sentryPlugins/avg_block_io/avg_block_io.py b/src/python/sentryPlugins/avg_block_io/avg_block_io.py +index ff2071d..73f0b22 100644 +--- a/src/python/sentryPlugins/avg_block_io/avg_block_io.py ++++ b/src/python/sentryPlugins/avg_block_io/avg_block_io.py +@@ -21,7 +21,7 @@ CONFIG_FILE = "/etc/sysSentry/plugins/avg_block_io.ini" + + def log_invalid_keys(not_in_list, keys_name, config_list, default_list): + """print invalid log""" +- if config_list and default_list: ++ if config_list and not_in_list: + logging.warning("{} in common.{} are not valid, set {}={}".format(not_in_list, keys_name, keys_name, default_list)) + elif config_list == ["default"]: + logging.warning("Default {} use {}".format(keys_name, default_list)) +@@ -144,9 +144,11 @@ def init_io_win(io_dic, config, common_param): + + if avg_lim_value and avg_time_value and tot_lim_value: + io_data[disk_name][stage_name][rw]["latency"] = IoWindow(window_size=io_dic["win_size"], window_threshold=io_dic["win_threshold"], abnormal_multiple=avg_time_value, abnormal_multiple_lim=avg_lim_value, abnormal_time=tot_lim_value) ++ logging.debug("Successfully create {}-{}-{} latency window".format(disk_name, stage_name, rw)) + + if iodump_lim_value is not None: + io_data[disk_name][stage_name][rw]["iodump"] = IoDumpWindow(window_size=io_dic["win_size"], window_threshold=io_dic["win_threshold"], abnormal_time=iodump_lim_value) ++ logging.debug("Successfully create {}-{}-{} iodump window".format(disk_name, stage_name, rw)) + return io_data, io_avg_value + + +@@ -159,10 +161,10 @@ def get_valid_disk_stage_list(io_dic, config_disk, config_stage): + for disk_stage_list in json_data.values(): + all_stage_set.update(disk_stage_list) + +- disk_list = [key for key in config_disk if key in all_disk_set] ++ disk_list = [key for key in all_disk_set if key in config_disk] + not_in_disk_list = [key for key in config_disk if key not in all_disk_set] + +- stage_list = [key for key in config_stage if key in all_stage_set] ++ stage_list = [key for key in all_stage_set if key in config_stage] + not_in_stage_list = [key for key in config_stage if key not in all_stage_set] + + if not config_disk: +@@ -171,6 +173,9 @@ def get_valid_disk_stage_list(io_dic, config_disk, config_stage): + if not config_stage: + stage_list = [key for key in all_stage_set] + ++ disk_list = disk_list[:10] if len(disk_list) > 10 else disk_list ++ stage_list = stage_list[:15] if len(stage_list) > 15 else stage_list ++ + if config_disk and not disk_list: + logging.warning("Cannot get valid disk by disk={}, set to default".format(config_disk)) + disk_list, stage_list = get_valid_disk_stage_list(io_dic, [], config_stage) +@@ -228,6 +233,8 @@ def main(): + signal.signal(signal.SIGINT, sig_handler) + signal.signal(signal.SIGTERM, sig_handler) + ++ logging.basicConfig(level=logging.INFO) ++ + # 初始化配置读取 + config = configparser.ConfigParser(comment_prefixes=('#', ';')) + try: +-- +2.33.0 + diff --git a/sysSentry.spec b/sysSentry.spec index 125adee..ffc2b16 100644 --- a/sysSentry.spec +++ b/sysSentry.spec @@ -4,7 +4,7 @@ Summary: System Inspection Framework Name: sysSentry Version: 1.0.2 -Release: 13 +Release: 14 License: Mulan PSL v2 Group: System Environment/Daemons Source0: https://gitee.com/openeuler/sysSentry/releases/download/v%{version}/%{name}-%{version}.tar.gz @@ -24,6 +24,7 @@ Patch11: fix-configparser.InterpolationSyntaxError.patch Patch12: fix-syssentry-fails-to-be-started-when-cpu_sentry-is.patch Patch13: add-collect-module-to-sysSentry.patch Patch14: feature-add-avg_block_io-plugin.patch +Patch15: fix-some-about-collect-module-and-avg-block-io.patch BuildRequires: cmake gcc-c++ BuildRequires: python3 python3-setuptools @@ -217,6 +218,12 @@ rm -rf %{buildroot} %attr(0550,root,root) %{python3_sitelib}/sentryPlugins/avg_block_io %changelog +* Fri Sep 20 2024 zhuofeng - 1.0.2-14 +- Type:requirement +- CVE:NA +- SUG:NA +- DESC:fix some about collect module and avg block io + * Sat Sep 14 2024 zhuofeng - 1.0.2-13 - Type:requirement - CVE:NA -- Gitee