首页 > 编程语言 >kube 小工具 java log

kube 小工具 java log

时间:2023-08-03 19:57:05浏览次数:33  
标签:kube java log length Active new apollo String

 

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class log {

    public static void main(String[] args) throws IOException {

        String namespace = null;
        String appname = null;
        
        if(args.length > 0) {
            namespace = args[0];
        }
        if(args.length > 1) {
            appname = args[1];
        }
        
        
        String out = kubectlgetpods(namespace);

        List<String> lines = toLines(out);
        StringBuffer sb = new StringBuffer();
        for (String line : lines) {
            sb.append(line).append("\r\n");
        }

        if(namespace == null) {
            return;
        }
        
        List<Map<String, String>> table = table(sb.toString(),
                new String[] { "NAME", "READY", "STATUS", "RESTARTS", "AGE"},
                new String[] { "LEFT", "LEFT", "LEFT", "LEFT", "LEFT"});

        String name = null;
        for (Map<String, String> map : table) {
            if(appname != null && map.get("NAME").contains(appname)) {
                name = map.get("NAME");
                 kubectllogs(namespace,name);
            }
        }

       


    }

    public static void kubectllogs(String namespace, String name) throws IOException {
//        Runtime runtime = Runtime.getRuntime();
        String command = "kubectl -n "+namespace+" logs -f " + name + " --since=10m";
        System.out.println(command);
//        Process process = runtime.exec(command);
//        String result = toStr(process.getInputStream());
//        process.destroy();
//        return result;
    }
    
    public static String kubectlgetpods(String namespace) throws IOException {
        Runtime runtime = Runtime.getRuntime();
        String cmd = "kubectl get namespaces";
        if(namespace != null) {
            cmd = "kubectl -n "+namespace+" get pods";
        }
        Process process = runtime.exec(cmd);
        String result = toStr(process.getInputStream());
        process.destroy();
        System.out.println(result);
        return result;
    }

    /**
     * 将流转为文本
     * @param in
     * @return
     * @throws IOException
     */
    public static String toStr(InputStream in) throws IOException {
        BufferedInputStream b = new BufferedInputStream(in);
        byte[] buffer = new byte[1024];
        int l = 0;
        StringBuffer sb = new StringBuffer();
        while ((l = b.read(buffer)) != -1) {
            sb.append(new String(buffer, 0, l));
        }
        return sb.toString();
    }
    
    /**
     * 将shell命令输出的文本转换为表格 
     * @param text    shell output
     * @param columns
     * @param aligns   LEFT or RIGHT
     * @return
     * @throws IOException
     */
    public static List<Map<String, String>> table(String text, String[] columns, String[] aligns) throws IOException {

        // 不提供默认左对齐 
        if (aligns == null) {
            aligns = new String[columns.length];
            for (int i = 0; i < aligns.length; i++) {
                aligns[i] = "LEFT";
            }
        }

        List<String> lines = toLines(text);
        List<Integer> verticalLineList = new ArrayList<Integer>();

        String titleLine = lines.get(0);

        for (int i = 0; i < columns.length - 1; i++) {
            String columnA = columns[i];
            String columnB = columns[i + 1];
            int boardLeft = 0;
            int boardRigth = 0;
            if (titleLine.indexOf(" " + columnA + " ") > -1) {
                boardLeft = titleLine.indexOf(" " + columnA + " ") + 1;
            } else if (titleLine.indexOf(columnA + " ") > -1) {
                boardLeft = titleLine.indexOf(columnA + " ");
            } else {
                boardLeft = titleLine.indexOf(columnA);
            }
            if (titleLine.indexOf(" " + columnB + " ") > -1) {
                boardRigth = titleLine.indexOf(" " + columnB + " ") + columnB.length() + 1;
            } else if (titleLine.indexOf(" " + columnB) > -1) {
                boardRigth = titleLine.indexOf(" " + columnB) + columnB.length() + 1;
            } else {
                boardRigth = titleLine.indexOf(columnB) + columnB.length();
            }

            Integer verticalLine = null;
            if ("LEFT".equals(aligns[i]) && "RIGHT".equals(aligns[i + 1])) {
                Pattern p = Pattern.compile("[^  \r\r\n]+");
                verticalLine = boardLeft + columnA.length();

                for (String line : lines) {
                    String frag = line.substring(boardLeft, boardRigth);
                    Matcher matcher = p.matcher(frag);
                    matcher.find();
                    String group = matcher.group();
                    if (boardLeft + group.length() > verticalLine) {
                        verticalLine = boardLeft + group.length();
                    }
                }
            } else if ("LEFT".equals(aligns[i]) && "LEFT".equals(aligns[i + 1])) {
                verticalLine = boardRigth - columnB.length();
            } else if ("RIGHT".equals(aligns[i]) && "RIGHT".equals(aligns[i + 1])) {
                verticalLine = boardLeft + columnA.length();
            } else if ("RIGHT".equals(aligns[i]) && "LEFT".equals(aligns[i + 1])) {
                verticalLine = boardLeft + columnA.length();
            }
            verticalLineList.add(verticalLine);
        }

        List<Map<String, String>> table = new ArrayList<>();
        for (String line : lines) {
            Map<String, String> item = new LinkedHashMap<>();
            int size = verticalLineList.size();
            for (int i = 0; i < size; i++) {
                Integer right = verticalLineList.get(i);
                Integer left = 0;
                if (i > 0) {
                    left = verticalLineList.get(i - 1);
                }
                item.put(columns[i], line.substring(left, right).trim());
            }
            item.put(columns[size], line.substring(verticalLineList.get(size - 1)));
            table.add(item);
        }

        return table;
    }
    
    /**
     * 将文本转为行列表 
     * @param text
     * @return
     * @throws IOException
     */
    public static List<String> toLines(String text) throws IOException{
        List<String> lines = new ArrayList<String>();
        BufferedReader br = new BufferedReader(new StringReader(text));
        String l;
        while((l=br.readLine()) != null) {
            lines.add(l);
        }
        return lines;
    }
}

 

