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:
parent
b910e3131e
commit
4a6cd8e8a0
@ -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
|
||||||
|
|
||||||
|
28
README.md
28
README.md
@ -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
|
||||||
```
|
```
|
@ -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 &
|
||||||
|
20
executor.py
20
executor.py
@ -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()
|
||||||
|
15
monitor.py
15
monitor.py
@ -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)
|
||||||
|
3
test.py
3
test.py
@ -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('')
|
||||||
|
Loading…
Reference in New Issue
Block a user