infra_wiki

Flame Boss exporter

A Go exporter on folly that reads barbecue cooks from Flame Boss's cloud into Prometheus, for a Grafana dashboard and cook alerts in Discord.

live

The Flame Boss is a barbecue controller. It reads a pit probe and three meat probes, and runs a blower fan to hold the pit at a set temperature. The controller sends its readings only to Flame Boss's cloud. The flameboss exporter on the folly Kubernetes cluster reads them from that cloud into Prometheus. The owner watches a cook on a Grafana dashboard and the lab's Tidbyt displays, and gets its alerts in Discord.

Use it#

SurfaceAddressWho can reach it
DashboardFlame Boss, at https://grafana.lolwtf.ca/d/flameboss-cookClients that route to folly's load-balancer range, with a Grafana sign-in
AlertsDiscord, through Alertmanager on follyThe owner's Discord channel
Metrics/metrics on port 8080 of the flameboss Service in monitoringPrometheus, or kubectl port-forward
Cook snapshot/api/cook on the same port, as JSONPods in folly, such as Tronbyt
Tidbyt appflameboss, described in Tidbyt appsThe displays that Tronbyt shows it on
Cook loghttps://myflameboss.com/en/cooks/<cook_id>Anyone with the cook ID, with no sign-in

Limits#

  • The exporter keeps a cook in memory. A restart starts the /api/cook graph, the elapsed time and the reached-set latch again, and forgets the lid and alarm events. Probe names and alarm settings return when the controller sends them.
  • The exporter sends no commands. It cannot change the set temperature or silence an alarm on the controller.
  • A cook's series exist while readings arrive. After 5 minutes without a reading, flameboss_cook_active is 0. After 30 minutes, the cook's series and its /api/cook entry go away, so the dashboard is empty between cooks and the Tidbyt app hides.
  • FlameBossCookStarted and FlameBossMeatProbeAtWrapPoint have severity notice, which the Discord route sends and the InfoInhibitor rule of the kube-prometheus-stack chart does not match. FlameBossVentAdvice keeps severity info, so it reaches Discord only while a warning or critical alert fires in the monitoring namespace.
  • Before its first connection, the exporter exports flameboss_broker_connected as 0 for the entry server, so FlameBossCloudUnreachable fires after 15 minutes if it never connects.
  • The Deployment carries the reloader.stakater.com/auto annotation, so a change to the flameboss-credentials Secret restarts the exporter, which reads its token only at start.

How it works#

The exporter signs in to myflameboss.com:8883 with the account's T-<user_id> username and token. The Flame Boss cloud names the server that each online controller is on. The exporter connects to that server and follows the controller when it moves. apps/flameboss/README.md has the protocol and every metric.

The controller sends temperatures in tenths of a degree Celsius, whatever its display shows. -32767 is an unplugged probe. Every exported temperature is in Fahrenheit.

Flux substitutes SECRET_FLAMEBOSS_USERNAME and SECRET_FLAMEBOSS_PASSWORD from clusters/folly/config/cluster-secrets.sops.yaml into the flameboss-credentials Secret.

Operate#

The rules watch the pit, the meat probes, the controller's alarms and the exporter. Their thresholds are in Fahrenheit, for a brisket or a pork butt. Operate the Flame Boss exporter lists each alert and its action.

Reference#

  • Source, protocol, metrics and the Tidbyt app: apps/flameboss/
  • Manifests: clusters/folly/monitoring/flameboss.yaml
  • Alerts: clusters/folly/monitoring/flameboss-rules.yaml, tested by clusters/folly/monitoring/flameboss_test.yaml
  • Dashboard: clusters/folly/monitoring/grafana-dashboards/flameboss.json
  • Image: ghcr.io/jonpulsifer/flameboss

Edit on GitHub

↑↓ move ↵ open esc close