start prometheus and cadvisor with Dockernet
diff --git a/ansible/install.yml b/ansible/install.yml
index 19c1ef2..b31615e 100755
--- a/ansible/install.yml
+++ b/ansible/install.yml
@@ -53,3 +53,9 @@
- name: install docker-py
pip: name=docker-py state=latest
+
+ - name: install prometheus_client
+ pip: name=prometheus_client state=latest
+
+
+
diff --git a/setup.py b/setup.py
index 5bcad50..367c4fb 100644
--- a/setup.py
+++ b/setup.py
@@ -22,7 +22,8 @@
'Flask',
'flask_restful',
'docker-py',
- 'requests'
+ 'requests',
+ 'prometheus_client'
],
zip_safe=False,
entry_points={
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index 1f7ff2e..d745069 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -7,6 +7,8 @@
import time
from prometheus_client import start_http_server, Summary, Histogram, Gauge, Counter
import threading
+from subprocess import Popen
+from os import getcwd
logging.basicConfig(level=logging.INFO)
@@ -61,12 +63,16 @@
mon_port = None
}
'''
- self.network_metrics=[]
+ self.network_metrics = []
# start monitoring thread
self.monitor_thread = threading.Thread(target=self.get_network_metrics)
self.monitor_thread.start()
+ # helper tools
+ self.prometheus_process = None
+ self.cAdvisor_process = None
+
# first set some parameters, before measurement can start
def setup_metric(self, vnf_name, vnf_interface=None, metric='tx_packets'):
@@ -244,4 +250,39 @@
url = self.REST_api + '/' + str(prefix) + '/' + str(dpid)
req = urllib2.Request(url)
ret = urllib2.urlopen(req).read()
- return ret
\ No newline at end of file
+ return ret
+
+ def start_Prometheus(self, port=9090):
+ cmd = ["docker",
+ "run",
+ "--rm",
+ "-p", "{0}:9090".format(port),
+ "-v", "{0}/prometheus.yml:/etc/prometheus/prometheus.yml".format(getcwd()),
+ "--name", "prometheus",
+ "prom/prometheus"
+ ]
+
+ self.prometheus_process = Popen(cmd)
+
+ def start_cAdvisor(self, port=8090):
+ cmd = ["docker",
+ "run",
+ "--rm",
+ "--volume=/:/rootfs:ro",
+ "--volume=/var/run:/var/run:rw",
+ "--volume=/sys:/sys:ro",
+ "--volume=/var/lib/docker/:/var/lib/docker:ro",
+ "--publish={0}:8080".format(port),
+ "--name=cadvisor",
+ "google/cadvisor:latest"
+ ]
+ self.cAdvisor_process = Popen(cmd)
+
+ def stop(self):
+ if self.prometheus_process is not None:
+ self.prometheus_process.terminate()
+ self.prometheus_process.kill()
+
+ if self.cAdvisor_process is not None:
+ self.cAdvisor_process.terminate()
+ self.cAdvisor_process.kill()
diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py
index 8130f84..c3c3c03 100755
--- a/src/emuvim/dcemulator/net.py
+++ b/src/emuvim/dcemulator/net.py
@@ -178,6 +178,8 @@
# stop Ryu controller
Dockernet.stop(self)
self.stopRyu()
+ # stop the monitor agent
+ self.monitor_agent.stop()
def CLI(self):
CLI(self)
diff --git a/src/emuvim/dcemulator/prometheus.yml b/src/emuvim/dcemulator/prometheus.yml
new file mode 100644
index 0000000..2915578
--- /dev/null
+++ b/src/emuvim/dcemulator/prometheus.yml
@@ -0,0 +1,36 @@
+global:
+ scrape_interval: 15s # By default, scrape targets every 15 seconds.
+
+ # Attach these labels to any time series or alerts when communicating with
+ # external systems (federation, remote storage, Alertmanager).
+ external_labels:
+ monitor: 'codelab-monitor'
+
+# A scrape configuration containing exactly one endpoint to scrape:
+# Here it's Prometheus itself.
+scrape_configs:
+ # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
+ - job_name: 'prometheus'
+
+ # Override the global default and scrape targets from this job every 5 seconds.
+ scrape_interval: 5s
+
+ target_groups:
+ #- targets: ['localhost:9090']
+
+ - job_name: 'son-emu'
+
+ # Override the global default and scrape targets from this job every 5 seconds.
+ scrape_interval: 5s
+
+ target_groups:
+ - targets: ['172.17.0.1:8000']
+
+ - job_name: 'cAdvisor'
+
+ # Override the global default and scrape targets from this job every 5 seconds.
+ scrape_interval: 5s
+
+ target_groups:
+ - targets: ['172.17.0.1:8090']
+