diff --git a/plugins/inputs/system/NET_README.md b/plugins/inputs/system/NET_README.md
index de9e7d7a7aea4f484748238a9f84809cad5b2d28..771cabb480352d70ef047ec823a1b4f3cc348ab5 100644
--- a/plugins/inputs/system/NET_README.md
+++ b/plugins/inputs/system/NET_README.md
@@ -9,9 +9,11 @@ This plugin gathers metrics about network interface and protocol usage (Linux on
 [[inputs.net]]
   ## By default, telegraf gathers stats from any up interface (excluding loopback)
   ## Setting interfaces will tell it to gather these explicit interfaces,
-  ## regardless of status.
+  ## regardless of status. When specifying an interface, glob-style
+  ## patterns are also supported.
+  ##
+  # interfaces = ["eth*", "enp0s[0-1]", "lo"]
   ##
-  # interfaces = ["eth0"]
 ```
 
 ### Measurements & Fields:
diff --git a/plugins/inputs/system/net.go b/plugins/inputs/system/net.go
index f47a2cc6c891c59dbf17007b71af542e617022b2..cfb712dfb47b3b309948c2c8d90f5155e9790a95 100644
--- a/plugins/inputs/system/net.go
+++ b/plugins/inputs/system/net.go
@@ -6,11 +6,13 @@ import (
 	"strings"
 
 	"github.com/influxdata/telegraf"
+	"github.com/influxdata/telegraf/filter"
 	"github.com/influxdata/telegraf/plugins/inputs"
 )
 
 type NetIOStats struct {
-	ps PS
+	filter filter.Filter
+	ps     PS
 
 	skipChecks bool
 	Interfaces []string
@@ -38,15 +40,18 @@ func (s *NetIOStats) Gather(acc telegraf.Accumulator) error {
 		return fmt.Errorf("error getting net io info: %s", err)
 	}
 
+	if s.filter == nil {
+		if s.filter, err = filter.Compile(s.Interfaces); err != nil {
+			return fmt.Errorf("error compiling filter: %s", err)
+		}
+	}
+
 	for _, io := range netio {
 		if len(s.Interfaces) != 0 {
 			var found bool
 
-			for _, name := range s.Interfaces {
-				if name == io.Name {
-					found = true
-					break
-				}
+			if s.filter.Match(io.Name) {
+				found = true
 			}
 
 			if !found {