• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java实现对服务器的自动巡检邮件通知

java实现对服务器的自动巡检邮件通知

作者:小卖铺的老爷爷 字体:[增加 减小] 来源:互联网 时间:2017-05-28

小卖铺的老爷爷 通过本文主要向大家介绍了java实现http服务器,java实现web服务器,java实现ftp服务器,ssh服务器 java实现,黏土服务器java下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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;
/**
 * 巡检任务
 * @author zhangzhuo
 *
 */
public class InspAction {
 final static Logger logger = LoggerFactory.getLogger(InspAction.class);
/* public static void main(String[] args) {
  InspAction n = new InspAction();
  try {
   n.execute();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   logger.error("dd");
  }
 }*/
 /**
  * 执行巡检任务
  * @param args
  */
 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);
  }
 }
 /**
  * 数据处理
  * @return
  */
 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;
 }

}

</div>

pojo:

package com.save.pojo;

public class Cmd {
 private String ip;
 private String username;
 private String password;
 private String shell;
 private String[] cmds;
 private String server;

 public String getServer() {
  return server;
 }
 public void setServer(String server) {
  this.server = server;
 }
 public String getShell() {
  return shell;
 }
 public void setShell(String shell) {
  this.shell = shell;
 }
 public String getIp() {
  return ip;
 }
 public void setIp(String ip) {
  this.ip = ip;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public String[] getCmds() {
  return cmds;
 }
 public void setCmds(String[] cmds) {
  this.cmds = cmds;
 } 
}

</div>

工具类:

package com.save.until;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SocketFactory;
/**
 * SSH创建与服务器连接工具类
 * @author 张卓
 * 2017-4-21
 */
public class JSCHUtil {
 final static Logger logger = LoggerFactory.getLogger(JSCHUtil.class);
 private static JSch jsch = new JSch();
 /**
 * 创建Session,并打开Session连接
 * 
 */
 public static Session createSession(String dstIp, int dstPort,
  final String localIp, final int localPort, String userName,
  String password, final int timeOut) throws JSchException {
 //jsch.setKnownHosts("/home/foo/.ssh/known_hosts");
  logger.info("开始连接:"+dstIp);
 // 建立一个SSH连接
 Session session = jsch.getSession(userName, dstIp, dstPort);
 session.setPassword(password);
 
 Properties sshConfig = new Properties();
 sshConfig.put("StrictHostKeyChecking", "no");//跳过主机检查
 session.setConfig(sshConfig);
 // 此socket工厂用于创建目标主机的socket,
 // 并创建我们使用的这个socket字节流
 session.setSocketFactory(new SocketFactory() {
  public OutputStream getOutputStream(Socket socket)
   throws IOException {
  return socket.getOutputStream();
  }
  public InputStream getInputStream(Socket socket) throws IOException {
  return socket.getInputStream();
  }
  public Socket createSocket(String host, int port)
   throws IOException, UnknownHostException {
  Socket socket = new Socket();
  if (localIp != null) {
   socket.bind(new InetSocketAddress(InetAddress
    .getByName(localIp), localPort));
  }
  socket.connect(
   new InetSocketAddress(InetAddress.getByName(host), port),
   timeOut);
  return socket;
  }
 });
 session.connect(timeOut);
 return session;
 }
}

</div>

package com.save.until;
import java.util.Properties;
import java.util.Set;

import javax.mail.



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • java 实现微信服务器下载图片到自己服务器
  • Java使用NioSocket手动实现HTTP服务器
  • java实现对服务器的自动巡检邮件通知
  • java 实现微信服务器下载图片到自己服务器
  • Java使用NioSocket手动实现HTTP服务器
  • java实现对服务器的自动巡检邮件通知

相关文章

  • 2017-05-28java不用循环语句打印数组元素的实例
  • 2017-05-28java多线程的同步方法实例代码
  • 2017-05-28Java中的functor实现
  • 2017-05-28java实现ftp文件上传下载功能
  • 2017-05-28对dbunit进行mybatis DAO层Excel单元测试(必看篇)
  • 2017-05-28java Socket实现简单模拟HTTP服务器
  • 2017-05-28SpringBoot拦截器实现对404和500等错误的拦截
  • 2017-05-28Java创建内部类对象实例详解
  • 2017-05-28详解前后端分离之Java后端
  • 2017-05-28java实现字符串反转

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解Spring框架之基于Restful风格实现的SpringMVC
    • SpringBoot加载静态资源的方式
    • spring boot配合前端实现跨域请求访问
    • Java中的SimpleDateFormat使用详解
    • Java中Object.equals和String.equals的区别详解
    • Jsoup解析html实现招聘信息查询功能
    • Java Calendar类常用示例_动力节点Java学院整理
    • spring boot 使用@Async实现异步调用方法
    • 用java的spring实现一个简单的IOC容器示例代码
    • mybatis中oracle实现分页效果实例代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有