Skip to content

Influx Cookbook

Home Assistant

Motion Sensor Status
from(bucket: "homeassistant")
  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)
  |> filter(fn: (r) => r.domain == "binary_sensor")
  |> filter(fn: (r) => r._field == "state")
  |> filter(fn: (r) => r._measurement =~ /motion/)
  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: true)
  |> fill(usePrevious: true)
  |> keep(columns: ["_time", "_value", "entity_id"])
  |> pivot(rowKey: ["_time"], columnKey: ["entity_id"], valueColumn: "_value")

Docker Performance

CPU load per container
from(bucket: "docker")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "docker_container_cpu")
  |> filter(fn: (r) => r["_field"] == "usage_percent")
  |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)
  |> keep(columns: ["_time", "container_name", "_value"])
  |> pivot(rowKey:["_time"], columnKey: ["container_name"], valueColumn: "_value")
RAM usage per container
from(bucket: "docker")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "docker_container_mem")
  |> filter(fn: (r) => r["_field"] == "usage_percent")
  |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)
  |> keep(columns: ["_time", "container_name", "_value"])
  |> pivot(rowKey:["_time"], columnKey: ["container_name"], valueColumn: "_value")

Proxmox Metric Server

CPU usage per host
from(bucket: "proxmox")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "system")
  |> filter(fn: (r) => r["_field"] == "cpu")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> keep(columns: ["_time", "_value", "host"])
  |> pivot(rowKey: ["_time"], columnKey: ["host"], valueColumn: "_value")
RAM total usage per host
from(bucket: "proxmox")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "system")
  |> filter(fn: (r) => r["_field"] == "mem")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> keep(columns: ["_time", "_value", "host"])
  |> pivot(rowKey: ["_time"], columnKey: ["host"], valueColumn: "_value")
RAM % usage per host
from(bucket: "proxmox")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "system")
  |> filter(fn: (r) => r["_field"] == "mem" or r._field == "maxmem")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> pivot(rowKey:["_time", "host"], columnKey: ["_field"], valueColumn: "_value")
  |> map(fn: (r) => ({
      _time: r._time,
      host: r.host,
      _value: (r.mem / r.maxmem) * 100.0
  }))
  |> pivot(rowKey:["_time"], columnKey: ["host"], valueColumn: "_value")
  |> sort(columns: ["_time"])
Uptime and allocation specs
from(bucket: "proxmox")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "system")
  |> filter(fn: (r) => r._field == "uptime" or r._field == "maxmem" or r._field == "cpus")
  |> filter(fn: (r) => r._value > 0)
  |> group(columns: ["_field", "host"])
  |> last()
  |> pivot(rowKey: ["host"], columnKey: ["_field"], valueColumn: "_value")
  |> drop(columns: ["_start", "_stop"])
  |> group()
Percent of max memory usage
from(bucket: "proxmox")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "system")
  |> filter(fn: (r) => r["_field"] == "mem" or r._field == "maxmem")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> pivot(rowKey:["_time", "host"], columnKey: ["_field"], valueColumn: "_value")
  |> map(fn: (r) => ({
      _time: r._time,
      host: r.host,
      _value: (r.mem / r.maxmem) * 100.0
  }))
  |> pivot(rowKey:["_time"], columnKey: ["host"], valueColumn: "_value")
  |> sort(columns: ["_time"])

Windows Performance

from(bucket: "john-pc")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "win_cpu")
  |> filter(fn: (r) => r["_field"] == "Percent_Processor_Time")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> keep(columns: ["_time", "_value", "instance"])