1
0
mirror of https://github.com/newnius/YAO-agent.git synced 2025-06-07 22:01:55 +00:00

update agent, add more metrics

This commit is contained in:
Newnius 2019-04-24 15:14:01 +08:00
parent b910e3131e
commit 4a6cd8e8a0
6 changed files with 57 additions and 14 deletions

View File

@ -2,7 +2,7 @@ FROM quickdeploy/yao-python3
MAINTAINER Newnius <newnius.cn@gmail.com> MAINTAINER Newnius <newnius.cn@gmail.com>
RUN pip3 install docker kafka RUN pip3 install docker kafka psutil
ADD bootstrap.sh /etc/bootstrap.sh ADD bootstrap.sh /etc/bootstrap.sh

View File

@ -1,31 +1,37 @@
# YAO-agent # YAO-agent
```bash
bin/kafka-topics.sh \
--describe \
--zookeeper zookeeper_node1:2181,zookeeper_node2:2181,zookeeper_node3:2181 \
--topic yao
```
```bash ```bash
bin/kafka-topics.sh \ bin/kafka-topics.sh \
--create \ --create \
--zookeeper zookeeper_node1:2181,zookeeper_node2:2181,zookeeper_node3:2181 \ --zookeeper zookeeper-node1:2181,zookeeper-node2:2181,zookeeper-node3:2181 \
--replication-factor 3 \ --replication-factor 3 \
--partitions 1 \ --partitions 1 \
--topic yao --topic yao
``` ```
```bash
bin/kafka-topics.sh \
--describe \
--zookeeper zookeeper-node1:2181,zookeeper-node2:2181,zookeeper-node3:2181 \
--topic yao
```
```bash ```bash
bin/kafka-console-consumer.sh \ bin/kafka-console-consumer.sh \
--bootstrap-server kafka_node1:9091,kafka_node2:9092,kafka_node3:9093 \ --bootstrap-server kafka-node1:9092,kafka-node2:9092,kafka-node3:9092 \
--topic yao \ --topic yao \
--from-beginning --from-beginning
``` ```
```bash ```bash
bin/kafka-console-producer.sh \ bin/kafka-console-producer.sh \
--broker-list kafka_node1:9091,kafka_node2:9092,kafka_node3:9093 \ --broker-list kafka-node1:9092,kafka-node2:9092,kafka-node3:9092 \
--topic yao
```
```bash
bin/kafka-topics.sh \
--delete \
--zookeeper zookeeper-node1:2181,zookeeper-node2:2181,zookeeper-node3:2181 \
--topic yao --topic yao
``` ```

View File

@ -2,6 +2,9 @@
# TODO: monitor the processes # TODO: monitor the processes
# run nvidia-smi in background to speed up the query and reduce CPU load (why?)
nvidia-smi daemon
python3 /root/monitor.py & python3 /root/monitor.py &
python3 /root/executor.py & python3 /root/executor.py &

View File

@ -114,6 +114,26 @@ class MyHandler(BaseHTTPRequestHandler):
container.stop() container.stop()
msg = {"code": 0} msg = {"code": 0}
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
self.wfile.write(bytes(json.dumps(msg), "utf-8"))
elif self.path == "/remove":
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={
'REQUEST_METHOD': 'POST',
'CONTENT_TYPE': self.headers['Content-Type'],
})
container_id = form["id"].value
client = docker.from_env()
container = client.containers.get(container_id)
container.remove(force=True)
msg = {"code": 0}
self.send_response(200) self.send_response(200)
self.send_header('Content-type', 'application/json') self.send_header('Content-type', 'application/json')
self.end_headers() self.end_headers()

View File

@ -5,6 +5,9 @@ import json
from xml.dom.minidom import parse from xml.dom.minidom import parse
import xml.dom.minidom import xml.dom.minidom
from kafka import KafkaProducer from kafka import KafkaProducer
import multiprocessing
import psutil
import math
ClientID = os.getenv('ClientID', 1) ClientID = os.getenv('ClientID', 1)
ClientHost = os.getenv('ClientHost', "localhost") ClientHost = os.getenv('ClientHost', "localhost")
@ -71,7 +74,17 @@ def report_msg():
stats.append(stat) stats.append(stat)
post_fields = {'id': ClientID, 'host': ClientHost, 'status': stats} mem = psutil.virtual_memory()
post_fields = {
'id': ClientID,
'host': ClientHost,
'status': stats,
'cpu_num': multiprocessing.cpu_count(),
'cpu_load': os.getloadavg()[0],
'mem_total': math.floor(mem.total / (1024. ** 3)),
'mem_available': math.floor(mem.available / (1024. ** 3))
}
data = json.dumps(post_fields) data = json.dumps(post_fields)
producer = KafkaProducer(bootstrap_servers=KafkaBrokers) producer = KafkaProducer(bootstrap_servers=KafkaBrokers)

View File

@ -36,7 +36,7 @@ def get_status(id):
container = client.containers.list(all=True, filters={'id': id}) container = client.containers.list(all=True, filters={'id': id})
status = {} status = {}
if len(container) > 0: if len(container) > 0:
container= container[0] container = container[0]
status['id'] = container.short_id status['id'] = container.short_id
status['image'] = container.attrs['Config']['Image'] status['image'] = container.attrs['Config']['Image']
status['image_digest'] = container.attrs['Image'] status['image_digest'] = container.attrs['Image']
@ -47,6 +47,7 @@ def get_status(id):
if status['command'] is not None: if status['command'] is not None:
status['command'] = ' '.join(container.attrs['Config']['Cmd']) status['command'] = ' '.join(container.attrs['Config']['Cmd'])
print(status) print(status)
print(container.attrs)
get_status('') get_status('')