From 53169088cd1910413bfc57b5981d3364c85a62de Mon Sep 17 00:00:00 2001 From: Boaz Haim Date: Thu, 7 Nov 2024 14:19:59 +0200 Subject: [PATCH] Log analyzer - adding support for parssing telemetry logs --- .../src/loganalyze/log_analyzer.py | 7 ++- .../ibdiagnet2_port_counters_log_regex.py | 55 +++++++++++++++++++ .../src/loganalyze/log_parsing/logs_regex.py | 6 +- 3 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 plugins/ufm_log_analyzer_plugin/src/loganalyze/log_parsing/ibdiagnet2_port_counters_log_regex.py diff --git a/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_analyzer.py b/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_analyzer.py index add4a7be..32a39cc0 100755 --- a/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_analyzer.py +++ b/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_analyzer.py @@ -44,6 +44,7 @@ from loganalyze.log_analyzers.console_log_analyzer import ConsoleLogAnalyzer from loganalyze.log_analyzers.rest_api_log_analyzer import RestApiAnalyzer from loganalyze.log_analyzers.link_flapping_analyzer import LinkFlappingAnalyzer +from loganalyze.log_analyzers.ibdiagnet_log_analyzer import IBDIAGNETLogAnalyzer from loganalyze.pdf_creator import PDFCreator from loganalyze.utils.common import delete_files_by_types @@ -391,9 +392,9 @@ def create_analyzer(parsed_args, full_extracted_logs_list, # Clean some unended files created during run files_types_to_delete = set() files_types_to_delete.add("png") #png images created for PDF report - files_types_to_delete.add("log") #logs taken from the logs - files_types_to_delete.add("csv") #tmp csv + telemetery samples - files_types_to_delete.add("gz") #gz files of logs and samples + # files_types_to_delete.add("log") #logs taken from the logs + # files_types_to_delete.add("csv") #tmp csv + telemetery samples + # files_types_to_delete.add("gz") #gz files of logs and samples delete_files_by_types(args.destination, files_types_to_delete) except Exception as exc: diff --git a/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_parsing/ibdiagnet2_port_counters_log_regex.py b/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_parsing/ibdiagnet2_port_counters_log_regex.py new file mode 100644 index 00000000..6d3e384c --- /dev/null +++ b/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_parsing/ibdiagnet2_port_counters_log_regex.py @@ -0,0 +1,55 @@ +# +# Copyright © 2013-2024 NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED. +# +# This software product is a proprietary product of Nvidia Corporation and its affiliates +# (the "Company") and all right, title, and interest in and to the software +# product, including all associated intellectual property rights, are and +# shall remain exclusively with the Company. +# +# This software product is governed by the End User License Agreement +# provided with the software product. +# + +import re +from typing import Match + +from loganalyze.log_parsing.base_regex import RegexAndHandlers + +ITERATION_TIME_REGEX = re.compile(r"^\[ExportAPI_STATS\] Iteration time\: ([\d\.]+) sec \@ \[([\d\-]+ [\d\:\.]+)\]$") + +TIMEOUT_DUMP_CORE_REGEX = re.compile(r"^timeout: the monitored command dumped core$") + +TOTAL_SWITCH_PORTS_REGEX = re.compile(r"^.*Total switches\/ports \[(\d+)\/(\d+)\]\,.*$") + +COLLECTX_VERSION_REGEX = re.compile(r"^\[ExportAPI\] Collectx version ([\d\.]+)$") + +def iteration_time(match: Match): + iteration_time_sec = match.group(1) + timestamp = match.group(2) + return ("iteration_time", timestamp, iteration_time_sec, None) + +def timeout_dump_core(match: Match): + return ("timeout_dump_core", None, None, None) + +def total_switch_ports(match: Match): + total_switches = match.group(1) + total_ports = match.group(2) + return ("total_switch_ports", None, total_switches, total_ports) + +def collectx_version(match:Match): + collectx_version = match.group(1) + return ("collectx_version", None, collectx_version, None) + +ibdiagnet2_headers = ("type", "timestamp", "data", "extra") + +ibdiagnet2_primary_log_regex_cls = RegexAndHandlers("ufm_logs_ibdiagnet2_port_counters.log", ibdiagnet2_headers) +ibdiagnet2_secondary_log_regex_cls = RegexAndHandlers("secondary_telemetry_ibdiagnet2_port_counters.log", ibdiagnet2_headers) + +regex_funcs_map = {ITERATION_TIME_REGEX: iteration_time, + TIMEOUT_DUMP_CORE_REGEX:timeout_dump_core, + TOTAL_SWITCH_PORTS_REGEX: total_switch_ports, + COLLECTX_VERSION_REGEX: collectx_version} + +for regex in regex_funcs_map: + ibdiagnet2_primary_log_regex_cls.add_regex(regex, regex_funcs_map[regex]) + ibdiagnet2_secondary_log_regex_cls.add_regex(regex, regex_funcs_map[regex]) diff --git a/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_parsing/logs_regex.py b/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_parsing/logs_regex.py index cbbaefeb..22ad76a8 100644 --- a/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_parsing/logs_regex.py +++ b/plugins/ufm_log_analyzer_plugin/src/loganalyze/log_parsing/logs_regex.py @@ -17,6 +17,8 @@ from loganalyze.log_parsing.ibdiagnet_log_regex import ibdiagnet_log_regex_cls from loganalyze.log_parsing.console_log_regex import console_log_regex_cls from loganalyze.log_parsing.rest_api_log_regex import rest_api_log_regex_cls +from loganalyze.log_parsing.ibdiagnet2_port_counters_log_regex import \ + ibdiagnet2_primary_log_regex_cls, ibdiagnet2_secondary_log_regex_cls logs = [ event_log_regex_cls, @@ -24,7 +26,9 @@ ufm_log_regex_cls, ibdiagnet_log_regex_cls, console_log_regex_cls, - rest_api_log_regex_cls + rest_api_log_regex_cls, + ibdiagnet2_secondary_log_regex_cls, + ibdiagnet2_primary_log_regex_cls ] logs_regex_csv_headers_list = []