zoukankan      html  css  js  c++  java
  • java监控Linux磁盘空间的使用情况

    最近有个需求,监控服务器磁盘使用情况。起因是因为站点日志写满了硬盘,导致服务宕机。需要在某个临界点发送通知给管理员,及时处理异常。

    其实原理很简单,就是使用java执行Linux执行,然后解析显示结果。

    依赖

     1 <dependency>
     2     <groupId>org.apache.commons</groupId>
     3     <artifactId>commons-io</artifactId>
     4     <version>1.3.2</version>
     5 </dependency>
     6 <dependency>
     7     <groupId>com.alibaba</groupId>
     8     <artifactId>fastjson</artifactId>
     9     <version>1.2.56</version>
    10 </dependency>

    简单实现

    package com.test.practice;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.commons.io.IOUtils;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    public class DeskMonitor {
    
        public static void main(String[] args) {
            try {
                String deskMonitorConfig = "{deskList:[{name:"/dev/vda1", useRate:40}]}";
                JSONObject deskMonitorObj = JSON.parseObject(deskMonitorConfig);
                JSONArray deskArray = deskMonitorObj.getJSONArray("deskList");
                Runtime rt = Runtime.getRuntime();
                Process p = rt.exec("df -hl");// df -hl 查看硬盘空间
                List<String> result = IOUtils.readLines(p.getInputStream(), "GBK");
                for (String line: result) {
                    for (int i = 0; i < deskArray.size(); i++) {
                        JSONObject deskObj = deskArray.getObject(i, JSONObject.class);
                        String deskName = deskObj.getString("name");
                        double deskUseRate = deskObj.getDoubleValue("useRate");
                        if (line.contains(deskName)) {
                            System.out.println(line);
                            String[] items = line.split("%")[0].split(" ");
                            int lastIndex = items.length - 1;
                            double useRateLocal = Double.parseDouble(items[lastIndex].trim());
                            if (useRateLocal >= deskUseRate) {
                                // 报警
                                System.out.println("===>>>"+"磁盘名称:"+deskName+"磁盘使用率:"+useRateLocal);
                            }
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }

    以上基本能满足自动监控需求。可将上面代码放入定时任务每分钟检查。报警部分改为发邮件或其他方式提醒。

    服务器结果

    发送的是语音短信,怕其他方式不够及时。

    尚礼 求知 勤奋 谦逊 正直 公平
  • 相关阅读:
    ubuntu12.04 死机 卡屏 画面冻结解决方案
    Install Firefox 20 in Ubuntu 13.04, Ubuntu 12.10, Ubuntu 12.04, Linux Mint 14 and Linux Mint 13 by PPA
    ListView1.SelectedItems.Clear()
    android studio 下载地址
    jquery.slider.js jquery幻灯片测试
    jquery.hovermenu.js
    jquery.tab.js选项卡效果
    适配 placeholder,jquery版
    jquery.autoscroll.js jquery自动滚动效果
    将 Google Earth 地图集成到自己的窗体上的 简单控件
  • 原文地址:https://www.cnblogs.com/woodafeng/p/10370333.html
Copyright © 2011-2022 走看看