Skip to content

Commit 378792d

Browse files
author
root
committed
feat(flowd-go): switch to firefly backend for measurement flow events, v2.5.0+ only
Switch from fireflyp plugin to the firefly backend: - fireflyb backend now emits SciTags firefly datagrams at the start/end of measurement flows, sending to global.scitags.org by default - This allows perfSONAR measurement flows to appear in ESnet Stardust dashboard - Requires flowd-go >= 2.5.0 (no longer support 2.4.x) Update documentation: - Fix ESnet Stardust dashboard link to the 12-hour SciTags data view - Clarify firefly backend vs plugin distinction - Remove 2.4.2 references and --no-firefly-receiver obsolete flag - Update version to 1.2.0 for perfSONAR-install-flowd-go.sh Updated files: - perfSONAR-install-flowd-go.sh (v1.2.0) - main installation script - perfSONAR-toolkit-install.sh - remove obsolete flags - install-perfsonar-toolkit.md - update ESnet Stardust integration docs - scitags-fireflies.md - clarify backend/plugin distinction - scripts.sha256, hash sidecars - update hashes
1 parent 4255fcd commit 378792d

File tree

5 files changed

+76
-84
lines changed

5 files changed

+76
-84
lines changed

docs/perfsonar/scitags-fireflies.md

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ single statically-linked binary (with embedded eBPF programs for packet marking
5757
| **Packet marking** | Uses eBPF to stamp the IPv6 Flow Label on egress packets matching tracked flows |
5858
| **Firefly emission** | Sends UDP fireflies to local or remote collectors when flows start, continue, or end |
5959
| **perfSONAR plugin** | Built-in plugin that marks *all* egress traffic with a configured experiment/activity ID — ideal for dedicated measurement hosts |
60-
| **fireflyp plugin** | Listens for incoming firefly UDP datagrams and relays them verbatim to one or more upstream collectors (global or regional) before processing them locally — requires flowd-go 2.5.0 |
60+
| **firefly backend** | Sends JSON firefly datagrams at the start, during, and end of flows to a collector (default: global.scitags.org) — requires flowd-go >= 2.5.0 |
6161
| **Low overhead** | Statically compiled Go binary; no Python, no containers, no runtime dependencies beyond `libz` and `libelf` (typically already present) |
6262
| **RPM packaged** | Available from the SciTags repository for EL9 (`x86_64` and `aarch64`) |
6363

@@ -82,24 +82,26 @@ For perfSONAR deployments the full pipeline is:
8282
perfSONAR tests
8383
8484
85-
┌──────────────┐ all flows ┌──────────────────────┐
86-
│ perfsonar │──────────────▶ │ marker backend │
87-
│ plugin │ │ (eBPF IPv6 label) │
88-
└──────────────┘ └──────────────────────┘
89-
90-
Local applications
91-
(pScheduler etc.)
92-
│ UDP firefly
93-
94-
┌──────────────┐ forward ┌──────────────────────┐
95-
│ fireflyp │──────────────▶ │ global.scitags.org │
96-
│ plugin │ │ (UDP collector) │
97-
└──────────────┘ └──────────────────────┘
85+
┌──────────────┐ all flows ┌──────────────────────────┐
86+
│ perfsonar │──────────────▶ │ marker backend │
87+
│ plugin │ │ (eBPF IPv6 Flow Label) │
88+
└──────────────┘ └──────────────────────────┘
89+
90+
├─────────────────────┐
91+
│ (start/end events) │
92+
▼ ▼
93+
┌──────────────────────────────────────────┐
94+
│ firefly backend │
95+
│ (generates flow event notifications) │
96+
│ │
97+
│ → global.scitags.org (UDP), collected in │
98+
│ ESnet Stardust dashboard │
99+
└──────────────────────────────────────────┘
98100
```
99101

100102
For perfSONAR deployments the recommended configuration uses the **perfsonar** plugin (marks all egress
101-
traffic) together with the **marker** backend (eBPF-based IPv6 Flow Label stamping) and the **fireflyp**
102-
plugin (forwarding firefly announcements to regional or global collectors).
103+
traffic), the **marker** backend (eBPF-based IPv6 Flow Label stamping), and the **firefly** backend
104+
(emitting flow start/end notifications to a global or regional collector).
103105

104106
---
105107

@@ -111,13 +113,12 @@ view of active flows across the network. Collectors can be operated at site, reg
111113
### ESnet Stardust — the global SciTags monitoring platform
112114

113115
Firefly datagrams sent to `global.scitags.org` are ingested by the
114-
**[ESnet Stardust](https://stardust.es.net/)** platform, which provides a
115-
[Scientific Network Tags dashboard](https://dashboard.stardust.es.net/goto/dfejd22wk1k3kb?orgId=2)
116+
**[ESnet Stardust](https://dashboard.stardust.es.net/d/b8dddac0-5b24-4739-9c8d-e88a05c1344f/scientific-network-tags3a-rande-dashboard?orgId=2&from=now-12h&to=now&timezone=browser)** platform, which provides a dashboard
116117
showing real-time and historical flow counts broken down by experiment and activity across all
117118
participating sites.
118119

119-
> **The `fireflyp` plugin is the only mechanism by which perfSONAR measurement flows appear in
120-
> Stardust.** eBPF packet marking alone (the `marker` backend) stamps packets in-flight but does
120+
> **The `firefly` backend is the primary mechanism by which perfSONAR measurement flows appear in
121+
> Stardust.** The `marker` backend stamps packets in-flight but does not generate flow event notifications.
121122
> *not* notify any collector. Only when flowd-go also runs the `fireflyp` plugin — forwarding
122123
> locally-emitted firefly datagrams to `global.scitags.org` — will the flows be visible in the
123124
> Stardust monitoring system.

docs/perfsonar/tools_scripts/perfSONAR-install-flowd-go.sh

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ set -euo pipefail
44
# perfSONAR-install-flowd-go.sh
55
# Install and configure flowd-go (SciTags flow-marking daemon) for perfSONAR hosts.
66
#
7-
# Version: 1.1.0 - 2026-02-27
7+
# Version: 1.2.0 - 2026-03-04
8+
# - Switch from fireflyp plugin to firefly backend for emitting flow start/end events
9+
# - Update to flowd-go 2.5.0+ (requires flowd-go >= 2.5.0)
10+
# - Remove support for flowd-go 2.4.x (use v1.1.0 of this script for 2.4.x support)
11+
# - Simplify configuration: firefly backend replaces fireflyp plugin for main flow emission
12+
# - Update ESnet Stardust documentation links
813
# Author: Shawn McKee, University of Michigan
914
# Acknowledgements: Supported by IRIS-HEP and OSG-LHC
1015
#
@@ -16,27 +21,23 @@ set -euo pipefail
1621
# --activity-id N Set the SciTags activity ID (default: 2 = network testing)
1722
# --interfaces LIST Comma-separated list of NIC names for packet marking
1823
# (auto-detected from /etc/perfSONAR-multi-nic-config.conf if omitted)
19-
# --firefly-receiver HOST Firefly collector address for the fireflyp plugin
24+
# --firefly-receiver HOST Collector address for the fireflyb backend
2025
# (default: global.scitags.org; set to empty to disable)
2126
# --firefly-receiver-port N UDP port on the firefly collector (default: 10514)
22-
# --firefly-bind-port N Local UDP port flowd-go listens on for fireflies (default: 10514)
23-
# --no-firefly-receiver Disable the fireflyp plugin entirely (eBPF marking only)
2427
# --list-experiments Show available experiment IDs and exit
2528
# --yes Skip interactive prompts
2629
# --dry-run Preview actions without making changes
2730
# --uninstall Remove flowd-go and its configuration
2831
# --version Show script version
2932
# --help, -h Show this help message
3033
#
31-
# Firefly Receiver:
32-
# When --firefly-receiver is set (the default), flowd-go will also run the
33-
# 'fireflyp' plugin which listens for locally-emitted firefly UDP datagrams
34-
# and forwards them verbatim to the configured collector. This requires
35-
# flowd-go >= 2.5.0 (built after scitags/flowd-go#49 is merged). Older
36-
# versions will ignore or reject the 'fireflyp' stanza; use --no-firefly-
37-
# receiver if you are running an older RPM.
38-
39-
VERSION="1.1.0"
34+
# Firefly Backend:
35+
# When --firefly-receiver is set (the default), the 'firefly' backend in flowd-go
36+
# will emit firefly JSON datagrams at the start and end of each flow, sending them
37+
# to the configured collector. This allows perfSONAR measurement flows to be tracked
38+
# by ESnet Stardust and other SciTags-aware systems. Requires flowd-go >= 2.5.0.
39+
40+
VERSION="1.2.0"
4041
PROG_NAME="$(basename "$0")"
4142
LOG_FILE="/var/log/perfSONAR-install-flowd-go.log"
4243

@@ -49,14 +50,14 @@ DRY_RUN=false
4950
UNINSTALL=false
5051
MULTI_NIC_CONF="/etc/perfSONAR-multi-nic-config.conf"
5152
FLOWD_GO_CONF="/etc/flowd-go/conf.yaml"
52-
FLOWD_GO_RPM_URL="https://linuxsoft.cern.ch/repos/scitags9al-testing/x86_64/os/Packages/f/flowd-go-2.4.2-1.x86_64.rpm"
53+
FLOWD_GO_RPM_URL="https://linuxsoft.cern.ch/repos/scitags9al-testing/x86_64/os/Packages/f/flowd-go-2.5.0-1.x86_64.rpm"
5354

54-
# Firefly receiver defaults
55+
# Firefly backend defaults
5556
# global.scitags.org is the authoritative global SciTags firefly collector.
57+
# Fireflies are sent at the start and end of each flow.
5658
# Regional DNS aliases (e.g. us-east.scitags.org) may be used in future.
5759
FIREFLY_RECEIVER="global.scitags.org"
5860
FIREFLY_RECEIVER_PORT=10514
59-
FIREFLY_BIND_PORT=10514
6061

6162
# Experiment name lookup
6263
declare -A EXPERIMENT_NAMES=(
@@ -191,26 +192,32 @@ build_config() {
191192
done
192193
iface_yaml+="]"
193194

194-
# Build optional firefly plugin block
195-
# Requires flowd-go >= 2.5.0 (scitags/flowd-go#49).
196-
# Note: In flowd-go 2.5.0+, the YAML key is 'firefly' (not 'fireflyp').
197-
local fireflyp_block=""
195+
# Build perfsonar plugin block (always included)
196+
local plugins_block
197+
plugins_block=$(printf 'plugins:\n perfsonar:\n activityId: %s\n experimentId: %s' \
198+
"$ACTIVITY_ID" "$EXPERIMENT_ID")
199+
200+
# Build firefly backend block
201+
local firefly_backend=""
198202
if [ -n "$FIREFLY_RECEIVER" ]; then
199-
fireflyp_block=$(printf ' firefly:\n bindAddress: "127.0.0.1"\n bindPort: %s\n fireflyReceivers:\n - address: "%s"\n port: %s\n' \
200-
"$FIREFLY_BIND_PORT" "$FIREFLY_RECEIVER" "$FIREFLY_RECEIVER_PORT")
203+
firefly_backend=$(printf ' firefly:\n sendToCollector: true\n collectorAddress: "%s"\n collectorPort: %s\n prependSyslog: false\n enrich: false' \
204+
"$FIREFLY_RECEIVER" "$FIREFLY_RECEIVER_PORT")
201205
fi
202206

203-
local plugins_block
204-
if [ -n "$fireflyp_block" ]; then
205-
plugins_block=$(printf 'plugins:\n perfsonar:\n activityId: %s\n experimentId: %s\n%s' \
206-
"$ACTIVITY_ID" "$EXPERIMENT_ID" "$fireflyp_block")
207+
# Build marker backend block
208+
local marker_backend
209+
marker_backend=$(printf ' marker:\n targetInterfaces: %s\n markingStrategy: label\n forceHookRemoval: true' \
210+
"$iface_yaml")
211+
212+
# Combine everything
213+
local backends_block
214+
if [ -n "$firefly_backend" ]; then
215+
backends_block=$(printf 'backends:\n%s\n%s' "$firefly_backend" "$marker_backend")
207216
else
208-
plugins_block=$(printf 'plugins:\n perfsonar:\n activityId: %s\n experimentId: %s' \
209-
"$ACTIVITY_ID" "$EXPERIMENT_ID")
217+
backends_block=$(printf 'backends:\n%s' "$marker_backend")
210218
fi
211219

212-
printf '%s\n\nbackends:\n marker:\n targetInterfaces: %s\n markingStrategy: label\n forceHookRemoval: true\n' \
213-
"$plugins_block" "$iface_yaml"
220+
printf '%s\n\n%s\n' "$plugins_block" "$backends_block"
214221
}
215222

216223
install_flowd_go() {
@@ -284,7 +291,7 @@ install_flowd_go() {
284291
echo " Activity: network testing (ID=$ACTIVITY_ID)"
285292
if [ -n "$FIREFLY_RECEIVER" ]; then
286293
echo " Firefly collector: $FIREFLY_RECEIVER:$FIREFLY_RECEIVER_PORT"
287-
echo " (fireflyp plugin forwards locally-received fireflies to the collector)"
294+
echo " (fireflyb backend sends fireflies at start and end of measurement flows)"
288295
else
289296
echo " Firefly collector: disabled (eBPF packet marking only)"
290297
fi
@@ -349,12 +356,7 @@ parse_cli() {
349356
--firefly-receiver-port)
350357
FIREFLY_RECEIVER_PORT="${2:-10514}"
351358
shift 2 ;;
352-
--firefly-bind-port)
353-
FIREFLY_BIND_PORT="${2:-10514}"
354-
shift 2 ;;
355-
--no-firefly-receiver)
356-
FIREFLY_RECEIVER=""
357-
shift ;;
359+
358360
--list-experiments)
359361
list_experiments
360362
exit 0 ;;

docs/perfsonar/tools_scripts/perfSONAR-toolkit-install.sh

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ set -euo pipefail
3232
# --dry-run Print steps but do not execute destructive operations
3333
# --no-flowd-go Skip flowd-go (SciTags) installation (installed by default)
3434
# --experiment-id N SciTags experiment ID for flowd-go (1-14; interactive prompt if omitted)
35-
# --no-firefly-receiver Disable fireflyp plugin in flowd-go config (use with flowd-go 2.4.x RPM)
36-
# Requires flowd-go >= 2.5.0; omit with current 2.4.2 RPM to avoid errors
35+
3736
# --exporter-allowlist Override default exporter endpoint allow-list (comma-separated CIDRs/IPs)
3837
# Default: AGLT2 + CERN monitoring subnets (matching container protection)
3938
# (/node_exporter/metrics and /perfsonar_host_exporter/)
@@ -48,7 +47,6 @@ AUTO_YES=false
4847
NON_INTERACTIVE=false
4948
INSTALL_FLOWD_GO=true
5049
FLOWD_GO_EXPERIMENT_ID=""
51-
NO_FIREFLY_RECEIVER=false
5250
NO_EXPORTER_ACLS=false
5351
BUNDLE="toolkit"
5452
LE_FQDN=""
@@ -108,7 +106,7 @@ parse_cli() {
108106
--email) LE_EMAIL="${2:-}"; shift 2;;
109107
--no-flowd-go) INSTALL_FLOWD_GO=false; shift;;
110108
--experiment-id) FLOWD_GO_EXPERIMENT_ID="${2:-}"; shift 2;;
111-
--no-firefly-receiver) NO_FIREFLY_RECEIVER=true; shift;;
109+
112110
--exporter-allowlist) EXPORTER_ALLOWLIST="${2:-}"; shift 2;;
113111
--no-exporter-acls) NO_EXPORTER_ACLS=true; EXPORTER_ALLOWLIST=""; shift;;
114112
--help|-h) sed -n '1,80p' "$0"; exit 0;;
@@ -335,7 +333,7 @@ step_flowd_go() {
335333
local flowd_cmd=("$HELPER_DIR/tools_scripts/perfSONAR-install-flowd-go.sh")
336334
[ "$AUTO_YES" = true ] && flowd_cmd+=(--yes)
337335
[ -n "$FLOWD_GO_EXPERIMENT_ID" ] && flowd_cmd+=(--experiment-id "$FLOWD_GO_EXPERIMENT_ID")
338-
[ "$NO_FIREFLY_RECEIVER" = true ] && flowd_cmd+=(--no-firefly-receiver)
336+
339337

340338
if [ -x "$HELPER_DIR/tools_scripts/perfSONAR-install-flowd-go.sh" ]; then
341339
run "${flowd_cmd[@]}" || true

docs/perfsonar/tools_scripts/scripts.sha256

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ e1944123e17c89e8f202cca960f147397d64ae1e675af132c84b02ced2564abb node_exporter.
1818
50dfab90bc21d5c566b713f48b00b079a32a8b8756432a0d0f66ac6a64e6e581 perfSONAR-health-monitor.sh
1919
e184c633ca9ca5d3d79321213843a4eaa951e5596d3dc05f082e5f76e860e580 install_tools_scripts.sh
2020
7be726de5dfdbe8f7f5ac8e803b0b71e8f98f1ba274ca70b42f8eba4822cc67b perfSONAR-orchestrator.sh
21-
26ebf225dd223ed783190e395fd21b6346d95abf036434c4b51f8cc2db5cad68 perfSONAR-toolkit-install.sh
21+
712a2b699df90fca02e7c04912beb0aac991bc2f56ea785636683d7f3fb13180 perfSONAR-toolkit-install.sh
2222
cd0e7afd1ca7a20a972e585018802be0cb6f67cd3ffee449dea45d785c23145a perfSONAR-configure-exporter-acls.sh
2323
2615a29d65e285391adb547046584c4534ea548e69571b67e0cf35773b010c57 perfSONAR-diagnostic-report.sh
24-
6854dc66a5d11e4c2fe5a439c4f3649d93f4e376fe8567c96f6abec0d42c6a6b perfSONAR-install-flowd-go.sh
24+
ea703d8e330276bfd09af6d1415aa472b62813a861c6f310d93cfd378cfa8ad6 perfSONAR-install-flowd-go.sh
2525
39d226a857eb1a0956003c75ca8b558fcb55c63176286ca9597f031d08cb38a7 docs/perfsonar/tools_scripts/update-perfsonar-deployment.sh

docs/personas/quick-deploy/install-perfsonar-toolkit.md

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,40 +1587,32 @@ service:
15871587
1. Downloads and installs the `flowd-go` RPM from the SciTags repository
15881588
2. Prompts for the SciTags experiment ID (ATLAS, CMS, LHCb, etc.)
15891589
3. Auto-detects target interfaces from `/etc/perfSONAR-multi-nic-config.conf` or the routing table
1590-
4. Writes `/etc/flowd-go/conf.yaml` with the `perfsonar` plugin, `marker` backend, and (if supported) the `fireflyp` plugin
1590+
4. Writes `/etc/flowd-go/conf.yaml` with the `perfsonar` plugin, `firefly` backend, and `marker` backend
15911591
5. Enables and starts the `flowd-go` systemd service
15921592
1593-
### ESnet Stardust Integration (fireflyp plugin)
1593+
### ESnet Stardust Integration (firefly backend)
15941594
1595-
The `fireflyp` plugin is an optional flowd-go component that **forwards IPv6 firefly datagrams** to a
1596-
central SciTags collector. The default target is `global.scitags.org:10514`, the authoritative global
1597-
aggregation service operated by the SciTags project. Flows forwarded there become visible in
1598-
[ESnet Stardust](https://stardust.es.net/), ESnet's network-level flow visualization platform, allowing
1595+
The `firefly` backend is a flowd-go component that **emits SciTags firefly datagrams at the start and end of each flow**, sending them to a central SciTags collector. The default target is `global.scitags.org:10514`, the authoritative global aggregation service operated by the SciTags project. Fireflies sent there become visible in
1596+
[ESnet Stardust](https://dashboard.stardust.es.net/d/b8dddac0-5b24-4739-9c8d-e88a05c1344f/scientific-network-tags3a-rande-dashboard?orgId=2&from=now-12h&to=now&timezone=browser), ESnet's network-level flow visualization platform, allowing
15991597
collaborators and network operators to attribute traffic to specific experiments.
16001598
1601-
!!! warning "fireflyp requires flowd-go 2.5.0"
1599+
!!! note "flowd-go 2.5.0 or later required"
16021600
1603-
The `fireflyp` plugin is only available in flowd-go builds that include
1604-
[scitags/flowd-go#49](https://github.com/scitags/flowd-go/issues/49).
1605-
The current RPM release (2.4.2) does **not** include this plugin.
1601+
The `firefly` backend requires flowd-go >= 2.5.0. This version is the current standard
1602+
and is installed by default by all perfSONAR installation methods.
16061603
1607-
- If you are running **2.4.2**, pass `--no-firefly-receiver` to the install script to disable
1608-
the fireflyp stanza (eBPF flow marking still works; datagrams just are not forwarded upstream).
1609-
- Once a ≥ 2.5.0 RPM is published, re-run the install script or manually add the `fireflyp`
1610-
stanza to `/etc/flowd-go/conf.yaml`.
1611-
1612-
**Install with fireflyp enabled** (flowd-go ≥ 2.5.0):
1604+
**Standard installation with firefly backend enabled**:
16131605
16141606
```bash
16151607
/opt/perfsonar-toolkit/tools_scripts/perfSONAR-install-flowd-go.sh \
1616-
--experiment-id 1 --firefly-receiver global.scitags.org --yes
1608+
--experiment-id 1 --yes
16171609
```
16181610
1619-
**Install without fireflyp** (current 2.4.2 RPM):
1611+
**Install with custom firefly collector address**:
16201612
16211613
```bash
16221614
/opt/perfsonar-toolkit/tools_scripts/perfSONAR-install-flowd-go.sh \
1623-
--experiment-id 1 --no-firefly-receiver --yes
1615+
--experiment-id 1 --firefly-receiver collector.example.org --yes
16241616
```
16251617
16261618
??? info "Flags reference"
@@ -1633,7 +1625,6 @@ collaborators and network operators to attribute traffic to specific experiments
16331625
| `--list-experiments` | Show experiment IDs and exit |
16341626
| `--firefly-receiver HOST` | Firefly collector address (default: `global.scitags.org`) |
16351627
| `--firefly-receiver-port N` | UDP port on the collector (default: 10514) |
1636-
| `--no-firefly-receiver` | Disable fireflyp plugin (eBPF marking only; use with flowd-go 2.4.x) |
16371628
| `--yes` | Skip interactive prompts |
16381629
| `--dry-run` | Preview without changes |
16391630
| `--uninstall` | Remove flowd-go and configuration |

0 commit comments

Comments
 (0)