# tc QoS classes
Plugin: tc.plugin
Module: tc.plugin
## Overview
Examine tc metrics to gain insights into Linux traffic control operations. Study packet flow rates, queue lengths, and drop rates to optimize network traffic flow.
The plugin uses `tc` command to collect information about Traffic control.
This collector is only supported on the following platforms:
- Linux
This collector supports collecting metrics from multiple instances of this integration, including remote instances.
The plugin needs to access command `tc` to get the necessary metrics. To achieve this netdata modifies permission of file `/usr/libexec/netdata/plugins.d/tc-qos-helper.sh`.
### Default Behavior
#### Auto-Detection
This integration doesn't support auto-detection.
#### Limits
The default configuration for this integration does not impose any limits on data collection.
#### Performance Impact
The default configuration for this integration is not expected to impose a significant performance impact on the system.
## Metrics
Metrics grouped by *scope*.
The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
### Per network device direction
Metrics related to QoS network device directions. Each direction (in/out) produces its own set of the following metrics.
Labels:
| Label | Description |
|:-----------|:----------------|
| device | The network interface. |
| device_name | The network interface name |
| group | The device family |
Metrics:
| Metric | Dimensions | Unit |
|:------|:----------|:----|
| tc.qos | a dimension per class | kilobits/s |
| tc.qos_packets | a dimension per class | packets/s |
| tc.qos_dropped | a dimension per class | packets/s |
| tc.qos_tokens | a dimension per class | tokens |
| tc.qos_ctokens | a dimension per class | ctokens |
## Alerts
There are no alerts configured by default for this integration.
## Setup
### Prerequisites
#### Create `tc-qos-helper.conf`
In order to view tc classes, you need to create the file `/etc/netdata/tc-qos-helper.conf` with content:
```text
tc_show="class"
```
### Configuration
#### File
The configuration file name for this integration is `netdata.conf`.
Configuration for this specific integration is located in the `[plugin:tc]` section within that file.
The file format is a modified INI syntax. The general structure is:
```ini
[section1]
option1 = some value
option2 = some other value
[section2]
option3 = some third value
```
You can edit the configuration file using the [`edit-config`](https://github.com/netdata/netdata/blob/master/docs/netdata-agent/configuration/README.md#edit-a-configuration-file-using-edit-config) script from the
Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
```bash
cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
sudo ./edit-config netdata.conf
```
#### Options
Config option
| Name | Description | Default | Required |
|:----|:-----------|:-------|:--------:|
| script to run to get tc values | Path to script `tc-qos-helper.sh` | usr/libexec/netdata/plugins.d/tc-qos-helper.s | no |
| enable show all classes and qdiscs for all interfaces | yes/no flag to control what data is presented. | yes | no |
#### Examples
##### Basic
A basic example configuration using classes defined in `/etc/iproute2/tc_cls`.
An example of class IDs mapped to names in that file can be:
```text
2:1 Standard
2:8 LowPriorityData
2:10 HighThroughputData
2:16 OAM
2:18 LowLatencyData
2:24 BroadcastVideo
2:26 MultimediaStreaming
2:32 RealTimeInteractive
2:34 MultimediaConferencing
2:40 Signalling
2:46 Telephony
2:48 NetworkControl
```
You can read more about setting up the tc rules in rc.local in this [GitHub issue](https://github.com/netdata/netdata/issues/4563#issuecomment-455711973).
```yaml
[plugin:tc]
script to run to get tc values = /usr/libexec/netdata/plugins.d/tc-qos-helper.sh
enable show all classes and qdiscs for all interfaces = yes
```