RFC 1857
A Model for Common Operational Statistics
RFC 1857: A Model for Common Operational Statistics ๐โจ
Okay bestie, first the paperwork ๐ This one is from October 1995 and was written by M. Lambert at the Pittsburgh Supercomputing Center. It's Informational, which means it's sharing info with the Internet community and is not a standard ๐ It obsoletes RFC 1404 (Bernhard Stockman's original, which we'll get to in the acknowledgements).
Status of this Memo ๐ธ
This memo provides information for the Internet community. It does not specify an Internet standard of any kind, and distribution of it is unlimited ๐
Abstract ๐ฆ
This memo describes a model for operational statistics on the Internet. It gives recommendations for metrics, measurements, polling periods and presentation formats, and it defines a format for exchanging operational statistics ๐
Acknowledgements ๐ซถ
The author thanks the members of the IETF Operational Statistics Working Group, whose efforts made this memo possible. Shoutout especially to Bernhard Stockman, author of RFC 1404, and Nevil Brownlee, who produced the revised BNF description of the model ๐ Wherever possible, their text was changed as little as feasible, because they did the hard work and we respect that ๐
Table of Contents ๐
1. Introduction ............................................. 2
2. The Model ................................................ 5
2.1 Metrics and Polling Periods .............................. 5
2.2 Format for Storing Collected Data ........................ 6
2.3 Reports .................................................. 6
2.4 Security Issues .......................................... 6
3. Categorization of Metrics ................................ 7
3.1 Overview ................................................. 7
3.2 Categorization of Metrics Based on Measurement Areas ..... 7
3.2.1 Utilization Metrics ...................................... 7
3.2.2 Performance Metrics ...................................... 7
3.2.3 Availability Metrics ..................................... 8
3.2.4 Stability Metrics ........................................ 8
3.3 Categorization Based on Availability of Metrics .......... 8
3.3.1 Per Interface Variables Already in Standard MIB .......... 8
3.3.2 Per Interface Variables in Private Enterprise MIB ........ 9
3.3.3 Per interface Variables Needing High Resolution Polling .. 9
3.3.4 Per Interface Variables not in any MIB ................... 9
3.3.5 Per Node Variables ....................................... 9
3.3.6 Metrics not being Retrievable with SNMP ................. 10
3.4 Recommended Metrics ..................................... 10
4. Polling Frequencies ..................................... 10
4.1 Variables Needing High Resolution Polling ............... 11
4.2 Variables not Needing High Resolution Polling ........... 11
5. Pre-Processing of Raw Statistical Data .................. 11
5.1 Optimizing and Concentrating Data to Resources .......... 11
5.2 Aggregation of Data ..................................... 12
6. Storing of Statistical Data ............................. 12
6.1 The Storage Format ...................................... 13
6.1.1 The Label Section ....................................... 14
6.1.2 The Device Section ...................................... 15
6.1.3 The Data Section ........................................ 17
6.2 Storage Requirement Estimations ......................... 17
7. Report Formats .......................................... 18
7.1 Report Types and Contents ............................... 18
7.2 Contents of the Reports ................................. 19
7.2.1 Offered Load by Link .................................... 19
7.2.2 Offered Load by Customer ................................ 19
7.2.3 Resource Utilization Reporting .......................... 20
7.2.3.1 Utilization as Maximum Peak Behavior .................... 20
7.2.3.2 Utilization as Frequency Distribution of Peaks .......... 20
8. Considerations for Future Development ................... 20
8.1 A Client/Server Based Statistical Exchange System ....... 21
8.2 Inclusion of Variables not in the Internet Standard MIB . 21
8.3 Detailed Resource Utilization Statistics ................ 21
Appendix A Some formulas for statistical aggregation ........... 22
Appendix B An example .......................................... 24
Security Considerations ......................................... 27
Author's Address ................................................ 27
1. Introduction โจ
Lots of network administrations collect and archive network management metrics that show utilization, growth and reliability ๐ The main goals are making short-term problem isolation easier and helping with longer-term network planning inside the organization. There's also a bigger goal: cooperative problem isolation and network planning between network administrations ๐ค That bigger goal is only going to matter more as the Internet keeps growing, especially as the number of Internet service providers increases and the quality of service between providers becomes more of a concern ๐ญ
There are plenty of network management tools for collecting and presenting these metrics. The problem is that different measurement and presentation techniques make it hard to compare data across networks ๐ Also, there's no general agreement on which metrics should be collected regularly or how they should be displayed.
So we need an agreed-upon model for:
- A minimal set of common network management metrics that meets the goals above,
- Tools for collecting these metrics,
- A common interchange format so common presentation tools can use the data, and
- Common presentation formats.
Under this Operational Statistics model, collection tools collect and store data, which is retrieved later in a given format by presentation tools that display it in a predefined way. (See figure below.)
The Operational Statistics Model
(Collection of common metrics, by commonly available tools, stored in a common format, displayed in common formats by commonly available presentation tools.)
!-----------------------!
! Network !
!---+---------------+---!
/ \
/ \
/ \
--------+------ ----+---------
! New ! ! Old !
! Collection ! ! Collection !
! Tool ! ! Tool !
!---------+---! !------+-----!
\ !
\ !-------+--------!
\ ! Post-Processor !
\ !--+-------------!
\ /
\ /
\ /
!--+-------+---!
! Common !
! Statistics !
! Database !
!-+--------+---!
/ \
/ \
/ \
/ !-+-------------!
/ ! Pre-Processor !
/ !-------+-------!
!-----------+--! !
! New ! !-------+-------!
! Presentation ! ! Old !
! Tool ! ! Presentation !
!---------+----! ! Tool !
\ !--+------------!
\ /
\ /
!-+---------------+-!
! Graphical Output !
! (e.g., to paper !
! or X Window) !
!-------------------!
This memo gives an overview of the model for common operational statistics. The model covers gathering, storing and presenting network operational statistics, and it classifies the types of information that should be available at each network operation center (NOC) that conforms to it ๐ง
The model defines a minimal set of metrics and talks about how they should be gathered and stored. It also gives recommendations for the content and layout of statistical reports, which make it easy to compare network statistics among NOCs ๐
The main purpose of the model is to define mechanisms that let NOCs share their operational statistics as effectively as possible ๐ One intent is to specify a baseline capability that conforming NOCs may support with minimal development effort and minimal ongoing effort.
2. The Model ๐
The model is built on three areas of interest:
- The definition of a minimal set of metrics to be gathered,
- The definition of a format for storing collected statistical data, and
- The definition of methods and formats for generating reports.
The model says old tools already in use could be retrofitted into the new paradigm by providing conversion filters between old and new tools. In that sense, the model advocates developing freely redistributable software for participating NOCs ๐
One basic idea is that statistical data stored in one place could be retrieved and displayed somewhere else ๐ฆ
2.1. Metrics and Polling Periods ๐
Here the value is 0.
The intent here is to define a minimal set of metrics that could be gathered easily using standard SNMP-based network management tools. So these metrics should be available as variables in the Internet Standard MIB ๐
If the Internet Standard MIB changed, this minimal set should be reconsidered, since there are lots of metrics people consider important that aren't currently defined in the standard MIB ๐ Some metrics that are highly desirable to collect probably can't be retrieved using SNMP. So if those metrics are going to be considered, tools and methods for gathering them should be defined explicitly. That's outside the scope of this memo, though โจ
2.2. Format for Storing Collected Data ๐
A format for storing data is defined. The goal is to minimize redundant information by using a single header structure that holds all the information relevant to a given set of statistical data. That header section says when and where the corresponding statistical data was collected ๐
2.3. Reports ๐
okay so, the RFC suggests some basic classes of reports that look at network behavior from different angles ๐ Reports of total octets and packets over some time period are seen as essential for getting the big-picture vibe of traffic flow in a network. Splitting things up by applications and protocols is also needed, because it tells you which type of traffic is dominant ๐ Reports on resource utilization are recommended too, bestie ๐ซถ
The time period a report covers can change depending on what it's for. In engineering and operations, daily or weekly reports may be sufficient, but for capacity planning you may need longer-term reports ๐ฆ
2.4. Security Issues ๐
ngl this part is a little serious. There are legal, ethical and political concerns about sharing data ๐ฌ People, especially Network Service Providers, are worried about showing data that could make one of their networks look bad ๐
So there's a need to insure integrity, conformity and confidentiality of the shared data ๐ To be useful, the same data should be collected from all involved sites, and it should be collected at the same interval โญ
3. Categorization of Metrics ๐
3.1. Overview โจ
This section sorts metrics by scope and by how easy they are to retrieve ๐ง It gives a recommended minimal set of metrics, plus some hints on metrics that could be added in the future when they're available in the network management environment. Last but not least, it shares some thoughts on storage requirements ๐
3.2. Categorization of Metrics Based on Measurement Areas ๐
The metrics used to evaluate network traffic could be classified into (at least) four major categories:
- Utilization metrics
- Performance metrics
- Availability metrics
- Stability metrics
3.2.1. Utilization Metrics โก
This category describes different aspects of the total traffic being forwarded through the network. Possible metrics include:
- Total input and output packets and octets
- Various peak metrics
- Per protocol and per application metrics
3.2.2. Performance Metrics ๐
These metrics relate to quality of service issues, like delays and congestion situations ๐ค Possible metrics include:
- RTT metrics on different protocol layers
- Number of collisions on a bus network
- Number of ICMP Source Quench messages
- Number of packets dropped
3.2.3. Availability Metrics ๐ธ
These metrics could be viewed as gauging long-term accessibility on different protocol layers ๐ซง Possible metrics include:
- Line availability as percentage uptime
- Route availability
- Application availability
3.2.4. Stability Metrics ๐ข
These metrics describe short-term fluctuations in the network that degrade the service level ๐ Changes in traffic patterns could also be recognized using these metrics. Possible metrics include:
- Number of fast line status transitions
- Number of fast route changes (also known as route flapping)
- Number of routes per interface in the tables
- Next hop count stability
- Short term ICMP behavior
3.3. Categorization Based on Availability of Metrics ๐
To be able to retrieve metrics, the corresponding variables must be accessible at every network object that is part of the management domain the statistics are being collected for ๐
Some metrics are easy to retrieve because they're defined as variables in the Internet Standard MIB ๐ฐ Others may be retrievable because they're part of some vendor's private enterprise MIB subtree ๐คทโโ๏ธ Finally, some metrics are considered irretrievable, either because they can't be included in the SNMP concept, or because measuring them would need extensive polling (loading the network with management traffic) ๐ญ
The metrics categorized below could each be judged as important for evaluating network behavior ๐ This list may serve as a basis for revisiting the decisions on which metrics are reasonable and desirable to collect. If the availability of the metrics listed below changes, those decisions may change too ๐ฆ
3.3.1. Per Interface Variables Already in Internet Standard MIB (thus easy to retrieve) ๐ฌ
ifInUcastPkts (unicast packets in)
ifOutUcastPkts (unicast packets out)
ifInNUcastPkts (non-unicast packets in
ifOutNUcastPkts (non-unicast packets out)
ifInOctets (octets in)
ifOutOctets (octets out)
ifOperStatus (line status)
3.3.2. Per Interface Variables in Internet Private Enterprise MIB (thus could sometimes be retrievable) ๐
discarded packets in
discarded packets out
congestion events in
congestion events out
aggregate errors
interface resets
3.3.3. Per Interface Variables Needing High Resolution Polling (which is hard due to resulting network load) ๐ฅต
interface queue length
seconds missing stats
interface unavailable
route changes
interface next hop count
3.3.4. Per Interface Variables not in any Known MIB (thus impossible to retrieve using SNMP but possible to include in a MIB) ๐ซ
link layer packets in
link layer packets out
link layer octets in
link layer octets out
packet interarrival times
packet size distribution
3.3.5. Per Node Variables (not categorized here) ๐ฅ๏ธ
per-protocol packets in
per-protocol packets out
per-protocol octets in
per-protocol octets out
packets discarded in
packets discarded out
packet size distribution
system uptime
poll delta time
reboot count
3.3.6. Metrics not Retrievable with SNMP ๐
delays (RTTs) on different protocol layers
application layer availabilities
peak behavior metrics
3.4. Recommended Metrics ๐
A large number of metrics could be considered for collection when doing network statistics ๐ To help the group reach general consensus on this model, there's a need to define a minimal set of metrics that are both essential and retrievable on most of today's network objects. General retrievability is equated with presence in the Internet Standard MIB ๐ซถ
The following metrics from the Internet Standard MIB were chosen as being desirable and reasonable:
For each interface:
ifInOctets (octets in)
ifOutOctets (octets out)
ifInUcastPkts (unicast packets in)
ifOutUcastPkts (unicast packets out)
ifInNUcastPkts (non-unicast packets in)
ifOutNUcastPkts (non-unicast packets out)
ifInDiscards (in discards)
ifOutDiscards (out discards)
ifOperStatus (line status)
For each node:
ipForwDatagrams (IP forwards)
ipInDiscards (IP in discards)
sysUpTime (system uptime)
4. Polling Frequencies โฐ
The point of polling at specified intervals is to gather statistics that serve as a basis for trend and capacity planning ๐ From the operational data, it should be possible to derive engineering and management data. It should be noted that all polling and retention values given below are recommendations and are not mandatory ๐ท
4.1. Variables Needing High Resolution Polling ๐
To be able to detect peak behavior, it is recommended that a period of 1 minute (60 seconds) at a maximum be used when gathering traffic data ๐โโ๏ธ The metrics to be collected at this frequency are:
for each interface
ifInOctets (octets in)
ifOutOctets (octets out)
ifInUcastPkts (unicast packets in)
ifOutUcastPkts (unicast packets out)
If it's not possible to gather data at this high polling frequency, it is recommended that an exact multiple of 60 seconds be used. The initial polling frequency value will be part of the stored statistical data, as described in section 6.1.2 below ๐งพ
4.2. Variables not Needing High Resolution Polling ๐ข
The rest of the recommended variables to be gathered, i.e.,
For each interface:
ifInNUcastPkts (non-unicast packets in)
ifOutNUcastPkts (non-unicast packets out)
ifInDiscards (in discards)
ifOutDiscards (out discards)
ifOperStatus (line status)
and for each node:
ipForwDatagrams (IP forwards)
ipInDiscards (IP in discards)
sysUpTime (system uptime)
could be collected at a lower polling rate. No polling rate is specified, but it is recommended that the period chosen be an exact multiple of 60 seconds ๐
5. Pre-Processing of Raw Statistical Data ๐งน
5.1. Optimizing and Concentrating Data to Resources ๐ฏ
To avoid storing redundant data in what might be a shared file system, it is desirable to preprocess the raw data ๐๏ธ For example, if a link is down, there's no need to keep storing a counter that isn't changing ๐ The use of the variables sysUpTime and ifOperStatus makes it possible to avoid continuously storing data collected from links and nodes where no traffic has been transmitted for some period of time โจ
Another part of processing is decoupling the data from the raw interface being polled. The goal is to convert that data into the resource of interest, like the traffic on a given link ๐ Changes of interface in a gateway for a given link should not be visible in the resulting data ๐ซฅ
5.2. Aggregation of Data ๐งฎ
At many sites, the volume of data generated by a polling period of 1 minute will make aggregation of the stored data desirable, if not necessary ๐ฆ
Aggregation here means replacing data values over a number of time intervals with some function of the values over the union of the intervals ๐ซ Either raw data or shorter-term aggregates may be aggregated. Note that aggregation reduces the amount of data, but it also reduces the available information โ๏ธ
In this model, the function used for aggregation is either the arithmetic mean or the maximum, depending on whether you want to track the average or peak value of a variable ๐
Details of the layout of the aggregated entries in the data file are given in section 6.1.3 ๐
Suggestions for aggregation periods:
Over a
24 hour period aggregate to 15 minutes,
1 month period aggregate to 1 hour,
1 year period aggregate to 1 day
6. Storing of Statistical Data ๐พ
This section describes a format for storing statistical data ๐ The goal is to make it easier to share a common set of tools for gathering, storing and analyzing statistical data. The format is designed to minimize redundant information and therefore minimize storage requirements. If a client server based model for retrieving remote statistical data were developed later, the specified storage format could be used as the transmission protocol ๐ฐ๏ธ
This model is meant to define an interchange file format, which would not necessarily be used for actual data storage. That means its goal is to provide complete, self-contained, portable files, rather than to describe a full database for storing them ๐งณ
6.1. The Storage Format ๐งฉ
All white space (including tabs, line feeds and carriage returns) within a file is ignored. In addition, all text from a # symbol to the following end of line (inclusive) is also ignored ๐ซง
stat-data ::= <stat-section> [ <FS> <stat-section> ]
Okay bestie, so a data file is basically made of three kinds of sections: device, label, and data. ๐ Here's the grammar for how they fit together โจ
stat-section ::= <device-section> | <label-section> | <data-section>
A data file has to have at least one device section and at least one label section. Every label section needs at least one data section attached to it. And a device section has to come before any data section that uses tags defined inside it ๐
A data section can live inside the file (an internal data section, which comes right after a label section) or in a different file (an external data section, which gets pointed to by an external label section). That external file can hold one and only one data section ๐ฆ
A label section gives the start and finish times for its data section(s), plus the names of the tags they contain. Label sections have a fixed order inside a file, and that order is just based on where they sit in the file. Every internal data section tied to the first label section has to come before the ones tied to the second label section, and so on, no skipping around ๐
Here are some valid data files, bestie ๐ธ
<label-s> <device-s> <data-s> <data-s>
<label-s> <device-s> <data-s> <device-s> <data-s> <data-s>
Both of these start with a label section that gives the times and tag-name lists for the device and data sections after it โจ
<dev-s> <label-s> <label-s> <label-s>
This one starts with a device section that defines the tags its data sections use, then has three external label sections, each pointing to its own data section. The data sections don't have to use every tag in the device section. The tag-name lists in their label sections say which ones they actually use ๐ง
<default-dev> <dev-1> <label-1> <dev-2> <label-2> ..
In this one, default-dev is a full device section with a complete tag-table, and every variable in it has an initial polling period and an aggregation period set. It doesn't have any label or data of its own. It's there purely to supply default tag-list info ๐ Dev-1, dev-2, and so on are device sections for different devices. Each has its description fields (network-name, router-name, and so on), but no tag-table. They use the tag-table from default-dev instead. And if a default-dev record is present, it has to be the very first item in the data file ๐ฅ Label-1, label-2, and so on are label sections that point to files holding the data sections for each device.
6.1.1. The Label Section ๐ท๏ธ
label-section ::= BEGIN_LABEL <FS> <data-location> <FS>
<tag-name-list> <FS>
<start-time> <FS> <stop-time> <FS> END_LABEL
data-location ::= <data-file-name> | <empty>
tag-name-list ::= <LEFT> <tag> [ <FS> <tag> ] <RIGHT>
The label section gives the start and stop times for its matching data section (or sections), along with the list of tags it uses. If there's a data location, it names the file that holds the data section. If there isn't one, the data section just follows in this same file ๐
start-time ::= <time-string>
stop-time ::= <time-string>
data-file-name ::= <ASCII-string>
time-string ::= <year><month><day><hour><minute><second>
year ::= <digit><digit><digit><digit>
month ::= 01..12
day ::= 01..31
hour ::= 00..23
minute ::= 00..59
second ::= <float>
Start and stop times are in UTC, always ๐
The seconds field tops out at 60.0, so leap seconds fit in, the same way ntp handles them. And if the time zone changes partway through a data file (say daylight savings time ended), you should record that by ending the current data section, writing a new device section with the new time zone, and starting a fresh data section. That's the move ๐
6.1.2. The Device Section ๐ฅ๏ธ
device-section ::= BEGIN_DEVICE <FS> <device-field> <FS> END_DEVICE
device-field ::= <network-name><FS><router-name><FS><link-name<FS>
<bw-value><FS><proto-type><FS><proto-addr><FS>
<time-zone> <optional-tag-table>
optional-tag-table ::= <FS> <tag-table> | <empty>
network-name ::= <ASCII-string>
router-name ::= <ASCII-string>
link-name ::= <ASCII-string>
bw-value ::= <float>
proto-type ::= IP | DECNET | X.25 | CLNS | IPX | AppleTalk
proto-addr ::= <ASCII-string>
time-zone ::= [+|-] [00..13] [00..59]
tag-table ::= <LEFT> <tag-desc> [ <FS> <tag-desc> ] <RIGHT>
tag-desc ::= <tag> <FS> <tag-class> <FS> <variable-field-list>
tag ::= <ASCII-string>
tag-class ::= total | peak
variable-field-list ::= <LEFT> <variable-field>
[ <FS> <variable-field> ] <RIGHT>
variable-field ::= <variable-name><FS><initial-polling-period>
<FS> <aggregation-period>
variable-name ::= <ASCII-string>
initial-polling-period ::= <integer>
aggregation-period ::= <integer>
The network-name is a human-readable string that says which network the logged data belongs to ๐
The router-name is an ASCII string, so you can use naming styles other than IP domain names. (Those are names for interfaces, not routers, fyi ๐ค)
The link-name is a human-readable string describing how the link where the data was gathered is connected ๐
Bandwidth (bw-value) is in bits per second and written as a floating-point number, like 1536000 or 1.536e6 ๐ซ A zero value means the actual bandwidth is unknown. One example is a Frame Relay link where the Committed Information Rate is different from the Burst Rate.
The proto-type field says which network architecture the logged interface connects to. The valid types are IP, DECNET, X.25, CLNS, IPX, and AppleTalk ๐ฆ
The network address (proto-addr) is the unique numeric address of the interface being logged. What it looks like depends on the proto-type. For Internet-connected interfaces, use dotted-quad notation ๐
The time-zone is the offset you add to the timestamp in the data section to get the local time for the logged interface. The time-zone range covers every possibility, not just the ones that land on 30-minute multiples. So yes, weird offsets are allowed ๐
The tag-table lists every variable being polled. Variable names are the fully qualified Internet MIB names. A table can hold multiple tags, but each tag can only be tied to one polling period and one aggregation period. If variables are polled or aggregated at different periods, each period needs its own tag in the table ๐ง
Since variables can be polled at different polling periods within the same logged data, you have to explicitly link a polling period to each variable. After processing, the period that's actually covered may differ from the initial polling period, and that change should be noted in the aggregation period field. Both the initial polling period and the aggregation period are given in seconds โฑ๏ธ
Original data values, and values aggregated by adding them together, get a tag-class of 'total.' Values aggregated by taking the maximum over an aggregation interval get a tag-class of 'peak.' ๐
The tag-table and variable-field-lists are wrapped in brackets so their edges are obvious. Without brackets, a parser would have trouble telling whether a name is another variable in the current tag's list or the start of the next tag in the table ๐ To make it clearer for humans, use different bracket types for each. For example, {} for the tag-table list and [] for the variable-field lists ๐
6.1.3. The Data Section ๐
data-section ::= BEGIN_DATA <FS> <data-field>
[ <FS> <data-field> ] <FS> END_DATA
data-field ::= <time-string> <FS> <tag> <FS>
<poll-delta> <FS> <delta-val-list>
delta-val-list ::= LEFT <delta-val> [ <FS> <delta-val> ] RIGHT
poll-delta ::= <integer>
delta-val ::= <integer>
FS ::= , | ; | :
LEFT ::= ( | [ | {
RIGHT ::= ) | ] | }
A data-field holds the values for each variable in its specified tag. Write a new data-field for every separate poll, with a one-to-one match between variables and values ๐ซถ Each data-field starts with the timestamp for that poll, then the tag that defines the polled variables, then a poll-delta, which is the number of seconds since the previous poll. Counters are stored as delta values, while non-counter values like OperStatus are stored as absolute values. The timestamp is in UTC, and the time-zone field in the device section is what turns it into local time for the device being logged ๐ฐ๏ธ
A comma, semicolon, or colon can be used as a field separator. Normally you'd use commas within a line, a semicolon at the end of a line, and a colon after keywords like BEGIN_LABEL ๐
Parentheses (), brackets [], or braces {} can be used as LEFT and RIGHT brackets around tag-name, tag-table, and delta-val lists. They're meant to be used in matching pairs, even though combos like (], [}, and so on are syntactically valid. ๐ญ
6.2. Storage Requirement Estimations ๐งฎ
The header sections aren't counted in this example. We're assuming the maximum polling intensity is used for all 12 recommended variables, that each variable is eight bytes in ASCII, and that no timestamps have fractional seconds. With that, the following calculations estimate the storage needed for one year of storing and aggregating statistical data ๐
Say the data is saved according to this scheme:
1 minute non-aggregated saved 1 day,
15 minute aggregation period saved 1 week,
1 hour aggregation period saved 1 month and
1 day aggregation period saved 1 year,
This gives us the size of one entry for each aggregation period:
Aggregation periods
1 min 15 min 1 hour 1 day
Timestamp 14 14 14 14
Tag 5 5 5 5
Poll-Delta 2 3 4 5
Total values 96 96 96 96
Peak values 0 96 192 288
Field separators 14 28 42 56
Total entry size 131 242 353 464
Now the totals, bestie ๐
- For each day there are 60*24 = 1440 entries, with a total size of 1440*131 = 189 kB. ๐
- For each week there are 4*24*7 = 672 entries stored, with a total size of 672*242 = 163 kB. ๐
- For each month there are 24*30 = 720 entries stored, with a total size of 720*353 = 254 kB. ๐
- For each year there are 365 entries stored, with a total size of 365*464 = 169 kB. ๐
So the grand total estimated storage for one year is 775 kB. That's giving tiny but mighty ๐ โจ
7. Report Formats ๐
This section suggests some report formats and defines the metrics to be used in such reports. Let's get into it ๐ฆ
7.1. Report Types and Contents โจ
Okay so there are longer-term needs for monthly and yearly reports ๐ that show the long-term tendencies in the network. Then there are short-term weekly reports giving info about medium-term changes in network behavior, which could serve as input to the medium-term engineering approach ๐ง . And finally, daily reports give the instantaneous overviews you need for daily ops ๐ .
These reports should give information on:
Offered Load Total traffic at external interfaces
Offered Load Segmented by "Customer"
Offered Load Segmented protocol/application.
Resource Utilization Link/Router
7.2. Content of the Reports ๐
7.2.1. Offered Load by Link ๐
Metric categories: input octets per external interface
output octets per external interface
input packets per external interface
output packets per external interface
The goal here is to visualize the overall trend of network traffic on each connected external interface ๐. This could be done as a bar-chart giving the totals for each of the four metric categories. Depending on the time period you pick, it could be done on an hourly, daily, monthly or yearly basis ๐๏ธ.
7.2.2. Offered Load by Customer ๐
Metric categories: input octets per customer
output octets per customer
input packets per customer
output packets per customer
The recommendation here is to sort the offered load (in decreasing order) by customer ๐. Then plot the function F(n), where F(n) is the percentage of total traffic offered to the top n customers, or the function f(n), where f is the percentage of traffic offered by the nth ranked customer.
What counts as a "customer" has to be decided locally at the site where the statistics are being gathered ๐ .
A cumulative plot could be useful as an overview of how traffic is spread across users, since it lets you quickly see what fraction of the traffic comes from what number of "users" ๐. A method of showing both average and peak behavior in the same bar chart is to compute the average value over some period and the peak value during that same period. Then the average and peak values are displayed in the same bar ๐โจ.
7.2.3. Resource Utilization Reporting ๐ง
7.2.3.1. Utilization as Maximum Peak Behavior โก
Link utilization is how you capture information on network loading ๐. The polling interval has to be small enough to be significant with respect to variations in human activity, because human activity is what drives variations in network loading ๐งโ๐ป. On the other hand, there's no need to make it smaller than an interval over which excessive delay would notably impact productivity. That's why 30 minutes is a good estimate of the time people stay in one activity, and the window over which prolonged high delay will affect their productivity ๐. To track 30-minute variations, you need to sample twice as frequently, i.e., every 15 minutes. The polling period of 10 minutes recommended above should be sufficient to capture variations in utilization ๐ฏ.
A possible format for reporting utilization seen as peak behavior is to combine averages and peak measurements onto the same diagram ๐๏ธ. Think of the peak-meters on audio equipment, honestly iconic ๐ง. If, for example, a diagram contains the daily totals for some period, then the peaks would be the busiest hour during each day. If the diagram shows totals on an hourly basis, then the peak would be the maximum ten-minute period in each hour โฐ.
By combining the average and the maximum values for a certain time period, it should be possible to detect line utilization and bottlenecks caused by temporary high loads ๐ฆ.
7.2.3.2. Utilization Visualized as a Frequency Distribution of Peaks ๐
Another way to visualize line utilization is to put the ten-minute samples in a histogram ๐. It shows the relative frequency among the samples versus the load, and it's giving very clear picture energy ๐ฆ.
8. Considerations for Future Development ๐ฎ
This memo is the first effort at formalizing a common basis for operational statistics ๐ธ. One major guideline in this work has been to keep the model simple, so vendors and NOCs can easily integrate it into their operational tools ๐ ๏ธ.
There are, however, some ideas that could progress further to expand the scope and usability of the model ๐.
8.1. A Client/Server Based Statistical Exchange System ๐ฅ๏ธ
A possible path for development is a client/server based architecture for providing Internet access to operational statistics ๐. In this setup, each NOC installs a server that provides locally collected information in a variety of forms to clients ๐ง.
Using a query language, the client should be able to define the network object, the interface, the metrics and the time period to be provided ๐. Using a TCP-based protocol, the server will transmit the requested data ๐จ. Once the client receives the data, it could be processed and presented by a variety of tools. One possibility is an X-Window based tool that displays defined diagrams from data, with those diagrams fed into the X-Window tool directly from the statistical server ๐ช. Another complementary method would be to generate PostScript output so you can print the diagrams ๐จ๏ธ. In all cases it should be possible to store the retrieved data locally for later processing ๐พ.
The client/server approach is discussed further by Henry Clark in RFC 1856 ๐ซถ.
8.2. Inclusion of Variables not in the Internet Standard MIB ๐งฉ
As was pointed out above in the categorization of metrics, there are metrics which certainly could have been recommended if they were available in the Internet Standard MIB ๐ญ. To make it easier to include such metrics in the set of recommended metrics, it will be necessary to specify a subtree in the Internet Standard MIB containing variables judged necessary for performing operational statistics ๐ณ.
8.3. Detailed Resource Utilization Statistics ๐
One area of interest not covered in the description of metrics and presentation formats above is presenting statistics on detailed views of traffic flows ๐. Such views could include statistics on a per-application basis and a per-protocol basis. Today such metrics are not part of the Internet Standard MIB. Tools like the NSF NNStat are being used to gather information of this kind ๐ ๏ธ. A possible way to achieve such data could be to define an NNStat MIB, or to include such variables in the operational statistics MIB subtree suggested above ๐ .
APPENDIX A. Some formulas for statistical aggregation ๐งฎโจ
The following naming conventions are used ๐:
For poll values:
poll(n)_j
n = Polling or aggregation period
j = Entry number
For peak values:
peak(n,m)_j
n = Period over which the peak is calculated
m = The peak period length
j = Entry number
So poll(900)_j is the 15 minute total value ๐.
peak(3600,900)_j is the maximum 15 minute period calculated over 1 hour โฑ๏ธ.
Assume a polling over a 24 hour period giving 1440 logged entries ๐.
=========================
Without any aggregation we have
poll(60)_1
......
poll(60)_1440
========================
15 minute aggregation will give 96 entries of total values
poll(900)_1
....
poll(900)_96
j=(n+14)
poll(900)_k = SUM poll(60)_j n=1,16,31,...1426
j=n k=1,2,....,96
There will also be 96 one-minute peak values.
j=(n+14)
peak(900,60)_k = MAX poll(60)_j n=1,16,31,....,1426
j=n k=1,2,....,96
=======================
The next aggregation step goes from 15 minutes to 1 hour, giving 24 totals ๐ฐ:
j=(n+3)
poll(3600)_k = SUM poll(900)_j n=1,5,9,.....,93
j=n k=1,2,....,24
plus 24 one-minute peaks calculated over each hour:
j=(n+3)
peak (3600,60)_k = MAX peak(900,60)_j n=1,5,9,.....,93
j=n k=1,2,....24
and finally 24 15-minute peaks calculated over each hour:
j=(n+3)
peak (3600,900) = MAX poll(900)_j n=1,5,9,.....,93
j=n
===================
The next aggregation step goes from 1 hour to 24 hours. For each day with 1440 entries as above, this gives ๐ :
j=(n+23)
poll(86400)_k = SUM poll(3600)_j n=1,25,51,.......
j=n k=1,2............
j=(n+23)
peak(86400,60)_k = MAX peak(3600,60)_j n=1,25,51,....
j=n k=1,2.........
which gives the busiest 1 minute period over 24 hours ๐ฅ:
j=(n+23)
peak(86400,900)_k = MAX peak(3600,900)_j n=1,25,51,....
j=n k=1,2,........
which gives the busiest 15 minute period over 24 hours โญ:
j=(n+23)
peak(86400,3600)_k = MAX poll(3600)_j n=1,25,51,....
j=n k=1,2,........
which gives the busiest 1 hour period over 24 hours ๐.
===================
There will probably be a difference between the three peak values in the final 24 hour aggregation ๐ค. A smaller peak period will give higher values than a longer one, i.e., if they're adjusted to be numerically comparable ๐ :
poll(86400)/3600 < peak(86400,3600) < peak(86400,900)*4
< peak(86400,60)*60
APPENDIX B โจ
An example
Okay bestie, let's walk through a worked example ๐ We start with this data storage:
BEGIN_DEVICE:
...
{
UNI-1,total: [ifInOctet, 60, 60,ifOutOctet, 60, 60];
BRD-1,total: [ifInNUcastPkts,300,300,ifOutNUcastPkts,300,300]
}
...
Which gives us this:
BEGIN_DATA:
19920730000000,UNI-1,60:(val1-1,val2-1);
19920730000060,UNI-1,60:(val1-2,val2-2);
19920730000120,UNI-1,60:(val1-3,val2-3);
19920730000180,UNI-1,60:(val1-4,val2-4);
19920730000240,UNI-1,60:(val1-5,val2-5);
19920730000300,UNI-1,60:(val1-6,val2-6);
19920730000300,BRD-1,300:(val1-7,val2-7);
19920730000360,UNI-1,60:(val1-8,val2-8);
...
Now let's aggregate to 15 minutes ๐
BEGIN_DEVICE:
...
{
UNI-1,total: [ifInOctet, 60,900,ifOutOctet, 60,900];
BRD-1,total: [ifInNUcastPkts,300,900,ifOutNUcastPkts,300,900];
UNI-2,peak: [ifInOctet, 60,900,ifOutOctet, 60,900];
BRD-2,peak: [ifInNUcastPkts,300,900,ifOutNUcastPkts,300,900]
}
...
Here's what the labels mean:
- UNI-1 is the 15 minute total
- BRD-1 is the 15 minute total
- UNI-2 is the 1 minute peak over 15 minute (
peak = peak(1)) - BRD-2 is the 5 minute peak over 15 minute (
peak = peak(1))
And the data comes out like this ๐ฆ
BEGIN_DATA:
19920730000900,UNI-1,900:(tot-val1,tot-val2);
19920730000900,BRD-1,900:(tot-val1,tot-val2);
19920730000900,UNI-2,900:(peak(1)-val1,peak(1)-val2);
19920730000900,BRD-2,900:(peak(1)-val1,peak(1)-val2);
19920730001800,UNI-1,900:(tot-val1,tot-val2);
19920730001800,BRD-1,900:(tot-val1,tot-val2);
19920730001800,UNI-2,900:(peak(1)-val1,peak(1)-val2);
19920730001800,BRD-2,900:(peak(1)-val1,peak(1)-val2);
...
Next up is the aggregation step to 1 hour โฐ
BEGIN_DEVICE:
...
{
UNI-1,total: [ifInOctet, 60,3600,ifOutOctet, 60,3600];
BRD-1,total: [ifInNUcastPkts,300,3600,ifOutNUcastPkts,300,3600];
UNI-2,peak: [ifInOctet, 60,3600,ifOutOctet, 60,3600];
BRD-2,peak: [ifInNUcastPkts,300, 900,ifOutNUcastPkts,300, 900];
UNI-3,peak: [ifInOctet, 900,3600,ifOutOctet, 900,3600];
BRD-3,peak: [ifInNUcastPkts,900,3600,ifOutNUcastPkts,900,3600]
}
Where:
- UNI-1 is the one hour total
- BRD-1 is the one hour total
- UNI-2 is the 1 minute peak over 1 hour (
peak of peak = peak(2)) - BRD-2 is the 5 minute peak over 1 hour (
peak of peak = peak(2)) - UNI-3 is the 15 minute peak over 1 hour (
peak = peak(1)) - BRD-3 is the 15 minute peak over 1 hour (
peak = peak(1))
Which gives:
BEGIN_DATA:
19920730003600,UNI-1,3600:(tot-val1,tot-val2);
19920730003600,BRD-1,3600:(tot-val1,tot-val2);
19920730003600,UNI-2,3600:(peak(2)-val1,peak(2)-val2);
19920730003600,BRD-2,3600:(peak(2)-val1,peak(2)-val2);
19920730003600,UNI-3,3600:(peak(1)-val1,peak(1)-val2);
19920730003600,BRD-3,3600:(peak(1)-val1,peak(1)-val2);
19920730007200,UNI-1,3600:(tot-val1,tot-val2);
19920730007200,BRD-1,3600:(tot-val1,tot-val2);
19920730007200,UNI-2,3600:(peak(2)-val1,peak(2)-val2);
19920730007200,BRD-2,3600:(peak(2)-val1,peak(2)-val2);
19920730007200,UNI-3,3600:(peak(1)-val1,peak(1)-val2);
19920730007200,BRD-3,3600:(peak(1)-val1,peak(1)-val2);
...
Finally, the big one: aggregating to 1 day ๐
BEGIN_DEVICE:
...
{
UNI-1,total: [ifInOctet, 60,86400,ifOutOctet, 60,86400];
BRD-1,total: [ifInNUcastPkts, 300,86400,ifOutNUcastPkts, 300,86400];
UNI-2,peak: [ifInOctet, 60,86400,ifOutOctet, 60,86400];
BRD-2,peak: [ifInNUcastPkts, 300, 900,ifOutNUcastPkts, 300, 900];
UNI-3,peak: [ifInOctet, 900,86400,ifOutOctet, 900,86400];
BRD-3,peak: [ifInNUcastPkts, 900,86400,ifOutNUcastPkts, 900,86400];
UNI-4,peak: [ifInOctet, 3600,86400,ifOutOctet, 3600,86400];
BRD-4,peak: [ifInNUcastPkts,3600,86400,ifOutNUcastPkts,3600,86400]
}
...
And the labels:
- UNI-1 is the 24 hour total
- BRD-1 is the 24 hour total
- UNI-2 is the 1 minute peak over 24 hour (
peak of peak of peak = peak(3)) - UNI-3 is the 15 minute peak over 24 hour (
peak of peak = peak(2)) - UNI-4 is the 1 hour peak over 24 hour (
peak = peak(1)) - BRD-2 is the 5 minute peak over 24 hour (
peak of peak of peak = peak(3)) - BRD-3 is the 15 minute peak over 24 hour (
peak of peak = peak(2)) - BRD-4 is the 1 hour peak over 24 hour (
peak = peak(1))
Which gives:
BEGIN_DATA:
19920730086400,UNI-1,86400:(tot-val1,tot-val2);
19920730086400,BRD-1,86400:(tot-val1,tot-val2);
19920730086400,UNI-2,86400:(peak(3)-val1,peak(3)-val2);
19920730086400,BRD-2,86400:(peak(3)-val1,peak(3)-val2);
19920730086400,UNI-3,86400:(peak(2)-val1,peak(2)-val2);
19920730086400,BRD-3,86400:(peak(2)-val1,peak(2)-val2);
19920730086400,UNI-4,86400:(peak(1)-val1,peak(1)-val2);
19920730086400,BRD-4,86400:(peak(1)-val1,peak(1)-val2);
19920730172800,UNI-1,86400:(tot-val1,tot-val2);
19920730172800,BRD-1,86400:(tot-val1,tot-val2);
19920730172800,UNI-2,86400:(peak(3)-val1,peak(3)-val2);
19920730172800,BRD-2,86400:(peak(3)-val1,peak(3)-val2);
19920730172800,UNI-3,86400:(peak(2)-val1,peak(2)-val2);
19920730172800,UNI-3,86400:(peak(2)-val1,peak(2)-val2);
19920730172800,UNI-4,86400:(peak(1)-val1,peak(1)-val2);
19920730172800,BRD-4,86400:(peak(1)-val1,peak(1)-val2);
...
Security Considerations
Security issues are discussed in Section 2.4. ๐๐ญ Go read that section before you ship anything, no cap!
Author's Address
Michael H. Lambert
Pittsburgh Supercomputing Center
4400 Fifth Avenue
Pittsburgh, PA 15213
USA
Phone: +1 412 268-4960
Fax: +1 412 268-8200
EMail: lambert@psc.edu
That's the whole RFC, bestie! ๐๐ง
๐ฆ where this page comes from
- ietf: rfc1857 1995-10
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms