1L祭天

近期挤到一个需要 基于docker集群部署的环境下载各个服务器节点上的日志文件(对应的服务文件门路曾经做了映射)

首先来看一下架构

思路: 所有的服务都有主备之分,收集日志的思路即是在每个机器节点上装置一个monitor.jar的监控服务,通过以后主程序去调用monitor 而后返回对应的数据

主程序代码如下

public class LogDownloadController {    @GetMapping("loadLOgList")    public Resp loadLOgList(@RequestParam("remoteIp") String remoteIp,@RequestParam("appName") String appName) {        List<UploadFile> ja;        try {            String url = String.format("http://%s:%d/api/filelist/files/%s", remoteIp, 8887,appName);            String res = HttpUtil.get(url, 1000);            ja = JSONArray.parseObject(res, List.class);        } catch (Exception e) {            ja = Collections.emptyList();            log.error(e.getMessage());        }        return Resp.OK(ja);    }    @GetMapping("loadLOgQue")    public Resp loadLOgQue(@RequestParam("remoteIp") String remoteIp, @RequestParam("appName") String appName, @RequestParam("fileName") String fileName, HttpServletResponse httpServletResponse) {        try {            String url = String.format("http://%s:%d/api/filelist/files/%s/%s", remoteIp, 8887,fileName,appName);            httpServletResponse.setContentType("application/x-download");            httpServletResponse.setHeader("content-Disposition", "attachment;filename=" + fileName);            ServletOutputStream outputStream = httpServletResponse.getOutputStream();            HttpUtil.download(url, outputStream,true);        } catch (Exception e) {            log.error(e.getMessage());        }        return Resp.OK("success");    }}

monitor服务代码如下:

@RestController@RequestMapping("api/filelist")public class FileListController {    @Autowired    FileStorageService fileStorageService;    @GetMapping("/files/{appName}")    public ResponseEntity<List<UploadFile>> files(@PathVariable("appName") String appName) {        List<UploadFile> files = fileStorageService.loadListsByAppName(appName)                .map(path -> {                    String fileName = path.getFileName().toString();                    String url = MvcUriComponentsBuilder                            .fromMethodName(FileListController.class,                                    "getFile",                                    path.getFileName().toString(),appName                            ).build().toString();                    return new UploadFile(fileName, url);                }).collect(Collectors.toList());        return ResponseEntity.ok(files);    }    @GetMapping("/files/{filename:.+}/{appName}")    public ResponseEntity<Resource> getFile(@PathVariable("filename") String filename,@PathVariable("appName") String appName) {        Resource file = fileStorageService.load(filename,appName);        return ResponseEntity.ok()                .header(HttpHeaders.CONTENT_DISPOSITION,                        "attachment;filename=\"" + file.getFilename() + "\"")                .body(file);    }}
参考如下
springBoot2.0基于restFul格调的文件下载