A metric is any type of numerical variable used to gauge some quantifiable measure of performance of a type of object (server, application, business, sensor, etc.) that can be monitored. Examples of metrics: requests/sec. serviced by an application, CPU load, stock price, temperature, number of website visits.
A metric can have more than one data stream aka metric stream associated with it. For example if you are tracking CPU from 100 servers, the CPU metric would have 100 data streams associated with it, one for each server.
To keep things simple, we track metrics as gauges. You can count with gauges as well. Read Count Events to learn more.
Tags can be thought of as members in a population that you are capturing the metric for. Think of it as a multiple identifying dimensions we support in addition to ‘name’ for a metric.
For example the number of requests/second serviced by an application (metric) could be broken up amongst a group of server instances in a scale-out tier (source) by setting the @host as the tag in the measurement properties.
@host is probably the most common use-case but we make no assumption about tags except that they distinguishes multiple homogeneous "things" that all have the same metric, so instead of "@host" you could use things like
sensor_id if you wanted.
Tags have two primary functions: to filter and to group. Think of grouping as "aggregating to each tag value"; for example, if you group on the
instance_id tag for all your EC2 servers, your chart will show you one line per instance_id type aggregating across all your EC2 instances.