Alberto Soutullo 877e1ee36a Analysis refactor (#66)
* Add base class for monitoring client configurations

* Add victoria metrics monitoring client configurations

* WIP: Minor refactor to readers, add extra fields to decouple from an always K8s scenario

* WIP: Move tracers inside readers, as it depends on Victoria. Start decoupling tracing from analysis.

* WIP: Create nimlibp2p tracer

* WIP: Create statusgo tracer

* WIP: Start creating stack classes, depending on the monitoring stack used, analysis will be done differently.

* WIP: Decouple analysis from stack. Add extra plot functions.

* WIP: Delete monitoring clients

* WIP: Add number of processes to File Reader

* WIP: Add number of processes Stack Analysis

* WIP: Decouple patterns with extra arguments from cluster

* WIP: Move waku analyzer

* WIP: Add container name as parameter

* WIP: Correct query selection when doing query

* WIP: Correct dispatching call in waku analyzer

* WIP: Move waku plotting to its own file

* WIP: Refactor in File Reader

* WIP: Minor refactor in victoria reader loop

* WIP: Add info to trace method

* WIP: Add builder to base stack analysis class

* WIP: Change fields in waku tracer

* WIP: Refactor due to previous change

* WIP: Extract ownership of parsing logs to upper class for better decoupling

* WIP: Move functions to different class

* WIP: Move extra fields to Victoria builder, from kwargs.

* WIP: Add chainable instantiation pattern to tracers

* WIP: Renamed method to match standard naming

* WIP: Remove old TODO

* WIP: Add notes for queries and patterns

* WIP: Remove stack from class variable and refactor get number of nodes

* WIP: Add victoria reader builder

* WIP: Log pod name instead of peer id for better debugging

* WIP: Change logging options

* WIP: Change read_logs function name to get_dataframes

* WIP: Make VictoriaReader implement Reader class

* WIP: Allow _make_queries to work with a single query in params

* WIP: Allow _make_queries to work with a single query in params

* WIP: Add comments to victoria reader

* WIP: Improve VictoriaReaderBuilder

* WIP: Download logs from malfunctioning pods

* WIP: Updated check_store_messages and check_filter_messages

* WIP: Add comments to Waku analyzer

* WIP: Improve WakuTracer

* WIP: Improve how vaclab_stack_analysis.py was handling log retrieval

* WIP: Rename functions in stack_analysis.py

* WIP: Renamed Plotter to MetricsPlotter

* WIP: Minor changes to waku_plots

* WIP: Minor changes to scrapper

* WIP: Rewrite README.md

* WIP: Add image for diagram

* WIP: Moved information to new readme

* WIP: Update example file

* WIP: Add readme for plotting metrics

* WIP: Expand nimlibp2p_analyzer.py

* WIP: Expand nimlibp2p_tracer.py

* Expand example_log_analysis.py
2025-06-06 15:35:41 +02:00
2025-06-06 15:35:41 +02:00
2023-09-13 16:28:00 +02:00
2025-06-06 15:35:41 +02:00
2025-02-04 17:08:01 +01:00
2024-12-11 22:44:19 +01:00
2025-02-07 11:14:21 +01:00

Distributed deployer framework (Template name)

Python Version: 3.11.5

Yaml config:

General configuration

Important parameters for modifying when scrapping for simulation data.

general_config:
  times_names: # List of timestamps 
    - ["timestamp_init", "timestamp_end", "column_name"] # Last value is used to group data in the same spot in the plot

Example:

general_config:
  times_names:
    - [ "2024-05-15 12:31:00", "2024-05-15 12:47:00", "3K-1mgs-s-1KB" ]
    - [ "2024-05-15 13:10:00", "2024-05-15 13:30:00", "2K-1mgs-s-1KB" ]
    - [ "2024-05-15 16:34:00", "2024-05-15 16:56:00", "1K-1mgs-s-1KB" ]

Scrape configuration

Scrape parameters like step, interval, and dump location:

scrape_config:
  $__rate_interval: "rate"
  step: "step"
  dump_location: "folder_to_dump"

Example:

scrape_config:
  $__rate_interval: "121s"
  step: "60s"
  dump_location: "test/nwaku0.32/"

Metrics to scrape configuration

Important parameters for which metrics to scrape:

metrics_to_scrape:
  scrape_name:
    query: "query" # Query to extract data from
    extract_field: "instance" # Instance values, same as in Grafana panels
    folder_name: "folder" # This will be set inside `dump_location`

Example of what metrics to select:

metrics_to_scrape:
  libp2p_network_in:
    query: "rate(libp2p_network_bytes_total{direction='in'}[$__rate_interval])"
    extract_field: "instance"
    folder_name: "libp2p-in/"
  libp2p_network_out:
    query: "rate(libp2p_network_bytes_total{direction='out'}[$__rate_interval])"
    extract_field: "instance"
    folder_name: "libp2p-out/"

Important parameters for plotting:

plotting:
  "name_of_the_plot":
    "ignore": ["name"] # Pod names that starts with this string
    "data_points": number_of_points # 1 point per minute
    "folder": # Folders to get the data from
      - "folder_name_1"
      - "folder_name_2"
    "data": # Specific data from folder that will be used for the plot, needs to match `folder_name` from `metrics_to_scrape`
       - "data_from_folder"
    "xlabel_name": "xlabel"
    "ylabel_name": "ylabel"
    "scale-x": scale_number # If division is needed. Ie: y axis is bytes, we want KBytes, so we divide by 1000

Example of plotting bandwidth comparison between nWaku versions 26 27 and 28:

plotting:
  "bandwidth":
    "ignore": ["bootstrap", "midstrap"]
    "data_points": 25
    "folder":
      - "test/nwaku0.26/"
      - "test/nwaku0.27/"
      - "test/nwaku0.28/"
    "data":
      - "libp2p-in"
      - "libp2p-out"
    "xlabel_name": "NºNodes-MsgRate"
    "ylabel_name": "KBytes/s"
    "scale-x": 1000

We will have as many plots as keywords under plotting. Inside each plot, we will have as many subplots as metrics in data.

Main objectives

  • Automatic deployment of any P2P utils
    • Waku
    • Bandwidth usage per node
    • Log data for analysis

Secondary objectives

  • Add QoS parameter support to the 10k tool
  • Run further Waku protocols:
    • Filter
    • Lightpush
    • Store
    • Peer exchange

Acknowledgment

Inspired in the Codex framework https://github.com/codex-storage/cs-codex-dist-tests

Original Authors:

Description
No description provided
Readme 1.9 MiB
Languages
Python 84.8%
Shell 7.7%
Smarty 7.2%
Dockerfile 0.3%