Define data and configuration
Give the collector a focused task, such as reading local service status. Choose a unique id, version, description and author in the manifest. fields describes user settings of type text, password, number or boolean.
permissions describes access for the operator; it does not enforce OS restrictions. The collector inherits agent privileges, so identify the files, sockets and services it needs.
Implement the process contract
The agent sends one JSON object on stdin with protocol: 1 and saved settings in config. The collector must return exactly one JSON object on stdout and exit with code 0. Send diagnostics to stderr.
Start by feeding a test input manually. {"service":{"status":"running"}} can feed a service card with a status column. Keep startup logs out of the JSON result.
Input: {"protocol":1,"config":{"endpoint":"local-service"}}
Output: {"service":{"status":"running"}}Describe the interface
The package uses schemaVersion: 1 and protocol: 1. Add kind, title and the result’s top-level key in views. cards uses an object, table an array of objects, chart an object of numeric values, and logs an array of messages.
Columns specify key, label and optional unit. A mismatched view key prevents the dashboard from finding its data. Verify the manifest with a small sample before connecting a real service.
Build and package native executables
binaries uses linux-amd64, linux-arm64 and windows-amd64 keys. Each supported executable needs its bytes as base64 content and their SHA-256 in sha256. File format and architecture must match the platform key.
An executable is limited to 16 MiB and total binaries to 48 MiB. Collector stdout is limited to 512 KiB. Download and execution share a five-second budget, so give slow requests their own timeout and return compact data.
Validate on separate nodes
Upload the JSON through Modules in your own monitor and assign it to a test server. Check configuration, displayed results, errors, an unavailable target service and each declared platform. The independent Docker repository demonstrates a working collector and packaging.
Increment version when executables change: conflicting contents under an existing version are rejected. Publish source, a release and checksums separately from tokens and private settings. Website-based module submissions are not implemented yet; distribute packages from your own repository.
These instructions are based on the release documentation linked below. Commands containing example.com or SERVER_ID are templates: substitute values from your own dashboard. Check the matching release documentation when upgrading.