网站模版怎么上传到空间,网页设计与制作作业代码,网站建设部署与发布试题,wordpress表单数据前台显示图片一、背景最近#xff0c;小哈主要在负责日志中台的开发工作, 等等#xff0c;啥是日志中台#xff1f;俺只知道中台概念#xff0c;这段时间的确很火#xff0c;但是日志中台又是用来干啥的#xff1f;这里小哈尽量地通俗的说下日志中台的职责#xff0c;再说日志中台之…一、背景最近小哈主要在负责日志中台的开发工作, 等等啥是日志中台俺只知道中台概念这段时间的确很火但是日志中台又是用来干啥的这里小哈尽量地通俗的说下日志中台的职责再说日志中台之前我们先扯点别的相信大家对集中式日志平台 ELK 都知道一些生产环境中, 稍复杂的架构服务一般都是集群部署这样日志就会分散在每台服务器上一旦发生问题想要查看日志就会非常繁琐你需要登录每台服务器找日志因为你不确定请求被打到哪个节点上。另外任由开发人员登录服务器查看日志本身就存在安全隐患不小心执行了 rm -rf * 咋办通过 ELK , 我们可以方便的将日志收集到一处(Elasticsearch 集群)来进行多维度的分析。但是部署高性能、高可用的 ELK 是有门槛的业务组想要快速的拥有集中式日志分析的能力往往需要经过前期的技术调研测试踩坑才能将这个平台搭建起来。日志中台的使命就是让业务线能够快速拥有这种能力只需傻瓜式的在日志平台完成接入操作即可。臭嗨说了这么多跟你这篇文章的主题有啥关系额小哈这就进入主题。既然想统一管理日志总得将这些分散的日志采集起来吧那么就需要一个日志采集器Logstash 和 Filebeat 都有采集日志的能力但是 Filebeat 相较于 Logstash 的笨重, 它更轻量级几乎零占用服务器系统资源这里我们选型 Filebeat。业务组在日志平台完成相关接入流程后平台会提供一个采集器包。接入方需要做的就是下载这个采集器包并扔到指定服务器上解压运行即可开始采集日志然后就可以在日志平台的管控页面分析搜索这些被收集的日志了。这个 Filebeat 采集器包里面包含了采集日志文件路径输出到 Kafka 集群以及一些个性化的采集规则等等。怎么样是不是感觉很棒呢二、如何通过 Java 打包文件2.1 添加 Maven 依赖org.apache.commonscommons-compress1.122.2 打包核心代码通过 Apache compress 工具打包思路大致如下①创建一个 FileOutputStream 到输出文件(.tar.gz)文件。②创建一个GZIPOutputStream用来包装FileOutputStream对象。③创建一个TarArchiveOutputStream用来包装GZIPOutputStream对象。④接着读取文件夹中的所有文件。⑤如果是目录则将其添加到 TarArchiveEntry。⑥如果是文件依然将其添加到 TarArchiveEntry 中然后还需将文件内容写入 TarArchiveOutputStream 中。接下来直接上代码import org.apache.commons.compress.archivers.tar.TarArchiveEntry;import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;import org.apache.commons.io.IOUtils;import java.io.*;import java.util.zip.GZIPOutputStream;/*** author 犬小哈 (公众号 小哈学Java)* date 2019-07-15* time 16:15* discription**/public class TarUtils {/*** 压缩* param sourceFolder 指定打包的源目录* param tarGzPath 指定目标 tar 包的位置* return* throws IOException*/public static void compress(String sourceFolder, String tarGzPath) throws IOException {createTarFile(sourceFolder, tarGzPath);}private static void createTarFile(String sourceFolder, String tarGzPath) {TarArchiveOutputStream tarOs null;try {// 创建一个 FileOutputStream 到输出文件(.tar.gz)FileOutputStream fos new FileOutputStream(tarGzPath);// 创建一个 GZIPOutputStream用来包装 FileOutputStream 对象GZIPOutputStream gos new GZIPOutputStream(new BufferedOutputStream(fos));// 创建一个 TarArchiveOutputStream用来包装 GZIPOutputStream 对象tarOs new TarArchiveOutputStream(gos);// 若不设置此模式当文件名超过 100 个字节时会抛出异常异常大致如下// is too long ( 100 bytes)// 具体可参考官方文档 http://commons.apache.org/proper/commons-compress/tar.html#Long_File_NamestarOs.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);addFilesToTarGZ(sourceFolder, , tarOs);} catch (IOException e) {e.printStackTrace();}finally{try {tarOs.close();} catch (IOException e) {e.printStackTrace();}}}public static void addFilesToTarGZ(String filePath, String parent, TarArchiveOutputStream tarArchive) throws IOException {File file new File(filePath);// Create entry name relative to parent file pathString entryName parent file.getName();// 添加 tar ArchiveEntrytarArchive.putArchiveEntry(new TarArchiveEntry(file, entryName));if (file.isFile()) {FileInputStream fis new FileInputStream(file);BufferedInputStream bis new BufferedInputStream(fis);// 写入文件IOUtils.copy(bis, tarArchive);tarArchive.closeArchiveEntry();bis.close();} else if (file.isDirectory()) {// 因为是个文件夹无需写入内容关闭即可tarArchive.closeArchiveEntry();// 读取文件夹下所有文件for (File f : file.listFiles()) {// 递归addFilesToTarGZ(f.getAbsolutePath(), entryName File.separator, tarArchive);}}}public static void main(String[] args) throws IOException {// 测试一波将 filebeat-7.1.0-linux-x86_64 打包成名为 filebeat-7.1.0-linux-x86_64.tar.gz 的 tar 包compress(/Users/a123123/Work/filebeat-7.1.0-linux-x86_64, /Users/a123123/Work/tmp_files/filebeat-7.1.0-linux-x86_64.tar.gz);}}至于代码每行的作用小伙伴们可以看代码注释说的已经比较清楚了。接下来执行 main 方法测试一下效果看看打包是否成功生成采集器 tar.gz 包成功后业务组只需将 tar.gz 下载下来并扔到指定服务器解压运行即可完成采集任务啦~三、结语本文主要还是介绍如何通过 Java 来完成打包功能关于 ELK 相关的知识小哈会在后续的文章中分享给大家本文只是提及一下欢迎小伙伴们持续关注哟下期见~四、Ref欢迎关注微信公众号: 小哈学Java更多干货文章请关注笔者公众号:小哈学Java (ID: xiaoha_java), 专注于分享Java领域干货文章, 不限于 BAT 面试题算法数据库Spring Boot, Spring Cloud SOA, 高并发JVM 调优, 数据库Docker 容器 ELK, DevOps 等相关知识另外关注回复「资源」即可获取全文最热的 Java 面试架构学习资源哟~