diff --git a/src/mongo/db/ftdc/ftdc_system_stats_linux.cpp b/src/mongo/db/ftdc/ftdc_system_stats_linux.cpp
index 316afde..bd3da31 100644
--- a/src/mongo/db/ftdc/ftdc_system_stats_linux.cpp
+++ b/src/mongo/db/ftdc/ftdc_system_stats_linux.cpp
@@ -99,6 +99,14 @@ public:
             subObjBuilder.doneFast();
         }
 
+        {
+            BSONObjBuilder subObjBuilder(builder.subobjStart("network"_sd));
+            processStatusErrors(
+                procparser::parseProcNetstatFile("/proc/net/netstat"_sd, &subObjBuilder),
+                &subObjBuilder);
+            subObjBuilder.doneFast();
+        }
+
         // Skip the disks section if we could not find any disks.
         // This can happen when we do not have permission to /sys/block for instance.
         if (!_disksStringData.empty()) {
diff --git a/src/mongo/util/procparser.cpp b/src/mongo/util/procparser.cpp
index 36f2ae0..cb6a055 100644
--- a/src/mongo/util/procparser.cpp
+++ b/src/mongo/util/procparser.cpp
@@ -406,6 +406,85 @@ Status parseProcMemInfoFile(StringData filename,
     return parseProcMemInfo(keys, swString.getValue(), builder);
 }
 
+//
+// Here is an example of the type of string it supports (long lines elided for clarity).
+// > cat /proc/net/netstat
+// TcpExt: SyncookiesSent SyncookiesRecv SyncookiesFailed ...
+// TcpExt: 3437 5938 13368 ...
+// IpExt: InNoRoutes InTruncatedPkts InMcastPkts ...
+// IpExt: 999 1 4819969 ...
+//
+// Parser assumes file consists of alternating lines of keys and values
+// key and value lines consist of space-separated tokens
+// first token is a key prefix that is prepended in the output to each key    
+// all prefixed keys and corresponding values are copied to output as-is
+//
+    
+Status parseProcNetstat(StringData data, BSONObjBuilder* builder) {
+
+    using string_split_iterator = boost::split_iterator<StringData::const_iterator>;
+
+    // Split the file by lines.
+    int lineNum = 0;
+    string_split_iterator keysIt;
+    for (string_split_iterator lineIt = string_split_iterator(
+             data.begin(),
+             data.end(),
+             boost::token_finder([](char c) { return c == '\n'; }, boost::token_compress_on));
+         lineIt != string_split_iterator();
+         ++lineIt, ++lineNum
+    ) {
+        if (lineNum % 2 == 0) {
+            // even numbered lines are keys
+            keysIt = string_split_iterator(
+               (*lineIt).begin(),
+               (*lineIt).end(),
+               boost::token_finder([](char c) { return c == ' '; }, boost::token_compress_on)
+            );
+        } else {
+
+            // odd numbered lines are values
+            string_split_iterator valuesIt = string_split_iterator(
+               (*lineIt).begin(),
+               (*lineIt).end(),
+               boost::token_finder([](char c) { return c == ' '; }, boost::token_compress_on)
+            );
+
+            StringData prefix;
+            for (int keyNum = 0;
+                 keysIt != string_split_iterator() && valuesIt != string_split_iterator();
+                 ++keysIt, ++valuesIt, ++keyNum
+            ) {
+                if (keyNum == 0) {
+                    prefix = StringData((*keysIt).begin(), (*keysIt).end());
+                } else {
+                    StringData key((*keysIt).begin(), (*keysIt).end());
+                    StringData stringValue((*valuesIt).begin(), (*valuesIt).end());
+                    uint64_t value;
+                    if (!parseNumberFromString(stringValue, &value).isOK())
+                        value = 0;
+                    builder->appendNumber(prefix.toString() + key.toString(), value);
+                }
+            }
+        }
+    }
+    return Status::OK();
+}
+
+Status parseProcNetstatFile(StringData filename,
+                                BSONObjBuilder* builder) {
+    auto swString = readFileAsString(filename);
+    if (!swString.isOK()) {
+        return swString.getStatus();
+    }
+
+    return parseProcNetstat(swString.getValue(), builder);
+}
+
+
+
+
+
 // Here is an example of the type of string it supports:
 //
 // For more information, see:
diff --git a/src/mongo/util/procparser.h b/src/mongo/util/procparser.h
index 2f9e97e..735cefb 100644
--- a/src/mongo/util/procparser.h
+++ b/src/mongo/util/procparser.h
@@ -88,6 +88,22 @@ Status parseProcMemInfoFile(StringData filename,
                             BSONObjBuilder* builder);
 
 /**
+ * Read a string matching /proc/net/netstat format, and write the keys
+ * found in that string into builder.
+ *
+ * data - string to parse
+ * builder - BSON output
+ */
+Status parseProcNetstat(StringData data,
+                        BSONObjBuilder* builder);
+
+/**
+ * Read from file, and write the keys found in that file into builder.
+ */
+Status parseProcNetstatFile(StringData filename,
+                            BSONObjBuilder* builder);
+
+/**
  * Read a string matching /proc/diskstats format, and write the specified list of disks in builder.
  *
  * disks - vector of block devices to include in output. For each disk selected, 11 fields are
