diff --git a/httpdocs/templates/am_add_host_modal.html b/httpdocs/templates/am_add_host_modal.html index 27e6289bcf..e4bab8865a 100644 --- a/httpdocs/templates/am_add_host_modal.html +++ b/httpdocs/templates/am_add_host_modal.html @@ -64,7 +64,7 @@
+ href="{{ntop.getHttpPrefix()}}/lua/admin/manage_pools.lua?page=active_monitoring&pool=0&referer=/lua/monitor/active_monitoring_monitor.lua">
diff --git a/httpdocs/templates/am_edit_host_modal.html b/httpdocs/templates/am_edit_host_modal.html index 8aff4e8172..67c4dfb9a6 100644 --- a/httpdocs/templates/am_edit_host_modal.html +++ b/httpdocs/templates/am_edit_host_modal.html @@ -64,7 +64,7 @@
+ href="{{ntop.getHttpPrefix()}}/lua/admin/manage_pools.lua?page=active_monitoring&pool=0&referer=/lua/monitor/active_monitoring_monitor.lua">
diff --git a/scripts/callbacks/5minute/system/export_influxdb_stats.lua b/scripts/callbacks/5minute/system/export_influxdb_stats.lua new file mode 100644 index 0000000000..c912f400f2 --- /dev/null +++ b/scripts/callbacks/5minute/system/export_influxdb_stats.lua @@ -0,0 +1,23 @@ +-- +-- (C) 2019-21 - ntop.org +-- + +local dirs = ntop.getDirs() +package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path +package.path = dirs.installdir .. "/scripts/lua/modules/timeseries/?.lua;" .. package.path + +local ts_utils = require "ts_utils_core" +local influxdb_export_api = require "influxdb_export_api" + +-- ############################################## + +if influxdb_export_api.isInfluxdbEnabled() then + local influxdb = ts_utils.getQueryDriver() + local when = os.time() + + influxdb_export_api.exportStats(when, influxdb) + influxdb_export_api.measureRtt(when, influxdb) + influxdb_export_api.exportStorageSize(when, influxdb) +end + +-- ############################################## diff --git a/scripts/callbacks/hourly/system/disk_monitor.lua b/scripts/callbacks/hourly/system/disk_monitor.lua new file mode 100644 index 0000000000..0b9c1e45eb --- /dev/null +++ b/scripts/callbacks/hourly/system/disk_monitor.lua @@ -0,0 +1,13 @@ +-- +-- (C) 2019-21 - ntop.org +-- + +local dirs = ntop.getDirs() +package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path + +local storage_utils = require("storage_utils") + +-- ############################################## + +storage_utils.storageInfo(true --[[ refresh cache ]], 120 --[[ Allow a couple of minutes --]]) + \ No newline at end of file diff --git a/scripts/callbacks/minute/system/influxdb_checks.lua b/scripts/callbacks/minute/system/influxdb_checks.lua new file mode 100644 index 0000000000..66848a3a66 --- /dev/null +++ b/scripts/callbacks/minute/system/influxdb_checks.lua @@ -0,0 +1,35 @@ +-- +-- (C) 2019-21 - ntop.org +-- + +local dirs = ntop.getDirs() +package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path +package.path = dirs.installdir .. "/scripts/lua/modules/timeseries/?.lua;" .. package.path + +local ts_utils = require "ts_utils_core" +local alerts_api = require "alerts_api" +local alert_consts = require "alert_consts" +local influxdb_export_api = require "influxdb_export_api" + +-- ############################################## + +if influxdb_export_api.isInfluxdbEnabled() then + -- Defines an hook which is executed every minute + local last_error = ntop.getCache("ntopng.cache.influxdb.last_error") + + -- Note: last_error is automatically cleared once the error is gone + if(not isEmptyString(last_error)) then + local influxdb = ts_utils.getQueryDriver() + + local alert_type = alert_consts.alert_types.alert_influxdb_error.new( + last_error + ) + + alert_type:set_score_error() + alert_type:set_granularity(alert_consts.alerts_granularities.min) + + alert_type:store(alerts_api.systemEntity()) + end +end + +-- ############################################## diff --git a/scripts/callbacks/minute/system/redis_timeseries.lua b/scripts/callbacks/minute/system/redis_timeseries.lua new file mode 100644 index 0000000000..4df410d9f5 --- /dev/null +++ b/scripts/callbacks/minute/system/redis_timeseries.lua @@ -0,0 +1,50 @@ +-- +-- (C) 2019-21 - ntop.org +-- + +local dirs = ntop.getDirs() +package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path +package.path = dirs.installdir .. "/scripts/lua/modules/timeseries/?.lua;" .. package.path + +local ts_dump = require "ts_min_dump_utils" +local ts_utils = require("ts_utils_core") +local checks = require("checks") +local json = require("dkjson") +local redis_api = require "redis_api" + +local ifid = getSystemInterfaceId() +local hits_key = "ntopng.cache.redis.stats" +local hits_stats = ntop.getCacheStats() +local old_hits_stats = ntop.getCache(hits_key) + +-- ############################################## + +if redis_api.redisTimeseriesEnabled() then + local stats = redis_api.getStats() + + if(not isEmptyString(old_hits_stats)) then + old_hits_stats = json.decode(old_hits_stats) or {} + else + old_hits_stats = {} + end + + if stats["memory"] then + ts_utils.append("redis:memory", { ifid = ifid, resident_bytes = stats["memory"] }, when) + end + + if stats["dbsize"] then + ts_utils.append("redis:keys", {ifid = ifid, num_keys = stats["dbsize"]}, when) + end + + for key, val in pairs(hits_stats) do + if(old_hits_stats[key] ~= nil) then + local delta = math.max(val - old_hits_stats[key], 0) + + -- Dump the delta value as a gauge + ts_utils.append("redis:hits", {ifid = ifid, command = key, num_calls = delta}, when) + end + end + + ntop.setCache(hits_key, json.encode(hits_stats)) +end + diff --git a/scripts/callbacks/minute/system/system_checks.lua b/scripts/callbacks/minute/system/system_checks.lua index 3e733edeb3..479a82a113 100644 --- a/scripts/callbacks/minute/system/system_checks.lua +++ b/scripts/callbacks/minute/system/system_checks.lua @@ -15,17 +15,11 @@ local checks = require "checks" -- -- The following checks are loaded -- --- /var/lib/ntopng/plugins1/callbacks/system/system/influxdb_monitor.lua -- /var/lib/ntopng/plugins1/callbacks/system/system/ids_ips_log.lua -- /var/lib/ntopng/plugins1/callbacks/system/system/dropped_alerts.lua -- /var/lib/ntopng/plugins1/callbacks/system/system/periodic_activity_not_executed.lua --- /var/lib/ntopng/plugins1/callbacks/system/system/redis_monitor.lua --- /var/lib/ntopng/plugins1/callbacks/system/system/disk_monitor.lua --- /var/lib/ntopng/plugins1/callbacks/system/system/alerts_ts.lua -- /var/lib/ntopng/plugins1/callbacks/system/system/clickhouse_monitor.lua -- /var/lib/ntopng/plugins1/callbacks/system/system/slow_periodic_activity.lua --- /var/lib/ntopng/plugins1/callbacks/system/system/memory_ts.lua --- /var/lib/ntopng/plugins1/callbacks/system/system/active_monitoring.lua -- -- ################################################################# diff --git a/scripts/callbacks/minute/system/timeseries.lua b/scripts/callbacks/minute/system/timeseries.lua index 4f69ecb0b5..f13e472d44 100644 --- a/scripts/callbacks/minute/system/timeseries.lua +++ b/scripts/callbacks/minute/system/timeseries.lua @@ -8,12 +8,17 @@ package.path = dirs.installdir .. "/scripts/lua/modules/pools/?.lua;" .. package local scripts_triggers = require "scripts_triggers" local prefs_dump_utils = require "prefs_dump_utils" +local cpu_utils = require("cpu_utils") +local ts_utils = require("ts_utils_core") + +local system_host_stats = cpu_utils.systemHostStats() +local ifstats = interface.getStats() +local when = os.time() -- Check and possibly dump preferences to a file prefs_dump_utils.check_dump_prefs_to_disk() -local ifstats = interface.getStats() -local when = os.time() +-- ##################################### -- Dump periodic activities duration if the telementry timeseries preference is enabled if scripts_triggers.isRrdInterfaceCreation() then @@ -22,11 +27,33 @@ if scripts_triggers.isRrdInterfaceCreation() then ts_dump.update_internals_periodic_activities_stats(when, ifstats, false) end -if scripts_triggers.isRrdInterfaceCreation() then - local ts_utils = require("ts_utils_core") +-- ##################################### +if scripts_triggers.isRrdInterfaceCreation() then if areAlertsEnabled() then ts_utils.append("iface:engaged_alerts", {ifid=getSystemInterfaceId(), engaged_alerts=ifstats.num_alerts_engaged}, when) ts_utils.append("iface:dropped_alerts", {ifid=getSystemInterfaceId(), dropped_alerts=ifstats.num_dropped_alerts}, when) end end + +-- ##################################### + +if cpu_utils.processTimeseriesEnabled() then + ts_utils.append("process:num_alerts", { + ifid = getSystemInterfaceId(), + dropped_alerts = system_host_stats.dropped_alerts or 0, + written_alerts = system_host_stats.written_alerts or 0, + alerts_queries = system_host_stats.alerts_queries or 0 + }, when, verbose) + + -- ##################################### + + if((system_host_stats.mem_ntopng_resident ~= nil) and (system_host_stats.mem_ntopng_virtual ~= nil)) then + ts_utils.append("process:resident_memory", { + ifid = getSystemInterfaceId(), + resident_bytes = system_host_stats.mem_ntopng_resident * 1024, + }, when, verbose) + end +end + +-- ##################################### diff --git a/scripts/lua/get_active_monitoring_hosts.lua b/scripts/lua/get_active_monitoring_hosts.lua index aeecb61184..dc4e56f511 100644 --- a/scripts/lua/get_active_monitoring_hosts.lua +++ b/scripts/lua/get_active_monitoring_hosts.lua @@ -38,7 +38,7 @@ for key, am_host in pairs(am_hosts) do end if charts_available then - chart = plugins_utils.getActiveMonitoringUrl('active_monitoring_stats.lua') .. '?am_host='.. am_host.host ..'&measurement='.. am_host.measurement ..'&page=historical' + chart = plugins_utils.getMonitorUrl('active_monitoring_monitor.lua') .. '?am_host='.. am_host.host ..'&measurement='.. am_host.measurement ..'&page=historical' end local column_last_ip = "" diff --git a/scripts/lua/host_details.lua b/scripts/lua/host_details.lua index 3fafa1b4ed..63d6b34384 100644 --- a/scripts/lua/host_details.lua +++ b/scripts/lua/host_details.lua @@ -750,7 +750,7 @@ else print([[ - ]].. last_rtt ..[[ + ]].. last_rtt ..[[ ]]) diff --git a/scripts/lua/inc/footer.lua b/scripts/lua/inc/footer.lua index 99e29a1b55..b58e992d15 100644 --- a/scripts/lua/inc/footer.lua +++ b/scripts/lua/inc/footer.lua @@ -357,7 +357,7 @@ print[[ } if(rsp.ts_alerts && rsp.ts_alerts.influxdb && (!systemInterfaceEnabled)) { - msg += "" + msg += "" msg += ""; } diff --git a/scripts/lua/inc/menu.lua b/scripts/lua/inc/menu.lua index 4863b42509..c30a22e881 100644 --- a/scripts/lua/inc/menu.lua +++ b/scripts/lua/inc/menu.lua @@ -23,7 +23,6 @@ local auth = require "auth" local blog_utils = require("blog_utils") local template_utils = require "template_utils" local auth = require "auth" -local template_utils = require("template_utils") local is_nedge = ntop.isnEdge() local is_appliance = ntop.isAppliance() local is_admin = isAdministrator() @@ -32,6 +31,7 @@ local info = ntop.getInfo() local has_local_auth = (ntop.getPref("ntopng.prefs.local.auth_enabled") ~= '0') local is_system_interface = page_utils.is_system_view() local behavior_utils = require("behavior_utils") +local checks = require "checks" local observationPointId = nil @@ -107,9 +107,6 @@ print[[ } ]] -local template = require "template_utils" - - prefs = ntop.getPrefs() local iface_names = interface.getIfNames() @@ -127,6 +124,7 @@ local ifs = interface.getStats() local is_pcap_dump = interface.isPcapDumpInterface() local is_packet_interface = interface.isPacketInterface() local is_viewed = ifs.isViewed +local is_influxdb_enabled = false ifId = ifs.id -- NOTE: see sidebar.js for the client logic @@ -152,8 +150,8 @@ else }, { entry = page_utils.menu_entries.active_monitoring, - url = "/lua/active_monitoring_stats.lua" - }, + url = "/lua/monitor/active_monitoring_monitor.lua" + }, { entry = page_utils.menu_entries.divider, hidden = not ntop.isEnterpriseM(), @@ -400,6 +398,16 @@ local health_entries = { entry = page_utils.menu_entries.alerts_status, url = '/lua/system_alerts_stats.lua', }, + { + entry = page_utils.menu_entries.influxdb_status, + url = '/lua/monitor/influxdb_monitor.lua', + hidden = not is_influxdb_enabled, + }, + { + entry = page_utils.menu_entries.redis_status, + url = '/lua/monitor/redis_monitor.lua', + hidden = false, -- TODO: add a check for redis monitoring status + } } -- Add plugin entries relative to system health (e.g., redis) ... @@ -437,7 +445,7 @@ local poller_entries = { { entry = page_utils.menu_entries.active_monitoring, hidden = not is_system_interface, - url = "/lua/active_monitoring_stats.lua", + url = "/lua/monitor/active_monitoring_monitor.lua", } } @@ -741,7 +749,6 @@ page_utils.add_menubar_section( } ) - -- ############################################## page_utils.print_menubar() @@ -970,7 +977,7 @@ print([[ if (not is_system_interface) then print("