-- -- (C) 2019-24 - ntop.org -- local dirs = ntop.getDirs() package.path = dirs.installdir .. "/scripts/lua/modules/timeseries/?.lua;" .. package.path local ts_utils = require "ts_utils_core" local schema ------------------------------------------------------- -- PERIODIC_SCRIPTS SCHEMAS ------------------------------------------------------- schema = ts_utils.newSchema("periodic_script:duration", { step = 60, rrd_fname = "ps_duration", metrics_type = ts_utils.metrics.gauge, is_critical_ts = true }) schema:addTag("ifid") schema:addTag("periodic_script") schema:addMetric("num_ms_last") schema = ts_utils.newSchema("periodic_script:timeseries_writes", { step = 60, rrd_fname = "ps_ts_wrdr", is_critical_ts = true }) schema:addTag("ifid") schema:addTag("periodic_script") schema:addMetric("writes") schema:addMetric("drops") ------------------------------------------------------- -- HASH_TABLES SCHEMAS ------------------------------------------------------- schema = ts_utils.newSchema("ht:state", { step = 60, rrd_fname = "ht_state", metrics_type = ts_utils.metrics.gauge, is_critical_ts = true }) schema:addTag("ifid") schema:addTag("hash_table") schema:addMetric("num_idle") schema:addMetric("num_active") ------------------------------------------------------- -- MEMORY AND ALERT SCHEMAS ('/callbacks/minute/system/timeseries.lua') ------------------------------------------------------- -- ################################################ schema = ts_utils.newSchema("process:resident_memory", { step = 60, metrics_type = ts_utils.metrics.gauge, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("resident_bytes") -- ################################################ schema = ts_utils.newSchema("process:num_alerts", { step = 60 }) schema:addTag("ifid") schema:addMetric("written_alerts") schema:addMetric("alerts_queries") schema:addMetric("dropped_alerts") ------------------------------------------------------- -- PROFILES SCHEMAS ------------------------------------------------------- schema = ts_utils.newSchema("profile:traffic", { step = 60, rrd_fname = "bytes" }) schema:addTag("ifid") schema:addTag("profile") schema:addMetric("bytes") ------------------------------------------------------- -- nEDGE SCHEMAS ------------------------------------------------------- -- Stats (rx/tx) for the analysed traffic (netfilter interface) -- (same as traffic_rxtx, but with minute resolution) schema = ts_utils.newSchema("iface:traffic_rxtx_min", { step=60, is_critical_ts=true }) schema:addTag("ifid") schema:addMetric("bytes_sent") schema:addMetric("bytes_rcvd") -- Stats per lan/wan interfaces schema = ts_utils.newSchema("iface:nedge_traffic_rxtx", { step = 60 }) schema:addTag("ifid") schema:addMetric("bytes_sent") schema:addMetric("bytes_rcvd") -- Stats for the netfilter queue schema = ts_utils.newSchema("iface:nedge_traffic_nfq", { step = 60 }) schema:addTag("ifid") schema:addMetric("bytes") schema:addMetric("bytes_nfq") ------------------------------------------------------- -- SUBNETS SCHEMAS ------------------------------------------------------- if ntop.isPro() then schema = ts_utils.newSchema("subnet:intranet_traffic_min", { step = 60, metrics_type = ts_utils.metrics.counter }) schema:addTag("ifid") schema:addTag("subnet") schema:addTag("subnet_2") schema:addMetric("bytes_sent") schema:addMetric("bytes_rcvd") end -- ############################################## schema = ts_utils.newSchema("subnet:rtt", { step = 300, rrd_fname = "num_ms_rtt", metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("millis_rtt") -- ############################################## schema = ts_utils.newSchema("subnet:traffic", { step = 60, rrd_fname = "bytes" }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("bytes_ingress") schema:addMetric("bytes_egress") schema:addMetric("bytes_inner") -- ############################################## schema = ts_utils.newSchema("subnet:broadcast_traffic", { step = 60, rrd_fname = "broadcast_bytes" }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("bytes_ingress") schema:addMetric("bytes_egress") schema:addMetric("bytes_inner") -- ############################################## schema = ts_utils.newSchema("subnet:tcp_retransmissions", { step = 60 }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("packets_ingress") schema:addMetric("packets_egress") schema:addMetric("packets_inner") -- ############################################## schema = ts_utils.newSchema("subnet:tcp_out_of_order", { step = 60 }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("packets_ingress") schema:addMetric("packets_egress") schema:addMetric("packets_inner") -- ############################################## schema = ts_utils.newSchema("subnet:tcp_lost", { step = 60 }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("packets_ingress") schema:addMetric("packets_egress") schema:addMetric("packets_inner") -- ############################################## schema = ts_utils.newSchema("subnet:tcp_keep_alive", { step = 60 }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("packets_ingress") schema:addMetric("packets_egress") schema:addMetric("packets_inner") -- ############################################## schema = ts_utils.newSchema("subnet:engaged_alerts", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("alerts") -- ############################################## schema = ts_utils.newSchema("subnet:score", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("score") schema:addMetric("scoreAsClient") schema:addMetric("scoreAsServer") -- ############################################## if ntop.isEnterpriseL() then schema = ts_utils.newSchema("subnet:qoe_stats", { step = 300, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("subnet") schema:addMetric("excellent") schema:addMetric("good") schema:addMetric("fair") schema:addMetric("degraded") schema:addMetric("poor") schema:addMetric("unknown") end -- ############################################## ------------------------------------------------------- -- INTERFACES SCHEMAS ------------------------------------------------------- if ntop.isEnterpriseM() then -- ############################################## schema = ts_utils.newSchema("iface:score_anomalies_v2", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addMetric("anomaly") -- ############################################## schema = ts_utils.newSchema("iface:score_behavior_v2", { step = 300, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addMetric("value") schema:addMetric("lower_bound") schema:addMetric("upper_bound") -- ############################################## schema = ts_utils.newSchema("iface:traffic_anomalies_v2", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addMetric("anomaly") -- ############################################## schema = ts_utils.newSchema("iface:traffic_tx_behavior_v5", { step = 60, metrics_type = ts_utils.metrics.gauge, keep_total = true }) schema:addTag("ifid") schema:addMetric("value") schema:addMetric("lower_bound") schema:addMetric("upper_bound") -- ############################################## schema = ts_utils.newSchema("iface:traffic_rx_behavior_v5", { step = 60, metrics_type = ts_utils.metrics.gauge, keep_total = true }) schema:addTag("ifid") schema:addMetric("value") schema:addMetric("lower_bound") schema:addMetric("upper_bound") end schema = ts_utils.newSchema("iface:ndpi", { step = 60, is_critical_ts = true }) schema:addTag("ifid") schema:addTag("protocol") schema:addMetric("bytes") schema = ts_utils.newSchema("iface:ndpi_full", { step = 60, is_critical_ts = true }) schema:addTag("ifid") schema:addTag("protocol") schema:addMetric("bytes_sent") schema:addMetric("bytes_rcvd") -- ############################################## schema = ts_utils.newSchema("iface:ndpi_categories", { step = 60, is_critical_ts = true }) schema:addTag("ifid") schema:addTag("category") schema:addMetric("bytes") -- ############################################## schema = ts_utils.newSchema("iface:l4protos", { step = 60, is_critical_ts = true }) schema:addTag("ifid") schema:addTag("l4proto") schema:addMetric("bytes") -- ############################################## schema = ts_utils.newSchema("iface:ndpi_flows", { step = 60, is_critical_ts = true }) schema:addTag("ifid") schema:addTag("protocol") schema:addMetric("num_flows") -- ############################################## -- NOTE: not shown schema = ts_utils.newSchema("iface:local2remote", { step = 60, rrd_fname = "local2remote" }) schema:addTag("ifid") schema:addMetric("bytes") -- ############################################## -- NOTE: not shown schema = ts_utils.newSchema("iface:remote2local", { step = 60, rrd_fname = "remote2local" }) schema:addTag("ifid") schema:addMetric("bytes") -- ############################################## schema = ts_utils.newSchema("iface:hosts", { step = 60, rrd_fname = "num_hosts", metrics_type = ts_utils.metrics.gauge, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("num_hosts") -- ############################################## schema = ts_utils.newSchema("iface:local_hosts", { step = 60, rrd_fname = "num_local_hosts", metrics_type = ts_utils.metrics.gauge, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("num_hosts") -- ############################################## schema = ts_utils.newSchema("iface:devices", { step = 60, rrd_fname = "num_devices", metrics_type = ts_utils.metrics.gauge, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("num_devices") -- ############################################## schema = ts_utils.newSchema("iface:flows", { step = 60, rrd_fname = "num_flows", metrics_type = ts_utils.metrics.gauge, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("num_flows") -- ############################################## schema = ts_utils.newSchema("iface:alerted_flows", { step = 60, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("num_flows") -- ############################################## schema = ts_utils.newSchema("iface:new_flows", { step = 60, rrd_fname = "if_new_flows", is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("new_flows") -- ############################################## schema = ts_utils.newSchema("iface:http_hosts", { step = 60, rrd_fname = "num_http_hosts", metrics_type = ts_utils.metrics.gauge, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("num_hosts") -- ############################################## schema = ts_utils.newSchema("iface:tcp_stats", { step = 60, rrd_fname = "tcp_stats" }) schema:addTag("ifid") schema:addMetric("retransmissions") schema:addMetric("out_of_order") schema:addMetric("lost") schema:addMetric("keep_alive") -- ############################################## schema = ts_utils.newSchema("iface:tcp_flags", { step = 60, rrd_fname = "tcp_flags" }) schema:addTag("ifid") schema:addMetric("fin_ack") schema:addMetric("syn_ack") schema:addMetric("syn") schema:addMetric("rst") -- ############################################## schema = ts_utils.newSchema("iface:nfq_pct", { step = 60, rrd_fname = "num_nfq_pct", metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addMetric("num_nfq_pct") -- ############################################## schema = ts_utils.newSchema("iface:score", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addMetric("cli_score") schema:addMetric("srv_score") -- ############################################## schema = ts_utils.newSchema("iface:engaged_alerts", { step = 60, metrics_type = ts_utils.metrics.gauge, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("engaged_alerts") -- ############################################## schema = ts_utils.newSchema("iface:dropped_alerts", { step = 60, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("dropped_alerts") -- ############################################## schema = ts_utils.newSchema("iface:dumped_flows", { step = 60, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("dumped_flows") schema:addMetric("dropped_flows") -- ############################################## schema = ts_utils.newSchema("iface:hosts_anomalies", { step = 60, is_critical_ts = true }) schema:addTag("ifid") schema:addMetric("num_loc_hosts_anom") schema:addMetric("num_rem_hosts_anom") -- ############################################## if ntop.isEnterpriseL() then schema = ts_utils.newSchema("iface:qoe_stats", { step = 300, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addMetric("excellent") schema:addMetric("good") schema:addMetric("fair") schema:addMetric("degraded") schema:addMetric("poor") schema:addMetric("unknown") end -- ############################################## schema = ts_utils.newSchema("am_host:val_min", { step = 60, metrics_type = ts_utils.metrics.gauge, aggregation_function = ts_utils.aggregation.max, is_system_schema = true }) schema:addTag("ifid") schema:addTag("host") schema:addTag("metric") schema:addMetric("value") -- ############################################## schema = ts_utils.newSchema("am_host:http_stats_min", { step = 60, metrics_type = ts_utils.metrics.gauge, aggregation_function = ts_utils.aggregation.max, is_system_schema = true }) schema:addTag("ifid") schema:addTag("host") schema:addTag("metric") schema:addMetric("lookup_ms") schema:addMetric("other_ms") -- ############################################## schema = ts_utils.newSchema("am_host:https_stats_min", { step = 60, metrics_type = ts_utils.metrics.gauge, aggregation_function = ts_utils.aggregation.max, is_system_schema = true }) schema:addTag("ifid") schema:addTag("host") schema:addTag("metric") schema:addMetric("lookup_ms") schema:addMetric("connect_ms") schema:addMetric("other_ms") -- ############################################## schema = ts_utils.newSchema("am_host:cicmp_stats_min", { step = 60, metrics_type = ts_utils.metrics.gauge, is_system_schema = true }) schema:addTag("ifid") schema:addTag("host") schema:addTag("metric") schema:addMetric("min_rtt") schema:addMetric("max_rtt") -- ############################################## schema = ts_utils.newSchema("am_host:jitter_stats_min", { step = 60, metrics_type = ts_utils.metrics.gauge, is_system_schema = true }) schema:addTag("ifid") schema:addTag("host") schema:addTag("metric") schema:addMetric("latency") schema:addMetric("jitter") -- ############################################## ------------------------------------------------------- -- CONTAINERS SCHEMAS ------------------------------------------------------- schema = ts_utils.newSchema("container:num_flows", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("container") schema:addMetric("as_client") schema:addMetric("as_server") schema = ts_utils.newSchema("container:rtt", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("container") schema:addMetric("as_client") schema:addMetric("as_server") schema = ts_utils.newSchema("container:rtt_variance", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("container") schema:addMetric("as_client") schema:addMetric("as_server") ------------------------------------------------------- -- PODS SCHEMAS ------------------------------------------------------- schema = ts_utils.newSchema("pod:num_containers", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("pod") schema:addMetric("num_containers") schema = ts_utils.newSchema("pod:num_flows", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("pod") schema:addMetric("as_client") schema:addMetric("as_server") schema = ts_utils.newSchema("pod:rtt", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("pod") schema:addMetric("as_client") schema:addMetric("as_server") schema = ts_utils.newSchema("pod:rtt_variance", { step = 60, metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("pod") schema:addMetric("as_client") schema:addMetric("as_server") -- ################################################ ------------------------------------------------------- -- REDIS SCHEMAS ------------------------------------------------------- schema = ts_utils.newSchema("redis:memory", { metrics_type = ts_utils.metrics.gauge, is_system_schema = true, step = 60 }) schema:addTag("ifid") schema:addMetric("resident_bytes") -- ################################################ schema = ts_utils.newSchema("redis:keys", { metrics_type = ts_utils.metrics.gauge, is_system_schema = true, step = 60 }) schema:addTag("ifid") schema:addMetric("num_keys") -- ################################################ schema = ts_utils.newSchema("redis:reads_writes_v2", { metrics_type = ts_utils.metrics.gauge, is_system_schema = true, step = 60 }) schema:addTag("ifid") schema:addMetric("num_reads") schema:addMetric("num_writes") -- ################################################ -- Cache schema = ts_utils.newSchema("redis:hits", { metrics_type = ts_utils.metrics.gauge, is_system_schema = true, step = 60 }) schema:addTag("ifid") schema:addTag("command") schema:addMetric("num_calls") -- ################################################ -- SNMP schema = ts_utils.newSchema("snmp_if:traffic_min", { step = 60, rrd_heartbeat = 600, rrd_fname = "bytes_per_minute", is_system_schema = true }) schema:addTag("ifid") schema:addTag("device") schema:addTag("if_index") schema:addMetric("bytes_sent") schema:addMetric("bytes_rcvd") -- ############################################## ------------------------------------------------------- -- FLOW PROBES SCHEMAS ------------------------------------------------------- if ntop.isEnterpriseM() then schema = ts_utils.newSchema("flowdev:traffic_min", { step = 60, rrd_fname = "bytes_min" }) schema:addTag("ifid") schema:addTag("device") schema:addMetric("bytes_sent") schema:addMetric("bytes_rcvd") -- ############################################## schema = ts_utils.newSchema("flowdev:drops_min", { step = 60, rrd_fname = "drops_min" }) schema:addTag("ifid") schema:addTag("device") schema:addMetric("drops") -- ############################################## schema = ts_utils.newSchema("flowdev:flows_min", { step = 60, rrd_fname = "flows_min" }) schema:addTag("ifid") schema:addTag("device") schema:addMetric("flows") schema = ts_utils.newSchema("flowdev:ndpi_min", { step = 60 }) schema:addTag("ifid") schema:addTag("device") schema:addTag("protocol") schema:addMetric("bytes_sent") schema:addMetric("bytes_rcvd") -- ############################################## schema = ts_utils.newSchema("flowdev_port:traffic_min", { step = 60, rrd_fname = "bytes_min" }) schema:addTag("ifid") schema:addTag("device") schema:addTag("port") schema:addMetric("bytes_sent") schema:addMetric("bytes_rcvd") schema = ts_utils.newSchema("flowdev_port:usage_min", { step = 60, rrd_fname = "usage_min", metrics_type = ts_utils.metrics.gauge }) schema:addTag("ifid") schema:addTag("device") schema:addTag("port") schema:addMetric("uplink") schema:addMetric("downlink") schema = ts_utils.newSchema("flowdev_port:ndpi_min", { step = 60 }) schema:addTag("ifid") schema:addTag("device") schema:addTag("port") schema:addTag("protocol") schema:addMetric("bytes_sent") schema:addMetric("bytes_rcvd") end