直接讀取/proc/net/dev
public class NetStatReader implements MetricsReader { private static File netstat = new File("/proc/net/dev"); private static final Pattern dline = //rx //tx // device_name -bytes packets errs drops fifo frame com mult -bytes packets errs drops fifo frame com mult Pattern.compile("^ *([A-Za-z]+[0-9]*):D*(d+)D+(d+)D+(d+)D+(d+)D+d+D+d+D+d+D+d+D+(d+)D+(d+)D+(d+)D+(d+)D+d+D+d+D+d+D+d+.*"); private static final Logger LOG = Logger.getLogger(NetStatReader.class.getName()); @Inject private Configuration conf; private String device_regexp = "eth0"; /** * It creates a wrapper to obtain statistics about a network interface by * reading information from /proc/net/dev * * @param interfaceRegexp a string with a regexp to match with the device to * control (e.g. "sd[ab]") * * */ public NetStatReader(String interfaceRegexp) { LOG.log(Level.INFO, "Sampling interfaces {0}", interfaceRegexp); this.device_regexp = interfaceRegexp; checkArgument(netstat.exists(), "/proc/diskstats does not exists"); checkArgument(netstat.canRead(), "/proc/diskstats can not be read"); } /** * * * * @param interfaceRegexp * @param processPid to bind the statistics to only one process * @deprecated it seems to give the same results when looking for a process * instead of the whole system */ @Deprecated public NetStatReader(String interfaceRegexp, Integer processPid) { LOG.log(Level.INFO, "Sampling interfaces {0} for process {1}", new Object[]{interfaceRegexp, processPid}); this.device_regexp = interfaceRegexp; netstat = new File("proc/" + processPid + "/net/dev"); checkArgument(netstat.exists(), "/proc/diskstats does not exists"); checkArgument(netstat.canRead(), "/proc/diskstats can not be read"); } public NetStatReader() { // checkArgument(diskstats.exists(), "/proc/diskstats does not exists"); // checkArgument(diskstats.canRead(), "/proc/diskstats can not be read"); } @Override public Listdoccall() throws Exception { Builder b = ImmutableList.builder(); LineReader lr = new LineReader(new FileReader(netstat)); String l; while ((l = lr.readLine()) != null) { Matcher m = dline.matcher(l); if (!m.matches()) { continue; } String iface = m.group(1); if (iface.matches(device_regexp)) { b.addAll(Metric.Metric(iface) .addMetric("rx.bytes", Long.parseLong(m.group(2))) .addMetric("rx.packets", Long.parseLong(m.group(3))) .addMetric("rx.errs", Long.parseLong(m.group(4))) .addMetric("rx.drop", Long.parseLong(m.group(5))) .addMetric("tx.bytes", Long.parseLong(m.group(6))) .addMetric("tx.packets", Long.parseLong(m.group(7))) .addMetric("tx.errs", Long.parseLong(m.group(8))) .addMetric("tx.drop", Long.parseLong(m.group(9))).getList()); } } return b.build(); } @Override public void configure() { if (conf.containsKey("netstat-reader.interfaceregexp")) { this.device_regexp = conf.getString("netstat-reader.interfaceregexp"); checkArgument(netstat.exists(), "/proc/diskstats does not exists"); checkArgument(netstat.canRead(), "/proc/diskstats can not be read"); } } @Override public void setConf(Configuration c) { conf = c; } @Override public Configuration getConf() { return conf; } }
NetStatReader
LinuxNetStatJMXWrapper
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/66551.html
閱讀 1211·2023-04-26 02:20
閱讀 3337·2021-11-22 14:45
閱讀 4111·2021-11-17 09:33
閱讀 972·2021-09-06 15:00
閱讀 1479·2021-09-03 10:30
閱讀 3837·2021-07-26 22:01
閱讀 990·2019-08-30 15:54
閱讀 531·2019-08-30 15:43