You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The `tda` processor applies **Topological Data Analysis (TDA)**—specifically, **persistent homology**—to Fluent Bit metrics stream and exports **Betti numbers** that summarize the shape of recent behavior in metric space.
4
6
@@ -74,7 +76,7 @@ $$
74
76
75
77
If `n_raw < (m − 1)τ + 1`, TDA is skipped until enough data has accumulated.
76
78
77
-
This embedding follows the idea of **Takens’ theorem**, which states that, under mild conditions, the dynamics of a system can be reconstructed from delay-embedded observations of a single time series or a low-dimensional observable [2]. In this plugin, the observable is the multi-dimensional vector of aggregated metrics.
79
+
This embedding follows the idea of **Takens' theorem**, which states that, under mild conditions, the dynamics of a system can be reconstructed from delay-embedded observations of a single time series or a low-dimensional observable [2]. In this plugin, the observable is the multi-dimensional vector of aggregated metrics.
78
80
79
81
Intuitively:
80
82
@@ -115,11 +117,11 @@ Once the compressed lower-triangular distance matrix is built, it is passed to a
115
117
1.**Compression and C API**
116
118
117
119
* The dense `n_embed × n_embed` matrix is converted into Ripser's `compressed_lower_distance_matrix`.
118
-
* The wrapper function `flb_ripser_compute_betti_from_dense_distance` runs Ripser up to `max_dim = 2` (H₀, H₁, H₂), using coefficients in (\mathbb{Z}/2\mathbb{Z}), and accumulates persistence intervals into Betti numbers with a small persistence cutoff to ignore very short-lived noise features.
120
+
* The wrapper function `flb_ripser_compute_betti_from_dense_distance` runs Ripser up to `max_dim = 2` (H₀, H₁, H₂), using coefficients in ($\mathbb{Z}/2\mathbb{Z}$), and accumulates persistence intervals into Betti numbers with a small persistence cutoff to ignore very short-lived noise features.
119
121
120
122
2.**Interval aggregation**
121
123
122
-
* A callback (`interval_recorder`) receives all persistence intervals ((\text{birth}, \text{death})) from Ripser.
124
+
* A callback (`interval_recorder`) receives all persistence intervals ($\text{birth}$, $\text{death}$) from Ripser.
123
125
* Intervals with very small persistence are filtered out, and the remaining ones are counted per homology dimension to form Betti numbers.
124
126
125
127
3.**Multi-scale selection**
@@ -144,7 +146,7 @@ Each metric is timestamped with the current time at the moment of TDA computatio
144
146
145
147
## Interpreting Betti numbers
146
148
147
-
Topologically, Betti numbers count the number of “holes” of each dimension in a space:
149
+
Topologically, Betti numbers count the number of "holes" of each dimension in a space:
@@ -265,11 +267,11 @@ This configuration reconstructs the system in an effective dimension of `4 × fe
265
267
`tda` is particularly useful when:
266
268
267
269
* You suspect **non-linear or multi-modal behavior** in your system (e.g., on/off regimes, congestion collapse, periodic retries).
268
-
* Standard indicators (mean, percentiles, error rates) show “noise,” but you want to know whether that noise hides **coherent structure**.
270
+
* Standard indicators (mean, percentiles, error rates) show "noise," but you want to know whether that noise hides **coherent structure**.
269
271
* You want to build alerts not just on “levels” of metrics, but on **changes in the topology** of system behavior – for example:
270
272
271
-
* “Raise an alert if Betti₁ remains above 5 for more than 5 minutes.”
272
-
* “Mark windows where Betti₂ becomes non-zero as potential phase transitions.”
273
+
* "Raise an alert if Betti₁ remains above 5 for more than 5 minutes."
274
+
* "Mark windows where Betti₂ becomes non-zero as potential phase transitions."
273
275
274
276
Because the plugin operates on an arbitrary selection of metrics (chosen upstream via `metrics_selector` or by how you configure `fluentbit_metrics`), you can tailor the TDA to focus on:
275
277
@@ -282,5 +284,5 @@ Because the plugin operates on an arbitrary selection of metrics (chosen upstrea
282
284
283
285
## References
284
286
285
-
1. I. Donato, M. Gori, A. Sarti, “Persistent homology analysis of phase transitions,” _Physical Review E_, 93, 052138, 2016.
286
-
2. F. Takens, “Detecting strange attractors in turbulence,” in D. Rand and L.-S. Young (eds.), _Dynamical Systems and Turbulence_, Lecture Notes in Mathematics, vol. 898, Springer, 1981, pp. 366–381.
287
+
1. I. Donato, M. Gori, A. Sarti, "Persistent homology analysis of phase transitions," _Physical Review E_, 93, 052138, 2016.
288
+
2. F. Takens, "Detecting strange attractors in turbulence," in D. Rand and L.-S. Young (eds.), _Dynamical Systems and Turbulence_, Lecture Notes in Mathematics, vol. 898, Springer, 1981, pp. 366–381.
0 commit comments