作者所在的项目是与运营商合作的,多数情况下,生产环境的服务器都是部署在内网,这让监控变得非常困难,内网的访问限制控制非常严格,很多时间都需要使用VPN才能远程接入,那么在这种情况下,自动化监控变得非常的遥不可及。
大家试想一下,在这样的场景下如何监控内网的业务呢?目前我想的的方案主要有如下几个
1.开通一个监控端口给外网,同时在内网部署一个监控服务,通过这个端口把数据发到邮箱或者接入中心监控平台。
2.如果条件不允许开通任何端口到外网,可以使用程序模拟登陆VPN,点击浏览器,去抓图或者去查询数据库的数据
3.其它方案
今天我将介绍第二种方案,先上代码:
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Date;
public class ScreenAction {
/**
* 刷新并且保存截图
*
* @param filePath 文件路径
* @param fileName 文件名称
* @throws Exception
*/
public static void reFrshAndcaptureScreen(String filePath, String fileName) throws Exception {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screenRectangle = new Rectangle(screenSize);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_F5);
BufferedImage image = robot.createScreenCapture(screenRectangle);
//保存路径
File screenFile = new File(filePath);
if (!screenFile.exists()) {
screenFile.mkdir();
}
File f = new File(screenFile, fileName);
ImageIO.write(image, "png", f);
//自动打开
// if (Desktop.isDesktopSupported()
// && Desktop.getDesktop().isSupported(Desktop.Action.OPEN)){
// Desktop.getDesktop().open(f);
// }
}
public static void main(String[] args) {
try {
int i = 5;
for (int i1 = 0; i1 < i; i1++) {
reFrshAndcaptureScreen("d:\\你好", DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN) + ".PNG");
Thread.sleep(2000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意pom.xlm里要引入hutool工具类:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.4.3</version>
</dependency>
Robot 还可以模拟鼠标的移动与点击,大家可以自行尝试一下,方法就是定位到桌面的软件位置坐标,调用鼠标点击函数就可以实现。
robot.mouseMove();
robot.mousePress();
实现的思路是先定位到软件的位置mouseMove,然后调用mousePress
最后再调用屏幕截图,使用邮件API把相关的截图通过邮件发送到管理员邮箱就可以实现监控啦。
网友评论