示例:

java log

[qishi@xs-srv-dev-01 ~]$ java log
NAME                              STATUS   AGE
apollo                            Active   90d
apollo-block                      Active   9d
default                           Active   108d
dev-xxxxx                         Active   108d
dev-qishi-12328                   Active   90d
fat-xxxxx                         Active   108d
fat-xxxxx-12328                   Active   90d
kube-node-lease                   Active   108d
kube-public                       Active   108d
kube-system                       Active   108d
kubekey-system                    Active   108d
kubesphere-controls-system        Active   108d
kubesphere-monitoring-federated   Active   108d
kubesphere-monitoring-system      Active   108d
kubesphere-system                 Active   108d
uat-xxxxx                         Active   108d

 

java log apollo

NAME                                                      READY   STATUS    RESTARTS   AGE
apollo-portal-5f75d7c7f5-qckqr                            1/1     Running   0          31d
apollo-service-fat-apollo-adminservice-6f4f98d688-vzbhx   1/1     Running   0          31d
apollo-service-fat-apollo-configservice-6fc8d478d-ngg9r   1/1     Running   0          31d

 

java log apollo portal

NAME                                                      READY   STATUS    RESTARTS   AGE
apollo-portal-5f75d7c7f5-qckqr                            1/1     Running   0          31d
apollo-service-fat-apollo-adminservice-6f4f98d688-vzbhx   1/1     Running   0          31d
apollo-service-fat-apollo-configservice-6fc8d478d-ngg9r   1/1     Running   0          31d

kubectl -n apollo logs -f apollo-portal-5f75d7c7f5-qckqr --since=10m

 

标签:kube,java,log,length,Active,new,apollo,String
From: https://www.cnblogs.com/zno2/p/16966290.html

相关文章

  • JAVA系列之JVM内存调优
    文章目录一、前提二、JVM内存结构1、栈内存2、堆内存3、永久代(元空间)三、JVM常用参数1、堆大小设置2、垃圾回收器选择2.1吞吐量优先的并行收集器2.2响应时间优先的并发收集器3、其他辅助配置四、内存溢出排查1、元空间溢出(java.lang.OutOfMemoryError:Metaspace)2、栈深度不够(ja......
  • JAVA系列之类加载机制详解
    文章目录一、类加载过程二、类生命周期1、加载2、验证3、准备4、解析5、初始化三、双亲委派机制四、自定义类加载器的应用1、源代码加密2、隔离加载类3、热加载/热部署4、扩展加载源类的加载机制?双亲委派机制?什么是类加载器?自定义类加载器有哪些应用场景?通常,在关于Java的......
  • JAVA系列之内存模型(JMM)
    文章目录一、简介二、硬件内存模型1、高速缓存和缓存一致性2、CPU三级缓存3、缓存一致性4、Java线程与CPU5、指令重排序三、Java内存模型1、Java内存模型概念2、Java内存模型与硬件内存模型之间的关系3、Java内存模型作用4、Java内存模型的同步操作与规则5、Java内存模型三大特性5......
  • java 同一个对象之间赋值后添加入List中,属性值相互覆盖的问题解决方案
    1、for循环中NEW对象,因为List中存的是对象的引用地址。2、BeanUtils是属于spring框架下beans包下的工具类BeanUtils它提供了对java反射和自省API的包装。它里面还有很多工具类,这篇文章我们介绍一下copyProperties这个方法使用情景一般当我们有两个具有很多相同属性的JavaBean......
  • java输出字符和数字
    1、用java如何输出一个字符串中的所有数字?2、使用java语言编写程序,统计从控制台输入的一行字符串中数字个数、字母...3、java中怎么将字符串中的数字取出来4、JAVA怎样快速把字符串里面的数字取出来用java如何输出一个字符串中的所有数字?数字的ascii码是48-57共10个。......
  • 《深入理解Java虚拟机》读书笔记:Java内存区域
    Java内存区域包含程序计数器、虚拟机栈、本地方法栈、Java堆、方法区五个区域。运行时数据区分类 Java内存区域 一、程序计数器程序计数器(ProgramCounterRegister)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的信号指示器。字节码解释器工作时就是通过......
  • 三个实例演示 Java Thread Dump 日志分析
    jstackDump日志文件中的线程状态dump文件里,值得关注的线程状态有:死锁,Deadlock(重点关注) 执行中,Runnable  等待资源,Waitingoncondition(重点关注) Waitingonmonitorentry(重点关注)暂停,Suspended对象等待中,Object.wait()或TIMED_WAITING阻塞,Blocked(重点关注)......
  • nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)
    nginx模块ngx_http_log_request_speed可以用来找出网站哪些请求很慢,针对站点很多,文件以及请求很多想找出哪些请求比较慢的话,这个插件非常有效.作者的初衷是写给自己用的,用来找出站点中处理时间较长的请求,这些请求是造成服务器高负载的很大根源.日志记录之后,在使用perl脚本分析......
  • java爱心代码,脱单必备
    packagecom.example.test;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.Toolkit;importjava.util.jar.JarOutputStream;importjavax.swing.JFrame;classCardioidextendsJFrame{//定义窗口大小privatestat......
  • JavaScript基础04
    函数函数定义function自定义函数名(){ 函数体代码;}//函数名命名:1.与变量名规则基本上是一样的!2.建议变量名使用名词,函数名用动词3.大小写敏感4.普通函数使用小驼峰,不要首字母大写5.首字母大写的函数一般用作自定义构造函数函数调用自定义函数名();匿名......