def test_collecting_disk_metrics(self): """Testing disk stats gathering""" if Platform.is_unix(): disk = Disk(logger) res = disk.check({}) # Assert we have disk & inode stats assert len(res) == 2 assert res[0] assert res[1]
def check_user_rights(): if Platform.is_unix() and not os.geteuid() == 0: log.warning("You are not root, some information won't be collected") choice = raw_input("Are you sure you want to continue [y/N]? ").lower() if choice not in ["yes", "y"]: print "Aborting" sys.exit(1) else: log.warn("Your user has to have at least read access" " to the logs and conf files of the agent")
def check_user_rights(): if Platform.is_unix() and not os.geteuid() == 0: log.warning("You are not root, some information won't be collected") choice = raw_input('Are you sure you want to continue [y/N]? ').lower() if choice not in ['yes', 'y']: print 'Aborting' sys.exit(1) else: log.warn('Your user has to have at least read access' ' to the logs and conf files of the agent')
def _collect_part_metrics(self, part, usage): metrics = {} for name in ['total', 'used', 'free']: metrics[self.METRIC_DISK.format(name)] = getattr(usage, name) / 1024.0 metrics[self.METRIC_DISK.format('pct_usage')] = usage.percent if Platform.is_unix(): metrics.update(self._collect_inodes_metrics(part.mountpoint)) return metrics
def _collect_part_metrics(self, part, usage): metrics = {} for name in ['total', 'used', 'free']: # For legacy reasons, the standard unit it kB metrics[self.METRIC_DISK.format(name)] = getattr(usage, name) / 1024.0 # FIXME: 6.x, use percent, a lot more logical than in_use metrics[self.METRIC_DISK.format('in_use')] = usage.percent / 100.0 if Platform.is_unix(): metrics.update(self._collect_inodes_metrics(part.mountpoint)) return metrics
def check(self, instance): host, port, user, password, mysql_sock, defaults_file, tags, options = self._get_config(instance) if (not host or not user) and not defaults_file: raise Exception("Mysql host and user are needed.") db = self._connect(host, port, mysql_sock, user, password, defaults_file) # Metric collection self._collect_metrics(host, db, tags, options) if Platform.is_unix(): self._collect_system_metrics(host, db, tags)
def get_process_metrics(self, pids, cpu_check_interval, ignore_denied_access=True): # initialize process metrics # process metrics available for all versions of psutil rss = 0 vms = 0 cpu = 0 thr = 0 voluntary_ctx_switches = 0 involuntary_ctx_switches = 0 # process metrics available for psutil versions 0.6.0 and later if Platform.is_win32() or Platform.is_solaris(): real = None else: real = 0 if Platform.is_unix(): open_file_descriptors = 0 else: open_file_descriptors = None # process I/O counters (agent might not have permission to access) read_count = 0 write_count = 0 read_bytes = 0 write_bytes = 0 got_denied = False for pid in set(pids): try: p = psutil.Process(pid) try: if real is not None: mem = p.memory_info_ex() real += mem.rss - mem.shared else: mem = p.memory_info() if Platform.is_unix(): ctx_switches = p.num_ctx_switches() voluntary_ctx_switches += ctx_switches.voluntary involuntary_ctx_switches += ctx_switches.involuntary rss += mem.rss vms += mem.vms thr += p.num_threads() cpu += p.cpu_percent(cpu_check_interval) if open_file_descriptors is not None: open_file_descriptors += p.num_fds() except NotImplementedError: # Handle old Kernels which don't provide this info. voluntary_ctx_switches = None involuntary_ctx_switches = None except AttributeError: self.log.debug( "process attribute not supported on this platform") except psutil.AccessDenied: got_denied = True # user agent might not have permission to call io_counters() # user agent might have access to io counters for some processes and not others if read_count is not None: try: io_counters = p.io_counters() read_count += io_counters.read_count write_count += io_counters.write_count read_bytes += io_counters.read_bytes write_bytes += io_counters.write_bytes except AttributeError: self.log.debug( "process attribute not supported on this platform") except psutil.AccessDenied: log_func = self.log.debug if ignore_denied_access else self.log.info log_func('dd-agent user does not have access \ to I/O counters for process %d: %s' % (pid, p.name())) read_count = None write_count = None read_bytes = None write_bytes = None # Skip processes dead in the meantime except psutil.NoSuchProcess: self.warning('Process %s disappeared while scanning' % pid) if got_denied and not ignore_denied_access: self.warning('The Datadog Agent was denied access ' 'when trying to get the number of file descriptors') # Memory values are in Byte return (thr, cpu, rss, vms, real, open_file_descriptors, read_count, write_count, read_bytes, write_bytes, voluntary_ctx_switches, involuntary_ctx_switches)
def get_process_metrics(self, pids, psutil, cpu_check_interval): # initialize process metrics # process metrics available for all versions of psutil rss = 0 vms = 0 cpu = 0 thr = 0 # process metrics available for psutil versions 0.6.0 and later extended_metrics_0_6_0 = self.is_psutil_version_later_than((0, 6, 0)) if extended_metrics_0_6_0: real = 0 voluntary_ctx_switches = 0 involuntary_ctx_switches = 0 else: real = None voluntary_ctx_switches = None involuntary_ctx_switches = None # process metrics available for psutil versions 0.5.0 and later on UNIX extended_metrics_0_5_0_unix = self.is_psutil_version_later_than((0, 5, 0)) and \ Platform.is_unix() if extended_metrics_0_5_0_unix: open_file_descriptors = 0 else: open_file_descriptors = None # process I/O counters (agent might not have permission to access) read_count = 0 write_count = 0 read_bytes = 0 write_bytes = 0 got_denied = False for pid in set(pids): try: p = psutil.Process(pid) if extended_metrics_0_6_0: mem = p.get_ext_memory_info() real += mem.rss - mem.shared ctx_switches = p.get_num_ctx_switches() voluntary_ctx_switches += ctx_switches.voluntary involuntary_ctx_switches += ctx_switches.involuntary else: mem = p.get_memory_info() if extended_metrics_0_5_0_unix: try: open_file_descriptors += p.get_num_fds() except psutil.AccessDenied: got_denied = True rss += mem.rss vms += mem.vms thr += p.get_num_threads() cpu += p.get_cpu_percent(cpu_check_interval) # user agent might not have permission to call get_io_counters() # user agent might have access to io counters for some processes and not others if read_count is not None: try: io_counters = p.get_io_counters() read_count += io_counters.read_count write_count += io_counters.write_count read_bytes += io_counters.read_bytes write_bytes += io_counters.write_bytes except psutil.AccessDenied: self.log.info('DD user agent does not have access \ to I/O counters for process %d: %s' % (pid, p.name)) read_count = None write_count = None read_bytes = None write_bytes = None # Skip processes dead in the meantime except psutil.NoSuchProcess: self.warning('Process %s disappeared while scanning' % pid) pass if got_denied: self.warning("The Datadog Agent got denied access when trying to get the number of file descriptors") #Memory values are in Byte return (thr, cpu, rss, vms, real, open_file_descriptors, read_count, write_count, read_bytes, write_bytes, voluntary_ctx_switches, involuntary_ctx_switches)
def get_process_metrics(self, pids, psutil, cpu_check_interval): # initialize process metrics # process metrics available for all versions of psutil rss = 0 vms = 0 cpu = 0 thr = 0 # process metrics available for psutil versions 0.6.0 and later extended_metrics_0_6_0 = self.is_psutil_version_later_than((0, 6, 0)) and \ not Platform.is_win32() # On Windows get_ext_memory_info returns different metrics if extended_metrics_0_6_0: real = 0 voluntary_ctx_switches = 0 involuntary_ctx_switches = 0 else: real = None voluntary_ctx_switches = None involuntary_ctx_switches = None # process metrics available for psutil versions 0.5.0 and later on UNIX extended_metrics_0_5_0_unix = self.is_psutil_version_later_than((0, 5, 0)) and \ Platform.is_unix() if extended_metrics_0_5_0_unix: open_file_descriptors = 0 else: open_file_descriptors = None # process I/O counters (agent might not have permission to access) read_count = 0 write_count = 0 read_bytes = 0 write_bytes = 0 got_denied = False for pid in set(pids): try: p = psutil.Process(pid) if extended_metrics_0_6_0: mem = p.get_ext_memory_info() real += mem.rss - mem.shared try: ctx_switches = p.get_num_ctx_switches() voluntary_ctx_switches += ctx_switches.voluntary involuntary_ctx_switches += ctx_switches.involuntary except NotImplementedError: # Handle old Kernels which don't provide this info. voluntary_ctx_switches = None involuntary_ctx_switches = None else: mem = p.get_memory_info() if extended_metrics_0_5_0_unix: try: open_file_descriptors += p.get_num_fds() except psutil.AccessDenied: got_denied = True rss += mem.rss vms += mem.vms thr += p.get_num_threads() cpu += p.get_cpu_percent(cpu_check_interval) # user agent might not have permission to call get_io_counters() # user agent might have access to io counters for some processes and not others if read_count is not None: try: io_counters = p.get_io_counters() read_count += io_counters.read_count write_count += io_counters.write_count read_bytes += io_counters.read_bytes write_bytes += io_counters.write_bytes except psutil.AccessDenied: self.log.info('DD user agent does not have access \ to I/O counters for process %d: %s' % (pid, p.name)) read_count = None write_count = None read_bytes = None write_bytes = None # Skip processes dead in the meantime except psutil.NoSuchProcess: self.warning('Process %s disappeared while scanning' % pid) pass if got_denied: self.warning("The Datadog Agent was denied access when trying to get the number of file descriptors") #Memory values are in Byte return (thr, cpu, rss, vms, real, open_file_descriptors, read_count, write_count, read_bytes, write_bytes, voluntary_ctx_switches, involuntary_ctx_switches)
def get_process_metrics(self, pids, cpu_check_interval, ignore_denied_access=True): # initialize process metrics # process metrics available for all versions of psutil rss = 0 vms = 0 cpu = 0 thr = 0 voluntary_ctx_switches = 0 involuntary_ctx_switches = 0 # process metrics available for psutil versions 0.6.0 and later if Platform.is_win32() or Platform.is_solaris(): real = None else: real = 0 if Platform.is_unix(): open_file_descriptors = 0 else: open_file_descriptors = None # process I/O counters (agent might not have permission to access) read_count = 0 write_count = 0 read_bytes = 0 write_bytes = 0 got_denied = False for pid in set(pids): try: p = psutil.Process(pid) try: if real is not None: mem = p.memory_info_ex() real += mem.rss - mem.shared else: mem = p.memory_info() if Platform.is_unix(): ctx_switches = p.num_ctx_switches() voluntary_ctx_switches += ctx_switches.voluntary involuntary_ctx_switches += ctx_switches.involuntary rss += mem.rss vms += mem.vms thr += p.num_threads() cpu += p.cpu_percent(cpu_check_interval) if open_file_descriptors is not None: open_file_descriptors += p.num_fds() except NotImplementedError: # Handle old Kernels which don't provide this info. voluntary_ctx_switches = None involuntary_ctx_switches = None except AttributeError: self.log.debug("process attribute not supported on this platform") except psutil.AccessDenied: got_denied = True # user agent might not have permission to call io_counters() # user agent might have access to io counters for some processes and not others if read_count is not None: try: io_counters = p.io_counters() read_count += io_counters.read_count write_count += io_counters.write_count read_bytes += io_counters.read_bytes write_bytes += io_counters.write_bytes except AttributeError: self.log.debug("process attribute not supported on this platform") except psutil.AccessDenied: log_func = self.log.debug if ignore_denied_access else self.log.info log_func('dd-agent user does not have access \ to I/O counters for process %d: %s' % (pid, p.name())) read_count = None write_count = None read_bytes = None write_bytes = None # Skip processes dead in the meantime except psutil.NoSuchProcess: self.warning('Process %s disappeared while scanning' % pid) if got_denied and not ignore_denied_access: self.warning("The Datadog Agent was denied access when trying to get the number of file descriptors") #Memory values are in Byte return (thr, cpu, rss, vms, real, open_file_descriptors, read_count, write_count, read_bytes, write_bytes, voluntary_ctx_switches, involuntary_ctx_switches)