diff options
Diffstat (limited to 'roles/monitoring/prometheus/exporter/node/files/deleted-libraries')
-rwxr-xr-x | roles/monitoring/prometheus/exporter/node/files/deleted-libraries | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/roles/monitoring/prometheus/exporter/node/files/deleted-libraries b/roles/monitoring/prometheus/exporter/node/files/deleted-libraries deleted file mode 100755 index e3e19cbd..00000000 --- a/roles/monitoring/prometheus/exporter/node/files/deleted-libraries +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to count the number of deleted libraries that are linked by running -processes and expose a summary as Prometheus metrics. - -The aim is to discover processes that are still using libraries that have since -been updated, perhaps due security vulnerabilities. -""" - -import errno -import glob -import os -import sys - - -def main(): - processes_linking_deleted_libraries = {} - - for path in glob.glob('/proc/*/maps'): - try: - with open(path, 'rb') as file: - for line in file: - part = line.decode().strip().split() - - if len(part) == 7: - library = part[5] - comment = part[6] - - if '/lib/' in library and '(deleted)' in comment: - if path not in processes_linking_deleted_libraries: - processes_linking_deleted_libraries[path] = {} - - if library in processes_linking_deleted_libraries[path]: - processes_linking_deleted_libraries[path][library] += 1 - else: - processes_linking_deleted_libraries[path][library] = 1 - except EnvironmentError as e: - # Ignore non-existent files, since the files may have changed since - # we globbed. - if e.errno != errno.ENOENT: - sys.exit('Failed to open file: {0}'.format(path)) - - num_processes_per_library = {} - - for process, library_count in processes_linking_deleted_libraries.items(): - libraries_seen = set() - for library, count in library_count.items(): - if library in libraries_seen: - continue - - libraries_seen.add(library) - if library in num_processes_per_library: - num_processes_per_library[library] += 1 - else: - num_processes_per_library[library] = 1 - - metric_name = 'node_processes_linking_deleted_libraries' - description = 'Count of running processes that link a deleted library' - print('# HELP {0} {1}'.format(metric_name, description)) - print('# TYPE {0} gauge'.format(metric_name)) - - for library, count in num_processes_per_library.items(): - dir_path, basename = os.path.split(library) - basename = basename.replace('"', '\\"') - dir_path = dir_path.replace('"', '\\"') - print('{0}{{library_path="{1}", library_name="{2}"}} {3}'.format( - metric_name, - dir_path, - basename, - count) - ) - - -if __name__ == "__main__": - main() |