Skip to content
Snippets Groups Projects
Verified Commit 1ddff537 authored by Josef Němec's avatar Josef Němec
Browse files

Make loadbalancer checks optional

parent 848daa50
No related branches found
No related tags found
1 merge request!15Make loadbalancer checks optional
Pipeline #335340 passed
...@@ -22,6 +22,7 @@ from prometheus_client import start_http_server, Gauge, REGISTRY, PROCESS_COLLEC ...@@ -22,6 +22,7 @@ from prometheus_client import start_http_server, Gauge, REGISTRY, PROCESS_COLLEC
from ping3 import ping from ping3 import ping
import openstack import openstack
from icmplib import traceroute from icmplib import traceroute
import keystoneauth1.exceptions.catalog as ks_exc
import timeout import timeout
...@@ -346,55 +347,58 @@ class AppMetrics: ...@@ -346,55 +347,58 @@ class AppMetrics:
# remove all statuses (clears delete loadbalancers) # remove all statuses (clears delete loadbalancers)
self.openstack_loadbalancer_status.clear() self.openstack_loadbalancer_status.clear()
# Reports LBs inaccessible via FIP # Reports LBs inaccessible via FIP
for lb in self.os_connection.load_balancer.load_balancers(): try:
if lb.is_admin_state_up: for lb in self.os_connection.load_balancer.load_balancers():
# catch partly created loadbalancers if lb.is_admin_state_up:
ip_address = None # catch partly created loadbalancers
ports = [] ip_address = None
try: ports = []
vip_port = self.os_connection.network.find_port(lb.vip_port_id) try:
sg = self.os_connection.network.find_security_group(vip_port.security_group_ids[0]) vip_port = self.os_connection.network.find_port(lb.vip_port_id)
sg_rules = sg.security_group_rules sg = self.os_connection.network.find_security_group(vip_port.security_group_ids[0])
fips = list(self.os_connection.network.ips(port_id=lb.vip_port_id)) sg_rules = sg.security_group_rules
ip_address = ipaddress.ip_address(lb.vip_address) fips = list(self.os_connection.network.ips(port_id=lb.vip_port_id))
if fips: ip_address = ipaddress.ip_address(lb.vip_address)
ip_address = ipaddress.ip_address(fips[0].floating_ip_address) if fips:
ip_address = ipaddress.ip_address(fips[0].floating_ip_address)
logging.debug(str(ip_address) + " | Loadbalancer security group: " + str(sg))
logging.debug(str(ip_address) + " | Loadbalancer security group: " + str(sg))
# ip address from private scopes, hidden from script
if ip_address.is_private: # ip address from private scopes, hidden from script
if ip_address.is_private:
self.openstack_loadbalancer_status.labels(
id=lb.id,
status=IPAddressStatus.HIDDEN.value
).set(1.0)
continue
# check opened ports in health monitor range (1025+)
for sg_rule in sg_rules:
ports.append(sg_rule.get('port_range_min') or 0)
# add manually if missing - kypo fix
if not AppMetrics.loadbalancer_accessibility_ports[0] in ports:
ports.append(AppMetrics.loadbalancer_accessibility_ports[0])
logging.info(str(ip_address) + " | Loadbalancer ports: " + str(ports))
except Exception:
self.openstack_loadbalancer_status.labels( self.openstack_loadbalancer_status.labels(
id=lb.id, id=lb.id,
status=IPAddressStatus.HIDDEN.value status=IPAddressStatus.UNREACHABLE.value
).set(1.0) ).set(1.0)
continue continue
# check opened ports in health monitor range (1025+) lb_status = self.get_ip_accessibility_status_ports(
for sg_rule in sg_rules: ip_address,
ports.append(sg_rule.get('port_range_min') or 0) [port for port in ports if port in AppMetrics.loadbalancer_accessibility_ports]
# add manually if missing - kypo fix )
if not AppMetrics.loadbalancer_accessibility_ports[0] in ports: if lb_status == IPAddressStatus.UNREACHABLE.value:
ports.append(AppMetrics.loadbalancer_accessibility_ports[0]) ping_status = self.get_ip_accessibility_status_ping(ip_address)
logging.info(str(ip_address) + " | Loadbalancer, ports unreachable, pinged with status: " + str(ping_status))
logging.info(str(ip_address) + " | Loadbalancer ports: " + str(ports)) if ping_status:
lb_status = ping_status
except Exception: logging.info(str(ip_address) + " | LB id: " + str(lb.id) + ", status: " + str(lb_status))
self.openstack_loadbalancer_status.labels( self.openstack_loadbalancer_status.labels(id=lb.id, status=lb_status).set(1.0)
id=lb.id, except ks_exc.EndpointNotFound:
status=IPAddressStatus.UNREACHABLE.value logging.info("Loadbalancer endpoint not found. Skipping loadbalancer checks...")
).set(1.0)
continue
lb_status = self.get_ip_accessibility_status_ports(
ip_address,
[port for port in ports if port in AppMetrics.loadbalancer_accessibility_ports]
)
if lb_status == IPAddressStatus.UNREACHABLE.value:
ping_status = self.get_ip_accessibility_status_ping(ip_address)
logging.info(str(ip_address) + " | Loadbalancer, ports unreachable, pinged with status: " + str(ping_status))
if ping_status:
lb_status = ping_status
logging.info(str(ip_address) + " | LB id: " + str(lb.id) + ", status: " + str(lb_status))
self.openstack_loadbalancer_status.labels(id=lb.id, status=lb_status).set(1.0)
def parse_arguments(script_summary="script"): def parse_arguments(script_summary="script"):
""" argument parser """ """ argument parser """
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment