Implements A10 Load Balancer plugin configurations
Change-Id: Ic8a66d15f96da7262a3ceb0d2c74031fbb291cb9
This commit is contained in:
parent
8d133c4013
commit
dae6e46c4c
7
conf.d/a10_system_check.yaml.example
Normal file
7
conf.d/a10_system_check.yaml.example
Normal file
@ -0,0 +1,7 @@
|
||||
init_config:
|
||||
|
||||
instances:
|
||||
- name: a10_system_check
|
||||
a10_device: a10_device_ip
|
||||
a10_username: admin
|
||||
a10_password: password
|
@ -118,6 +118,7 @@ The following plugins are delivered via setup as part of the standard plugin che
|
||||
|
||||
| Setup Plugin Name | Dot File | Detail |
|
||||
| ----------------- | --------- | ---------------------- |
|
||||
| a10 | | |
|
||||
| apache | /root/.apache.cnf | Apache web server |
|
||||
| cacti | | |
|
||||
| cert_check | | |
|
||||
@ -289,6 +290,7 @@ These are the detection plugins included with the Monasca Agent. See [Customiza
|
||||
|
||||
| Detection Plugin Name | Type |
|
||||
| --------------------- | ---------------------- |
|
||||
| a10 | Plugin |
|
||||
| apache | Plugin |
|
||||
| barbican | ServicePlugin |
|
||||
| bind | Plugin |
|
||||
@ -441,6 +443,26 @@ These parameters may added to `instances` in the plugin `.yaml` configuration fi
|
||||
|
||||
By default, all metrics are enabled.
|
||||
|
||||
## A10
|
||||
This section describes the A10 System Check.
|
||||
|
||||
```
|
||||
init_config:
|
||||
|
||||
instances:
|
||||
- name: a10_system_check
|
||||
a10_device: a10_device_ip
|
||||
a10_username: admin
|
||||
a10_password: password
|
||||
```
|
||||
|
||||
| Metric Name | Dimensions | Semantics |
|
||||
| ----------- | ---------- | --------- |
|
||||
| a10.memory_total_mb | a10_device, service=networking | Total memory presented in MB
|
||||
| a10.memory_used_mb | a10_device, service=networking | Memory used presented in MB
|
||||
| a10.memory_free_mb | a10_device, service=networking | Free memory presented in MB
|
||||
| a10.memory_used | a10_device, service=networking | Realtime Memory Usage
|
||||
|
||||
## Apache
|
||||
This section describes the Apache Web Server check that can be performed by the Agent. The Apache check gathers metrics on the Apache Web Server. The Apache check requires a configuration file called apache.yaml to be available in the agent conf.d configuration directory. The config file must contain the server url, username and password (If you are using authentication) that you are interested in monitoring.
|
||||
|
||||
|
101
monasca_agent/collector/checks_d/a10_system_check.py
Normal file
101
monasca_agent/collector/checks_d/a10_system_check.py
Normal file
@ -0,0 +1,101 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import json
|
||||
from monasca_agent.collector.checks import AgentCheck
|
||||
import requests
|
||||
import requests.adapters
|
||||
from requests.adapters import HTTPAdapter
|
||||
from requests.packages import urllib3
|
||||
from requests.packages.urllib3.poolmanager import PoolManager
|
||||
import ssl
|
||||
|
||||
|
||||
class SSLHTTPAdapter(HTTPAdapter):
|
||||
def init_poolmanager(self, connections, maxsize, block=False):
|
||||
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
||||
context.options |= ssl.OP_NO_SSLv2
|
||||
context.options |= ssl.OP_NO_SSLv3
|
||||
self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize, block=block, ssl_version=context)
|
||||
|
||||
|
||||
class A10Session(object):
|
||||
|
||||
def __init__(self, device, username, passwd, ssl):
|
||||
self.device = device
|
||||
self.username = username
|
||||
self.passwd = passwd
|
||||
|
||||
def get_authorization_signature(self):
|
||||
url = "https://" + self.device + "/axapi/v3/auth"
|
||||
payload = {"credentials": {"username": self.username, "password": self.passwd}}
|
||||
try:
|
||||
get_request = requests.post(url=url, headers={"content-type": "application/json"},
|
||||
data=json.dumps(payload), verify=False)
|
||||
except urllib3.exceptions.SSLError as e:
|
||||
self.log.warning("Caught SSL exception {}".format(e))
|
||||
|
||||
signature = json.loads(get_request.text)
|
||||
authorization_signature = str(signature["authresponse"]["signature"])
|
||||
return authorization_signature
|
||||
|
||||
def log_out(self, auth_sig):
|
||||
url = "https://" + self.device + "/axapi/v3/logoff"
|
||||
requests.post(url=url, headers={"Content-type": "application/json",
|
||||
"Authorization": "A10 %s" % auth_sig}, verify=False)
|
||||
|
||||
|
||||
class A10MemoryCheck(AgentCheck):
|
||||
|
||||
def __init__(self, name, init_config, agent_config):
|
||||
super(A10MemoryCheck, self).__init__(name, init_config, agent_config)
|
||||
|
||||
def check(self, instance):
|
||||
a10_device = instance.get("a10_device")
|
||||
username = instance.get('a10_username')
|
||||
password = instance.get('a10_password')
|
||||
dimensions = self._set_dimensions({'service': 'networking', 'a10_device': a10_device}, instance)
|
||||
|
||||
try:
|
||||
authed_session = A10Session(a10_device, username, password, SSLHTTPAdapter)
|
||||
self.auth_sig = authed_session.get_authorization_signature()
|
||||
|
||||
# Raise exception and halt program execution
|
||||
except Exception as e:
|
||||
self.log.exception(e)
|
||||
raise
|
||||
|
||||
memory_data = self.get_memory_stats(a10_device)
|
||||
for key, value in memory_data.items():
|
||||
self.gauge(key, value, dimensions)
|
||||
|
||||
try:
|
||||
authed_session.log_out(self.auth_sig)
|
||||
# Log a debug exception and continue on
|
||||
except Exception as e:
|
||||
self.log.exception(e)
|
||||
|
||||
def get_memory_stats(self, a10_device):
|
||||
memory_data = {}
|
||||
try:
|
||||
url = "https://" + a10_device + "/axapi/v3/system/memory/oper"
|
||||
try:
|
||||
request = requests.get(url=url, headers={"Content-type": "application/json",
|
||||
"Authorization": "A10 %s" % self.auth_sig}, verify=False)
|
||||
except urllib3.exceptions.SSLError as e:
|
||||
self.log.warning("Caught SSL exception {}".format(e))
|
||||
|
||||
data = request.json()
|
||||
|
||||
mem_used = data['memory']['oper']['Usage']
|
||||
|
||||
convert_kb_to_mb = 1024
|
||||
|
||||
memory_data['a10.memory_total_mb'] = (data['memory']['oper']['Total']) / convert_kb_to_mb
|
||||
memory_data['a10.memory_used_mb'] = (data['memory']['oper']['Used']) / convert_kb_to_mb
|
||||
memory_data['a10.memory_free_mb'] = (data['memory']['oper']['Free']) / convert_kb_to_mb
|
||||
memory_data['a10.memory_used'] = int(mem_used[:2])
|
||||
|
||||
except Exception as e:
|
||||
self.log.exception(e)
|
||||
|
||||
return memory_data
|
Loading…
Reference in New Issue
Block a user