def get_logging_namespace(self): """ Determine which logging namespace is in use """ # Assume the correct namespace is 'openshift-logging' and fall back to 'logging' # if that assumption ends up being wrong. oc_client = OCUtil(namespace='openshift-logging', config_file='/tmp/admin.kubeconfig', verbose=self.args.verbose) logger.info("Determining which namespace is in use...") try: oc_client.get_dc('logging-kibana') # If the previous call didn't throw an exception, logging is deployed in this namespace. logger.info("Using namespace: openshift-logging") return 'openshift-logging' except subprocess.CalledProcessError: logger.info("Using namespace: logging") return 'logging'
def main(): ''' Gather and send details on all visible S3 buckets ''' logger.info("start") discovery_key = "disc.aws" discovery_macro = "#S3_BUCKET" prototype_s3_size = "disc.aws.size" prototype_s3_count = "disc.aws.objects" args = parse_args() if args.verbose: logger.setLevel(logging.DEBUG) logger.debug("verbose flag set") ocutil = OCUtil() dc_yaml = ocutil.get_dc('docker-registry') registry_config_secret = get_registry_config_secret(dc_yaml) oc_yaml = ocutil.get_secrets(registry_config_secret) aws_access, aws_secret = get_aws_creds(oc_yaml) awsutil = AWSUtil(aws_access, aws_secret, args.debug) bucket_list = awsutil.get_bucket_list(args.debug) bucket_stats = {} for bucket in bucket_list: s3_size, s3_objects = awsutil.get_bucket_info(bucket, args.debug) bucket_stats[bucket] = {"size": s3_size, "objects": s3_objects} if args.debug: print "Bucket stats: " + str(bucket_stats) if args.test: print "Test-only. Received results: " + str(bucket_stats) else: zgs = ZaggSender(verbose=args.debug) zgs.add_zabbix_dynamic_item(discovery_key, discovery_macro, bucket_list) for bucket in bucket_stats.keys(): zab_key = "{}[{}]".format(prototype_s3_size, bucket) zgs.add_zabbix_keys( {zab_key: int(round(bucket_stats[bucket]["size"]))}) zab_key = "{}[{}]".format(prototype_s3_count, bucket) zgs.add_zabbix_keys({zab_key: bucket_stats[bucket]["objects"]}) zgs.send_metrics()
def main(): ''' Gather and send details on all visible S3 buckets ''' discovery_key = "disc.gcp" discovery_macro = "#GCS_BUCKET" prototype_bucket_size = "disc.gcp.size" prototype_bucket_count = "disc.gcp.objects" args = parse_args() ocutil = OCUtil() dc_yaml = ocutil.get_dc('docker-registry') registry_config_secret = get_registry_config_secret(dc_yaml) oc_yaml = ocutil.get_secrets(registry_config_secret) bucket = get_gcp_info(oc_yaml) gsutil = GcloudUtil(verbose=args.debug) bucket_list = gsutil.get_bucket_list() bucket_stats = {} for bucket in bucket_list: size, objects = gsutil.get_bucket_info(bucket) bucket_stats[bucket] = {"size": size, "objects": objects} if args.debug: print "Bucket stats: " + str(bucket_stats) if args.test: print "Test-only. Received results: " + str(bucket_stats) else: zgs = ZaggSender(verbose=args.debug) zgs.add_zabbix_dynamic_item(discovery_key, discovery_macro, bucket_list) for bucket in bucket_stats.keys(): zab_key = "{}[{}]".format(prototype_bucket_size, bucket) zgs.add_zabbix_keys({zab_key: int(round(bucket_stats[bucket]["size"]))}) zab_key = "{}[{}]".format(prototype_bucket_count, bucket) zgs.add_zabbix_keys({zab_key: bucket_stats[bucket]["objects"]}) zgs.send_metrics()
def main(): ''' Gather and send details on all visible S3 buckets ''' #get the region with open('/container_setup/monitoring-config.yml', 'r') as f: doc = yaml.load(f) bucket_region = doc['oso_region'] args = parse_args() ocutil = OCUtil() dc_yaml = ocutil.get_dc('docker-registry') registry_config_secret = get_registry_config_secret(dc_yaml) oc_yaml = ocutil.get_secrets(registry_config_secret) aws_access, aws_secret = get_aws_creds(oc_yaml) awsutil = AWSUtil(aws_access, aws_secret, args.debug) bucket_list = awsutil.get_bucket_list(verbose=args.debug, BucketRegion=bucket_region) bucket_stats = {} for bucket in bucket_list: #print bucket s3_size, s3_objects = awsutil.get_bucket_info( bucket, verbose=args.debug, BucketRegion=bucket_region) bucket_stats[bucket] = {"size": s3_size, "objects": s3_objects} if args.debug: print "Bucket stats: " + str(bucket_stats) if args.test: print "Test-only. Received results: " + str(bucket_stats) else: send_zagg_data(bucket_list, bucket_stats, args)
class InfraNodePodStatus(object): ''' This is a check for making sure the internal pods like router and registry running and located on different infra nodes ''' def __init__( self, args=None, ): '''initial for the InfraNodePodStatus''' self.args = args self.kubeconfig = '/tmp/admin.kubeconfig' self.oc = OCUtil(namespace=self.args.namespace, config_file=self.kubeconfig) self.all_pods = self.get_all_pods() def get_all_pods(self): ''' get all the pod information ''' pods = self.oc.get_pods() pod_report = {} for pod in pods['items']: pod_name = pod['metadata']['name'] pod_report[pod_name] = {} pod_report[pod_name]['hostIP'] = pod['status']['hostIP'] pod_report[pod_name]['status'] = pod['status']['phase'] return pod_report def get_expected_replicas(self, deploymentconfig): ''' get expected replica count from deploymentconfig ''' defined_replicas = self.oc.get_dc(deploymentconfig)['spec']['replicas'] return defined_replicas def get_pods_by_name(self, podname): """get_pods_by_name""" return [ self.all_pods[i] for i in self.all_pods.keys() if i.startswith(podname + '-') ] def check_pods( self, podname, keybase="", pod_optional=False, ): ''' to compare the pod host ip and check the pod status ''' logging.getLogger().info("Finding pods for: %s", podname) result_code = 1 pods = self.get_pods_by_name(podname) logging.getLogger().info("Pods Found: %s", len(pods)) expected_replicas = 0 try: expected_replicas = self.get_expected_replicas(podname) except Exception: logging.getLogger().warn("dc not found for pod %s", podname) if pod_optional: logging.getLogger().warn( "Some clusters don't have pod %s, please confirm before trying to fix this", podname) return # nothing we should do, so quit early, don't do more checks logging.getLogger().info("Expected Replicas: %s", expected_replicas) if len(pods) != expected_replicas: result_code = 0 logging.getLogger().critical("Count Pods and Replicas don't match") count_pods_running = len([i for i in pods if i['status'] == "Running"]) logging.getLogger().info("Pods Running: %s", count_pods_running) if len(pods) != count_pods_running: result_code = 0 logging.getLogger().critical("Some pods are not in running state") host_ips = set([x['hostIP'] for x in pods]) logging.getLogger().info("Hosts found: %d", len(host_ips)) if len(host_ips) < 2 or len(pods) < 2: result_code = 0 logging.getLogger().critical( "%s has %d pods on %d hosts, not distributed", podname, len(pods), len(host_ips)) if result_code == 0: logging.getLogger().critical("Please check pods are in running " "state, and on unique hosts") logging.getLogger().critical("oc get pods -n %s -o wide", self.args.namespace) # result_code 1 means the pods are on different nodes # count_pods_running means the running pod number self.send_metrics(keybase=keybase, location=result_code, status=count_pods_running) def send_metrics(self, keybase="", location="", status=""): """send_metrics""" ms = MetricSender(verbose=self.args.verbose) ms.add_metric({keybase + '.location': location}) ms.add_metric({keybase + '.status': status}) ms.send_metrics()