/** * Remaining host / app chart definitions (merged into STATIC_CHART_DEFS). */ /** @type {import('./metrics.js').ChartDef[]} */ export const MORE_STATIC_CHARTS = [ // Memory extras { id: 'mem.high_low', name: 'mem.high_low', context: 'mem.high_low', title: 'High / low memory watermarks', units: 'MiB', family: 'watermarks', chartType: 'line', priority: 264, plugin: 'proc', dimensions: [ { id: 'high', name: 'high', algorithm: 'absolute' }, { id: 'low', name: 'low', algorithm: 'absolute' }, ], }, { id: 'mem.cma', name: 'mem.cma', context: 'mem.cma', title: 'Contiguous Memory Allocator', units: 'MiB', family: 'cma', chartType: 'stacked', priority: 265, plugin: 'proc', dimensions: [ { id: 'total', name: 'total', algorithm: 'absolute' }, { id: 'free', name: 'free', algorithm: 'absolute' }, ], }, { id: 'mem.directmaps', name: 'mem.directmaps', context: 'mem.directmaps', title: 'DirectMap page sizes', units: 'MiB', family: 'directmap', chartType: 'stacked', priority: 266, plugin: 'proc', dimensions: [ { id: '4k', name: '4k', algorithm: 'absolute' }, { id: '2M', name: '2M', algorithm: 'absolute' }, { id: '1G', name: '1G', algorithm: 'absolute' }, ], }, { id: 'mem.ksm_savings', name: 'mem.ksm_savings', context: 'mem.ksm_savings', title: 'KSM memory savings', units: 'MiB', family: 'ksm', chartType: 'line', priority: 267, plugin: 'proc', dimensions: [ { id: 'offered', name: 'offered', algorithm: 'absolute' }, { id: 'saved', name: 'saved', algorithm: 'absolute' }, ], }, { id: 'mem.ksm_ratios', name: 'mem.ksm_ratios', context: 'mem.ksm_ratios', title: 'KSM savings ratio', units: 'percentage', family: 'ksm', chartType: 'line', priority: 268, plugin: 'proc', dimensions: [{ id: 'savings', name: 'savings', algorithm: 'absolute' }], }, { id: 'mem.thp_file', name: 'mem.thp_file', context: 'mem.thp_file', title: 'THP file events', units: 'events/s', family: 'thp', chartType: 'line', priority: 269, plugin: 'proc', dimensions: [ { id: 'alloc', name: 'alloc', algorithm: 'incremental' }, { id: 'fallback', name: 'fallback', algorithm: 'incremental' }, { id: 'mapped', name: 'mapped', algorithm: 'incremental' }, ], }, { id: 'mem.thp_zero', name: 'mem.thp_zero', context: 'mem.thp_zero', title: 'THP zero-page events', units: 'events/s', family: 'thp', chartType: 'line', priority: 270, plugin: 'proc', dimensions: [ { id: 'alloc', name: 'alloc', algorithm: 'incremental' }, { id: 'failed', name: 'failed', algorithm: 'incremental' }, ], }, { id: 'mem.thp_collapse', name: 'mem.thp_collapse', context: 'mem.thp_collapse', title: 'THP collapse events', units: 'events/s', family: 'thp', chartType: 'line', priority: 271, plugin: 'proc', dimensions: [ { id: 'alloc', name: 'alloc', algorithm: 'incremental' }, { id: 'failed', name: 'failed', algorithm: 'incremental' }, ], }, { id: 'mem.thp_swapout', name: 'mem.thp_swapout', context: 'mem.thp_swapout', title: 'THP swapout events', units: 'events/s', family: 'thp', chartType: 'line', priority: 272, plugin: 'proc', dimensions: [ { id: 'swapout', name: 'swapout', algorithm: 'incremental' }, { id: 'fallback', name: 'fallback', algorithm: 'incremental' }, ], }, { id: 'mem.thp_compact', name: 'mem.thp_compact', context: 'mem.thp_compact', title: 'Memory compaction', units: 'events/s', family: 'thp', chartType: 'line', priority: 273, plugin: 'proc', dimensions: [ { id: 'success', name: 'success', algorithm: 'incremental' }, { id: 'fail', name: 'fail', algorithm: 'incremental' }, { id: 'stall', name: 'stall', algorithm: 'incremental' }, ], }, { id: 'mem.pagetype_global', name: 'mem.pagetype_global', context: 'mem.pagetype_global', title: 'Free pages by order (global)', units: 'pages', family: 'pagetype', chartType: 'stacked', priority: 274, plugin: 'proc', dimensions: Array.from({ length: 11 }, (_, i) => ({ id: `order${i}`, name: `order${i}`, algorithm: 'absolute', })), }, { id: 'system.softirqs', name: 'system.softirqs', context: 'system.softirqs', title: 'SoftIRQs by vector', units: 'softirqs/s', family: 'softirq', chartType: 'stacked', priority: 781, plugin: 'proc', dimensions: [ { id: 'HI', name: 'HI', algorithm: 'incremental' }, { id: 'TIMER', name: 'TIMER', algorithm: 'incremental' }, { id: 'NET_TX', name: 'NET_TX', algorithm: 'incremental' }, { id: 'NET_RX', name: 'NET_RX', algorithm: 'incremental' }, { id: 'BLOCK', name: 'BLOCK', algorithm: 'incremental' }, { id: 'IRQ_POLL', name: 'IRQ_POLL', algorithm: 'incremental' }, { id: 'TASKLET', name: 'TASKLET', algorithm: 'incremental' }, { id: 'SCHED', name: 'SCHED', algorithm: 'incremental' }, { id: 'HRTIMER', name: 'HRTIMER', algorithm: 'incremental' }, { id: 'RCU', name: 'RCU', algorithm: 'incremental' }, ], }, { id: 'ipv4.icmpmsg', name: 'ipv4.icmpmsg', context: 'ipv4.icmpmsg', title: 'IPv4 ICMP message types', units: 'messages/s', family: 'icmp', chartType: 'line', priority: 757, plugin: 'proc', dimensions: [ { id: 'InEchoes', name: 'InEchoes', algorithm: 'incremental' }, { id: 'OutEchoes', name: 'OutEchoes', algorithm: 'incremental' }, { id: 'InDestUnreachs', name: 'InDestUnreachs', algorithm: 'incremental' }, { id: 'OutDestUnreachs', name: 'OutDestUnreachs', algorithm: 'incremental' }, { id: 'InTimeExcds', name: 'InTimeExcds', algorithm: 'incremental' }, { id: 'OutTimeExcds', name: 'OutTimeExcds', algorithm: 'incremental' }, { id: 'InRedirects', name: 'InRedirects', algorithm: 'incremental' }, { id: 'OutRedirects', name: 'OutRedirects', algorithm: 'incremental' }, ], }, { id: 'ipv6.packets', name: 'ipv6.packets', context: 'ipv6.packets', title: 'IPv6 packets', units: 'packets/s', family: 'ipv6', chartType: 'line', priority: 758, plugin: 'proc', dimensions: [ { id: 'received', name: 'received', algorithm: 'incremental' }, { id: 'sent', name: 'sent', algorithm: 'incremental' }, { id: 'forwarded', name: 'forwarded', algorithm: 'incremental' }, { id: 'delivered', name: 'delivered', algorithm: 'incremental' }, ], }, { id: 'ipv6.errors', name: 'ipv6.errors', context: 'ipv6.errors', title: 'IPv6 errors', units: 'packets/s', family: 'ipv6', chartType: 'line', priority: 759, plugin: 'proc', dimensions: [ { id: 'InHdrErrors', name: 'InHdrErrors', algorithm: 'incremental' }, { id: 'InAddrErrors', name: 'InAddrErrors', algorithm: 'incremental' }, { id: 'InDiscards', name: 'InDiscards', algorithm: 'incremental' }, { id: 'OutDiscards', name: 'OutDiscards', algorithm: 'incremental' }, { id: 'InTruncatedPkts', name: 'InTruncatedPkts', algorithm: 'incremental' }, ], }, { id: 'ipv6.icmp', name: 'ipv6.icmp', context: 'ipv6.icmp', title: 'IPv6 ICMP', units: 'messages/s', family: 'ipv6', chartType: 'line', priority: 760, plugin: 'proc', dimensions: [ { id: 'received', name: 'received', algorithm: 'incremental' }, { id: 'sent', name: 'sent', algorithm: 'incremental' }, { id: 'InErrors', name: 'InErrors', algorithm: 'incremental' }, { id: 'OutErrors', name: 'OutErrors', algorithm: 'incremental' }, ], }, { id: 'net.conntrack', name: 'net.conntrack', context: 'net.conntrack', title: 'Connection tracking', units: 'connections', family: 'conntrack', chartType: 'line', priority: 770, plugin: 'proc', dimensions: [ { id: 'entries', name: 'entries', algorithm: 'absolute' }, { id: 'max', name: 'max', algorithm: 'absolute' }, { id: 'searched', name: 'searched', algorithm: 'incremental' }, { id: 'found', name: 'found', algorithm: 'incremental' }, { id: 'new', name: 'new', algorithm: 'incremental' }, { id: 'invalid', name: 'invalid', algorithm: 'incremental' }, { id: 'drop', name: 'drop', algorithm: 'incremental' }, { id: 'insert_failed', name: 'insert_failed', algorithm: 'incremental' }, ], }, { id: 'system.inotify', name: 'system.inotify', context: 'system.inotify', title: 'Inotify watches', units: 'watches', family: 'inotify', chartType: 'line', priority: 790, plugin: 'proc', dimensions: [ { id: 'max_user_watches', name: 'max_user_watches', algorithm: 'absolute' }, { id: 'max_user_instances', name: 'max_user_instances', algorithm: 'absolute' }, ], }, { id: 'md.health', name: 'md.health', context: 'md.health', title: 'MD RAID arrays', units: 'arrays', family: 'md', chartType: 'line', priority: 4500, plugin: 'mdstat', dimensions: [ { id: 'active', name: 'active', algorithm: 'absolute' }, { id: 'degraded', name: 'degraded', algorithm: 'absolute' }, { id: 'recovering', name: 'recovering', algorithm: 'absolute' }, ], }, { id: 'system.power', name: 'system.power', context: 'system.power', title: 'Package power (RAPL)', units: 'Watts', family: 'power', chartType: 'line', priority: 7100, plugin: 'powercap', dimensions: [{ id: 'package', name: 'package', algorithm: 'absolute' }], }, { id: 'mem.edac', name: 'mem.edac', context: 'mem.edac', title: 'EDAC memory errors', units: 'errors', family: 'edac', chartType: 'line', priority: 275, plugin: 'edac', dimensions: [ { id: 'corrected', name: 'corrected', algorithm: 'absolute' }, { id: 'uncorrected', name: 'uncorrected', algorithm: 'absolute' }, ], }, { id: 'peardata.cpu', name: 'peardata.cpu', context: 'peardata.cpu', title: 'Agent CPU usage', units: 'percentage', family: 'self', chartType: 'area', priority: 9000, plugin: 'self', dimensions: [ { id: 'user', name: 'user', algorithm: 'absolute' }, { id: 'system', name: 'system', algorithm: 'absolute' }, ], }, { id: 'peardata.mem', name: 'peardata.mem', context: 'peardata.mem', title: 'Agent memory', units: 'MiB', family: 'self', chartType: 'area', priority: 9010, plugin: 'self', dimensions: [ { id: 'rss', name: 'rss', algorithm: 'absolute' }, { id: 'heap', name: 'heap', algorithm: 'absolute' }, ], }, { id: 'peardata.charts', name: 'peardata.charts', context: 'peardata.charts', title: 'Agent chart cardinality', units: 'charts', family: 'self', chartType: 'line', priority: 9020, plugin: 'self', dimensions: [{ id: 'registered', name: 'registered', algorithm: 'absolute' }], }, ] export function makeDiskSvctmChart(disk) { return { id: `disk_svctm.${disk}`, name: `disk_svctm.${disk}`, context: 'disk.svctm', title: `Disk ${disk} service time`, units: 'milliseconds/operation', family: disk, chartType: 'line', priority: 2090, plugin: 'proc', dimensions: [{ id: 'svctm', name: 'svctm', algorithm: 'absolute' }], } } export function makeDiskMergedChart(disk) { return { id: `disk_merged.${disk}`, name: `disk_merged.${disk}`, context: 'disk.merged', title: `Disk ${disk} merged operations`, units: 'operations/s', family: disk, chartType: 'line', priority: 2095, plugin: 'proc', dimensions: [ { id: 'reads', name: 'reads', algorithm: 'incremental' }, { id: 'writes', name: 'writes', algorithm: 'incremental' }, ], } } export function makeDiskFlushChart(disk) { return { id: `disk_flush.${disk}`, name: `disk_flush.${disk}`, context: 'disk.flush', title: `Disk ${disk} flush requests`, units: 'operations/s', family: disk, chartType: 'line', priority: 2096, plugin: 'proc', dimensions: [{ id: 'operations', name: 'operations', algorithm: 'incremental' }], } } export function makeNetDuplexChart(iface) { return { id: `net_duplex.${iface}`, name: `net_duplex.${iface}`, context: 'net.duplex', title: `Interface ${iface} duplex`, units: 'state', family: iface, chartType: 'line', priority: 3045, plugin: 'proc', dimensions: [ { id: 'full', name: 'full', algorithm: 'absolute' }, { id: 'half', name: 'half', algorithm: 'absolute' }, ], } } export function makeNetMtuChart(iface) { return { id: `net_mtu.${iface}`, name: `net_mtu.${iface}`, context: 'net.mtu', title: `Interface ${iface} MTU`, units: 'octets', family: iface, chartType: 'line', priority: 3046, plugin: 'proc', dimensions: [{ id: 'mtu', name: 'mtu', algorithm: 'absolute' }], } } export function makeNetQueueChart(iface) { return { id: `net_queue.${iface}`, name: `net_queue.${iface}`, context: 'net.queue_length', title: `Interface ${iface} TX queue length`, units: 'packets', family: iface, chartType: 'line', priority: 3047, plugin: 'proc', dimensions: [{ id: 'tx_queue_len', name: 'tx_queue_len', algorithm: 'absolute' }], } } export function makeIrqChart(irq, name) { const id = String(irq).replace(/[^\w.-]/g, '_') return { id: `system.intr_irq.${id}`, name: `system.intr_irq.${id}`, context: 'system.intr_irq', title: `IRQ ${irq} ${name || ''}`.trim(), units: 'interrupts/s', family: 'irq', chartType: 'line', priority: 115, plugin: 'proc', dimensions: [{ id: 'interrupts', name: 'interrupts', algorithm: 'incremental' }], } } export function makeCpuIdleChart(coreId) { return { id: `cpuidle.cpu${coreId}`, name: `cpuidle.cpu${coreId}`, context: 'cpuidle.cpu_cstate_residency_time', title: `CPU ${coreId} C-state residency`, units: 'percentage', family: `cpu${coreId}`, chartType: 'stacked', priority: 190, plugin: 'proc', dimensions: [{ id: 'active', name: 'active', algorithm: 'absolute' }], } } export function makeNumaNodeMemChart(node) { return { id: `mem.numa_node.${node}`, name: `mem.numa_node.${node}`, context: 'mem.numa_node_mem_usage', title: `NUMA node ${node} memory`, units: 'MiB', family: `node${node}`, chartType: 'stacked', priority: 276, plugin: 'proc', dimensions: [ { id: 'MemTotal', name: 'MemTotal', algorithm: 'absolute' }, { id: 'MemFree', name: 'MemFree', algorithm: 'absolute' }, { id: 'MemUsed', name: 'MemUsed', algorithm: 'absolute' }, ], } } export function makeCgroupMemDetailChart(id, title) { const safe = String(id).replace(/[^a-zA-Z0-9_.-]/g, '_').slice(0, 96) const display = title || safe return { id: `cgroup.mem_detail.${safe}`, name: `cgroup.mem_detail.${safe}`, context: 'cgroup.mem_detail', title: `${display} · memory detail`, units: 'MiB', family: display, chartType: 'stacked', priority: 6110, plugin: 'cgroups', dimensions: [ { id: 'anon', name: 'anon', algorithm: 'absolute' }, { id: 'file', name: 'file', algorithm: 'absolute' }, { id: 'kernel', name: 'kernel', algorithm: 'absolute' }, { id: 'sock', name: 'sock', algorithm: 'absolute' }, ], } } export function makeCgroupThrottleChart(id, title) { const safe = String(id).replace(/[^a-zA-Z0-9_.-]/g, '_').slice(0, 96) const display = title || safe return { id: `cgroup.throttle.${safe}`, name: `cgroup.throttle.${safe}`, context: 'cgroup.cpu_throttle', title: `${display} · CPU throttle`, units: 'percentage', family: display, chartType: 'area', priority: 6010, plugin: 'cgroups', dimensions: [{ id: 'throttled', name: 'throttled', algorithm: 'absolute' }], } }