直接读取/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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66551.html
阅读 1177·2023-04-26 02:20
阅读 3279·2021-11-22 14:45
阅读 4071·2021-11-17 09:33
阅读 946·2021-09-06 15:00
阅读 1447·2021-09-03 10:30
阅读 3802·2021-07-26 22:01
阅读 959·2019-08-30 15:54
阅读 488·2019-08-30 15:43