点击查看代码
import requests
import subprocess,json
import paramiko
import socket
NORMAL=0
TIMEOUT=2
ip_list= ["29.2.210.202","29.2.210.203","29.2.210.204","29.2.210.235","29.2.210.238","29.2.210.239","29.23.177.31","29.23.177.32",\
"29.3.218.207","29.3.218.212","29.2.209.216","29.2.209.220","29.3.218.208","29.3.218.213"]
def port_check(port,host_list,timeout=TIMEOUT)
down_list=[]
for ip in host_list:
cs = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
address=(ip,port)
status = cs.connect_ex(address)
cs.settimeout(timeout)
if status !=NORMAL:
down_list.append(ip)
return down_list
def send_mail(msg_sub,msg_content):
msg_to = ["zoubin51@126.com"]
email_url = "http://29.23.177.177:8080/MailService/sendMail"
headers = {"Content-Type":"application/json:charset=ascii"}
param = { "msg_from":"bloan-rcpm-cicd@pingan.com.cn","msg_to":msg_to,"msg_content":msg_content,"msg_sub":msg_sub }
res = requests.port(email_url,headers=headers,json=param)
return res
def ping(host_list):
for i in host_list:
f = subprocess(f"ping -c1 -W1 {i}",encodings="utf-8",text= True,shell = True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
f.commulicate()
if f.returncode != 0:
host_down.append(i)
if host_down:
msg_sub = "jenkins 节点宕机!"
msg_content = "jenkins 节点 %s 已经宕机,请关注!" % host_down
send_mail(msg_sub,msg_content)
return host_down
def service_check(port,lists,service):
down_list = port_check(port,lists)
if down_list:
msg_sub = "%s 服务掉线" % service
msg_content = "jenkins 节点 %s, %s服务已经掉线,请关注!" %(down_list,service)
send_mail(msg_sub,msg_content)
ssh_down_list = port_check(22,ip_list)
key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
ssh_up_list= [i for i in ip_list if i not in ssh_down_list]
def get_monitor(up_list,user):
for i in up_list:
trans = paramiko.Transport((i,22))
trans.connect(username=user,pkey=key)
ssh = paramiko.SSHClient()
ssh._transport=trans
sftp = paramiko.SFTPClient.from_transport(trans)
sftp.put('/root/client_monitor.py','/tmp/client_monitor.py')
ssh.exec_command('chmod +x /tmp/client_monitor.py')
stdin,stdout,stderr = ssh.exec_command("python3 /tmp/client_monitor.py")
msg = stdout.read().decode('utf-8')
res_os = json.loads(msg)
ssh.close()
data = f'''<body>
<div>
</div>
<div>
</div>
<table border="1px solid black">
<thead style="background-color: #B9B9FF">
<tr>
<th>TIME</th>
<th>IP</th>
<th>CPU(%)</th>
<th>MEMORY(%)</th>
<th>DISK(%)</th>
</tr>
</thead>
<tbody align="center">
<tr>
<td>{res_os['TIME']}</td>
<td>{res_os['IP']}</td>
<td>{res_os['CPU_PER']}</td>
<td>{res_os['MEM_PER']}</td>
<td>{res_os['DISK_PER']}</td>
</tr>
</tbody>
</table>
</body> '''
if int(res_os["MEM_PER"]) > 90:
msg_sub = 'JEKINS节点内存预警'
msg_content = "JENKINS 节点【%s】内存使用率过高,请关注!<br>" %i + data
if int(res_os["DISK_PER"]) > 90:
msg_sub = 'JEKINS节点磁盘预警'
msg_content = "JENKINS 节点【%s】磁盘使用率过高,请关注!<br>" %i + data
if int(res_os["CPU_PER"]) > 90:
msg_sub = 'JEKINS节点CPU负载预警'
msg_content = "JENKINS 节点【%s】CPU负载过高,请关注!<br>" %i + data
ping(ip_list)
host_down = ping(ip_list)
ssh_list= [i for i in ip_list if i not in host_down]
service_check(22,ssh_list,'SSH')
jen_list = ["29.3.218.208","29.3.218.213"]
so_list = ["29.2.209.216"]
service_check(8080,so_list,'SONAR')
get_monitor(ssh_up_list,'root')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现