1、需求之前一直是手动的巡检,然后贴图,最近服务器数量大增,有点忙不过来了。因为一直用的java,对shell脚本不是特别了解,所以这次用java写了个小项目,实现对多服务器,多任务的巡检,巡检结果有故障的会通过邮件通知。2、功能和效果巡检
1、需求
之前一直是手动的巡检,然后贴图,最近服务器数量大增,有点忙不过来了。因为一直用的java,对shell脚本不是特别了解,所以这次用java写了个小项目,实现对多服务器,多任务的巡检,巡检结果有故障的会通过邮件通知。
2、功能和效果
巡检的项目主要是服务,硬盘,内存等,命令可配置,巡检结果以日期和服务器为基准输出文件,错误信息通过邮件通知管理运维人员。
3、代码
action:
package com.save.action;import java.text.SimpleDateFORMat;import java.util.ArrayList;import java.util.Date;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.alibaba.fastJSON.jsON;import com.save.pojo.Cmd;import com.save.until.MailUtil;import com.save.until.PropertiesUtil;import com.save.until.sshCommUtil;import com.save.until.WriteUntil;public class InspAction { final static Logger logger = LoggerFactory.getLogger(InspAction.class); public void execute() throws Exception{ List<Cmd> list = this.handlerData(); Set<String> mail = new HashSet<String>(); for (Cmd cmd : list) { String ip = cmd.getIp(); int port = 22; String localIp = null; int localPort = 0; int timeOut = 6000; String userName = cmd.getUsername(); String passWord = cmd.getPassword(); String server = cmd.getServer(); String[] cmds = cmd.getCmds(); String[] result = null; logger.info(ip+"执行巡检任务开始"); try { result = SSHCommUtil.execShellCmdBySSH(ip, port, localIp, localPort, timeOut, userName, password, cmds); } catch (Exception e) { e.printStackTrace(); logger.error(ip+"巡检,服务器连接不上"); mail.add(ip+" "+"巡检,服务器连接不上"); } Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String dateString = formatter.format(date); //1、服务存活验证 2、硬盘占用验证 3、巡检结果写入文件 if (result != null) { for (String string : result) { if (string.contains("ps -ef|grep java")||string.contains("ps -ef|grep monGo")||string.contains("ps -ef|grep redis")) { if (!string.contains(server)) { mail.add(ip+" "+server+"服务不存在"); } } if (string.contains("df -h")) { String patt = "^[5]\\d{1}\\%|[5-9]\\d{1}\\%|\\d{3,}\\%$"; String group = null; Pattern p = Pattern.compile(patt); Matcher m = p.matcher(string); while (m.find()) { group = m.group(); } if (!StringUtils.isBlank(group)) { mail.add(ip+" "+"硬盘占用超出预警线"); } } WriteUntil.createFile("E:\\save", dateString, "\\"+ip+".txt", string); } logger.info(ip+"巡检结束"); } } //发送故障邮件通知 if (!mail.isEmpty()||mail.size()!=0) { MailUtil.getInstance().sendMail(mail); } } private List<Cmd> handlerData(){ logger.info("开始加载需要巡检的服务器数据"); Cmd cmd = null; List<Cmd> list = new ArrayList<Cmd>(); Map map = PropertiesUtil.getInstance().getAllProperty(); Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> entry = it.next(); cmd =new Cmd(); cmd.setIp(entry.geTKEy()); Cmd cmd2 = JSON.parseObject(entry.getValue(), Cmd.class); String[] cmds = cmd2.getShell().split(","); cmd.setCmds(cmds); cmd.setServer(cmd2.getServer()); cmd.setUsername(cmd2.getUsername()); cmd.setPassword(cmd2.getPassword()); list.add(cmd); } logger.info("数据加载完毕"); return list; }}
--结束END--
本文标题: java实现对服务器的自动巡检邮件通知
本文链接: https://lsjlt.com/news/226549.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0