feat: custom checkers / template packages #852
Labels
No labels
1week
2weeks
Failed compliance check
IP cameras
NATS
Possible security concern
Review effort 1/5
Review effort 2/5
Review effort 3/5
Review effort 4/5
Review effort 5/5
UI
aardvark
accessibility
amd64
api
arm64
auth
back-end
bgp
blog
bug
build
checkers
ci-cd
cleanup
cnpg
codex
core
dependencies
device-management
documentation
duplicate
dusk
ebpf
enhancement
eta 1d
eta 1hr
eta 3d
eta 3hr
feature
fieldsurvey
github_actions
go
good first issue
help wanted
invalid
javascript
k8s
log-collector
mapper
mtr
needs-triage
netflow
network-sweep
observability
oracle
otel
plug-in
proton
python
question
reddit
redhat
research
rperf
rperf-checker
rust
sdk
security
serviceradar-agent
serviceradar-agent-gateway
serviceradar-web
serviceradar-web-ng
siem
snmp
sysmon
topology
ubiquiti
wasm
wontfix
zen-engine
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
carverauto/serviceradar#852
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Imported from GitHub.
Original GitHub issue: #2487
Original author: @mfreeman451
Original URL: https://github.com/carverauto/serviceradar/issues/2487
Original created: 2026-01-24T04:27:58Z
Is your feature request related to a problem?
Similiar to how zabbix pulls in their lightweight javascript engine to process user scripts/plugins/templates/whatever they call it, we might want to consider doing something similar, maybe with something a bit more civilized like lua.
High level idea:
Plugins get packaged up with yaml + lua code that define the checks.
Users can upload plugin package to SR and then deploy to an agent, agent conducts checks, etc.
There are some obvious security risks here that make this 100% a bad idea, we would have to convince ourselves first that we can address this, maybe with a sandbox or something.Looks like this is do-able and safe with wasi.
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
Imported GitHub comment.
Original author: @mfreeman451
Original URL: https://github.com/carverauto/serviceradar/issues/2487#issuecomment-3793795199
Original created: 2026-01-24T04:46:28Z
This Product Requirements Document (PRD) outlines the implementation of a WebAssembly (Wasm)-based plugin system for ServiceRadar.
By leveraging wazero, we provide a high-performance, zero-dependency, and securely sandboxed environment for user-defined checkers.
PRD: ServiceRadar Custom Plugin System (Wasm)
1. Overview
ServiceRadar currently supports fixed checkers (SNMP, ICMP, Sysmon). This project enables users to extend the agent's capabilities by uploading custom
.wasmmodules through the ServiceRadar UI. These modules will run in a highly restricted sandbox on the agents, communicating via a controlled host-guest bridge.2. Goals
3. User Stories
.wasmfile in the UI and assign it to a group of agents.4. Technical Architecture
4.1 The Agent "PluginService"
A new service implementing the
agent.Serviceinterface (seeinterfaces.go) will be added to the agent.wazero(pure Go, no CGO).PushLoopreceives aPluginConfigfrom the Gateway.PluginServicedownloads the.wasmblob via theObjectStore(already defined ininterfaces.go).PushLoop.4.2 The Guest-Host Bridge (Capabilities)
The sandbox will block all raw syscalls. Access to the outside world is provided strictly through Host Functions:
http_call(request)get_config()log(msg)agent.logger.submit_result(json)5. Implementation Plan (Agent-Side)
5.1 Configuration Changes (
pkg/agent/types.go)Add a new
PluginConfigstruct to handle the distribution of Wasm modules.5.2 The Plugin Service (
pkg/agent/plugin_service.go)This service will manage the
wazero.Runtime.5.3 Integration with
PushLoop(pkg/agent/push_loop.go)Update
fetchAndApplyConfigto recognize the new plugin section andpushStatusto include plugin results.fetchAndApplyConfigchecks ifPluginConfighas changed.WasmObjectKeyis found, the agent usesObjectStore.DownloadObjectto fetch the binary.proto.GatewayServiceStatusmessage.6. Security Model
contextcancellation to kill runaway plugins.http_callhost function, which validates against a domain allowlist.7. UI/Gateway Requirements (Brief)
.wasmfiles in the existingObjectStore(NATS JetStream/S3).ConfigVersionin the gRPCAgentConfigResponsewhenever a plugin is added or updated.8. Success Metrics
9. Next Steps for Development
wazerotogo.mod.plugin_service.goinpkg/agent.Imported GitHub comment.
Original author: @mfreeman451
Original URL: https://github.com/carverauto/serviceradar/issues/2487#issuecomment-3794284781
Original created: 2026-01-24T09:15:31Z
https://github.com/wazero/wazero/issues/2393 -- Code-signing entitlements needed for OSX