后台监控,及实现中遇到的问题。

后台系统监控
背景:监控系统对另外服务器的系统进行监控
方案一:
监控系统定时通过地址访问,需要监控的系统,执行相关的Linux命令,返回需要的信息
方案二:
需监控服务器,提供查询内存使用的接口。监控系统定时,调用查询接口,获取内存数据
方案三:
在需要监控的服务器,写shell脚本,将信息存到数据库,然后,监控系统,读取数据库里的数据

经过考虑,方案一,方案二都是不可行的。
方案一:通过地址访问需要被监控系统所在的服务器。因为服务器和服务器之间,不能
通过IP访问,只能通过域名访问,通过F5前置再随机到其中一台服务器。因此,返回的内容,也不知道
是哪台服务器传过来的。即使知道,暂时没有想到,访问完一台后,一定访问另一台的办法。
方案二:需监控服务器,提供查询内存使用的接口,也是不可行的。一旦系统挂掉,就没办法监控
并且耦合性太强
方案三:
最后是通过方案三实现的。
记录一下,在这个过程中遇到的坑。
    1.如何通过Linux命令,获取jvm内存信息
    2.写shell脚本,获取jvm内存信息
    3.通过shell脚本,将信息存到数据库
    4.定时执行shell脚本
    5.后台代码,读取数据库。
    6.将信息传到前台
    7.前台用echart展示

1.如何通过Linux命令,获取jvm内存信息
    通过jps查看java进程的ID
    然后通过jmap -histo pid,就可以查看到java内存中的已用内存,对象个数。
    也可以通过losf -i:端口号,查看java进程的pid。
遇到的问题:
    web管理台所在服务器,通过jps看不到在运行的java进程。而通过losf -i,可以
    看到进程号,通过jmap,可以看到jvm相关使用情况
    
2.写shell脚本,获取jvm内存信息    
    了解到相关命令后,开始写shell脚本,之前没有接触过shell脚本,从头开始系统学,太慢了。我是直接看别人写好的脚本。有什么不懂的,再
去查相关资料
遇到的问题:
    如何在``中,传入参数
    heap=$(jmap -heap ${pid})

    #如何把值取出来,再用awk取一次值
    a="hello world"
    b=$(echo $a | awk '{print $2}')
因为,不知道语法,这两个问题绕了我很久。

https://blog.youkuaiyun.com/stpeace/article/details/78342465
https://www.linuxidc.com/Linux/2018-09/154438.htm

3.通过shell脚本,定时将信息存到数据库
    获取到jvm的值之后,将值插入到数据库。
    因为用的是oracle数据库,Linux服务器上必须先装sqlplus软件,配置环境变量。
    我装了这三个软件,貌似中间devel这个软件不用装。
    oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm 
    oracle-instantclient18.3-devel-18.3.0.0.0-1.x86_64.rpm 
    oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.x86_64.rpm   
遇到的问题:
    1.我用非root用户,装软件。因为需要更新系统软件包数据库 (berkerly db)
    这个库,只有root可以写,所有在装软件,这一步,必须要用root权限。
    2.在shell脚本中,必须通过export。加上相关的环境变量,虽然直接执行shell
    脚本不会报错,但是使用linux的corntab定时执行时,不能识别其中的命令。
    
    
https://jingyan.baidu.com/article/9f63fb9168b8e0c8400f0ed7.html
https://blog.youkuaiyun.com/chengyuqiang/article/details/80406159

4.定时执行shell脚本
    写好脚本之后,sh myshll.sh.成功将数据插入到了数据库。开始使用Linux
的corntab 定时执行shell脚本
    corntab -l :查看正在执行的shell脚本
    corntab -e :编辑shell脚本
    servie crond restart :重新启动
    service crond start: 启动
    service crond stop: 停止
遇到的问题:
    1.刚开始不知道,shell脚本上要加环境变量。也没见他报错。
    不知道哪里出了问题。就一直提示我
    you have newmail in /var/spool/mail/(用户名)
    然后,我就就去这个文件夹下面看。也没看到什么东西。服务器一直提示我
    这个文档里,有新东西。但是,我进去也看不到任何相关信息。都是以前的。
    我看到他的大小,一直没变。应该是文档满了。就用echo "" > 文档名。
    果然看到了新内容
    设定mail里文档固定大小的原因:可能是,如果不设定的话,定时器,总有一天
    会把服务器撑满
    
5.后台代码,读取数据库。
    后台代码读取,数据库,就简单了。在存数据库时,查询最新一条数据
    select * from(select * from table order by createdate) where rownum =1
遇到的问题:
    rownum和rowid的区别
    rowid和rownum都是虚列,但含义完全不同。rowid是物理地址,用于定位oracle中具体数据的物理存储位置,而rownum则是sql的输出结果排序。通俗的讲:rowid是相对不变的,rownum会变化,尤其是使用order by的时候。
    rowid 用于定位数据表中某条数据的位置,是唯一的、也不会改变
    rownum 表示查询某条记录在整个结果集中的位置, 同一条记录查询条件不同对应的 rownum 是不同的而 rowid 是不会变的
    
    https://blog.youkuaiyun.com/yzxz/article/details/4547495
    https://www.cnblogs.com/szlbm/p/5806070.html
    
6.将信息传到前台
    没啥好说的。最重要的是,注意传到前台的json格式。

7.前台echart展示
    var mychart = echarts.init(document.getElementsById(""));
    var myOptions = {
        //echart 组件元素
    }
    mychart.setOption(myOptions);
    
    var options = mychart.getOptions();
    $.ajax({
        type: ,
        async: ,
        url: ${pageContext.request.contextPath},
        data:,
        success:function(result){
            //动态赋值
            options.series[0].data = result.key
            mycahrt.setOption(options);
        
        }
        
    });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值