TX packets overrun-fortinet-FortiOS

error
health-checks
fortios
fortinet
TX packets overrun-fortinet-FortiOS
0

#1

TX packets overrun-fortinet-FortiOS

Vendor: fortinet

OS: FortiOS

Description:
Indeni tracks the number of packets that had issues and alerts if the ratio is too high.

Remediation Steps:
Packet overruns usually occur when there are too many packets being inserted into the port’s memory buffer, faster than the rate at which the kernel is able to process them.

   |1. Run "diag hardware deviceinfo nic <interface>" command to display a list of hardware related error names and values. Review  the next link for more details: http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
   |2. Run command "fnsysctl cat /proc/net/dev" to get a summary of the interface statistics.
   |3. Check for speed and duplex mismatch in the interface settings on both sides of a cable, and check for a damaged cable. Review the next link for more info: http://kb.fortinet.com/kb/documentLink.do?externalID=10653

How does this work?
This script logs into the FortiGate using SSH and retrieves the output of the “fnsysctl ifconfig” FortiOS hidden command. The output includes all the interface related information and statistics.

Why is this important?
Capture the interface Transmit Overruns counter. A high value of overrun packets may have impact on traffic utilization, causing a re-transmission of TCP apps and consequently degrade application performance. In a small number of cases, the overrun counter may be incremented because of a software defect. However, in the majority of cases, it indicates that the receiving capability of the interface was exceeded. Nothing can be done on the device that reports overruns. If possible, the rate that frames are coming should be controlled at the remote end of the connection. Check the link below for more information about troubleshooting network interface problems: http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm

Without Indeni how would you find this?
An admin would need to log into the Fortinet firewall and manually review the interface statistics.

fortios-fnsysctl-ifconfig

#! META
name: fortios-fnsysctl-ifconfig
description: FortiGate Diagnose Interface
type: monitoring
monitoring_interval: 5 minutes
requires:
    vendor: fortinet
    os.name: FortiOS
    product: firewall

# --------------------------------------------------------------------------------------------------
# The script publish the following metrics
#
# [network-interface-rx-errors]           [number of rx errors packets]
# [network-interface-rx-dropped]          [number of rx dropped packets]
# [network-interface-rx-overruns]         [number of rx overruns packets]
# [network-interface-tx-errors]           [number of tx errors packets]
# [network-interface-tx-dropped]          [number of tx dropped packets]
# [network-interface-tx-overruns]         [number of tx overruns packets]
# [network-interface-tx-collisions]       [number of tx collisions in bytes]
# [network-interface-interrupts]          [number of interrupts] (not-live-config)
# [network-interface-rx-bytes]            [number of rx in bytes] (not-live-config)
# [network-interface-tx-bytes]            [number of tx in bytes] (not-live-config)
# [network-interface-rx-packets]          [number of rx in packets] (not-live-config)
# [network-interface-tx-packets]          [number of tx in packets] (not-live-config)
#
# --------------------------------------------------------------------------------------------------

#! COMMENTS
network-interface-rx-errors:
    why: |
        Capture the interface Receive Errors counter. Receive errors indicate an issue with duplex/speed matching.
        Check the link below for more information about troubleshooting network interface problems:
        http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
        An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-rx-dropped:
    why: |
       Capture the interface Receive Drop counter. Packet loss may have severe impact to the traffic utilization
       (retransmission for TCP apps) and to the performance of the applications. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-rx-overruns:
    why: |
       Capture the interface Receive overruns counter. High value of overruns packets may have impact to the traffic
       utilization (retransmission for TCP apps) and to the performance of the applications. In a small number of
       cases, the overrun counter may be incremented because of a software defect. However, in the majority of cases,
       it indicates that the receiving capability of the interface was exceeded. Nothing can be done on the device that
       reports overruns. If possible, the rate that frames are coming should be controlled at the remote end of the
       connection. Check the link below for more information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-errors:
    why: |
        Capture the interface Transmit Errors counter. Transmit errors indicate an issue with duplex/speed matching.
        Check the link below for more information about troubleshooting network interface problems:
        http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
        This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS
        hidden command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-dropped:
    why: |
       Capture the interface Transmit Drop counter. Packet loss may have severe impact to the traffic utilization
       (retransmission for TCP apps) and to the performance of the applications. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-overruns:
    why: |
       Capture the interface Transmit Overruns counter. A high value of overrun packets may have impact on traffic
       utilization, causing a re-transmission of TCP apps and consequently degrade application performance. In a small
       number of cases, the overrun counter may be incremented because of a software defect. However, in the majority
       of cases, it indicates that the receiving capability of the interface was exceeded. Nothing can be done on the
       device that reports overruns. If possible, the rate that frames are coming should be controlled at the remote
       end of the connection. Check the link below for more information about troubleshooting network interface
       problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-collisions:
    why: |
       Capture the interface transimit collisions counter and is valid for half duplex mode. High value of collision
       packets may have impact to the traffic utilization (retransmission for TCP apps) and to the performance of the
       applications. Check the link below for more information about troubleshooting network  interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-interrupts:
    why: |
       Capture the interrupt number information assigned to the NIC of the Fortinet firewall.
    how: |
       This script logs into the Fortigate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-rx-bytes:
    why: |
       Capture the interface Received Bytes counter. Knowing the amount of bytes and packets flowing through an
       interface can help estimate an interface's performance and utilization. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-bytes:
    why: |
       Capture the interface Transmitted Bytes counter. Knowing the amount of bytes and packets flowing through an
       interface can help estimate an interface's performance and utilization. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-rx-packets:
    why: |
       Capture the interface Received Packet counter. Knowing the amount of bytes and packets flowing through an
       interface can help estimate an interface's performance and utilization. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-packets:
    why: |
       Capture the interface Transmitted Packet counter. Knowing the amount of bytes and packets flowing through an
       interface can help estimate an interface's performance and utilization. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false


#! REMOTE::SSH
fnsysctl ifconfig


#! PARSER::AWK

#-----------------------------------------------------------------------
# Helper function.
# Split the input string using ':' as a delimiter and return second part.
# For example for input 'packets:5' the result is '5'
#-----------------------------------------------------------------------
function getSecondPart(stringWithDelim) {
    split(stringWithDelim, stringArray, ":")
    return stringArray[2]
}

# Initialize the variables
BEGIN {
    # We will store each interface data in an array (array_interfaces)
    # Initialize the index of the array
    index_interface = 0
}

# The begin of the interface package.
# We increase the index_interface and store the data in the array.
#eth0    Link encap:Ethernet  HWaddr 08:5B:0E:EE:CA:B0
/\sLink encap:/ {
    index_interface++

    # 1. Parse first line (interface name)
    #eth1    Link encap:Ethernet  HWaddr 08:5B:0E:EE:CA:B1
    array_interfaces[index_interface, "name"] = $1

    # set default value for "network-interface-interrupts"
    array_interfaces[index_interface, "network-interface-interrupts"] = 0

}

# Parsing the rx line
#        RX packets:165910091 errors:0 dropped:0 overruns:0 frame:0
/\sRX packets:/{
    array_interfaces[index_interface, "network-interface-rx-errors"] = getSecondPart($3)
    array_interfaces[index_interface, "network-interface-rx-dropped"] = getSecondPart($4)
    array_interfaces[index_interface, "network-interface-rx-overruns"] = getSecondPart($5)
}

# Parsing the tx line
#        TX packets:1687661 errors:0 dropped:0 overruns:0 carrier:0
/\sTX packets:/{
    array_interfaces[index_interface, "network-interface-tx-errors"] = getSecondPart($3)
    array_interfaces[index_interface, "network-interface-tx-dropped"] = getSecondPart($4)
    array_interfaces[index_interface, "network-interface-tx-overruns"] = getSecondPart($5)
}

# Parsing the RX packets line
#        RX packets:3866 errors:0 dropped:0 overruns:0 frame:0
/\sRX packets:/{
    array_interfaces[index_interface, "network-interface-rx-packets"] = getSecondPart($2)
}

# Parsing the TX packets line
#        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
/\sTX packets:/{
    array_interfaces[index_interface, "network-interface-tx-packets"] = getSecondPart($2)
}

# Parsing the collisions line
#        collisions:0 txqueuelen:1000
/\scollisions:/{
    array_interfaces[index_interface, "network-interface-tx-collisions"] = getSecondPart($1)
}

# Parsing the interrupts line
#        Interrupt:19 Memory:df700000-df720000
/\sInterrupt:/{
    array_interfaces[index_interface, "network-interface-interrupts"] = getSecondPart($1)
}

# Parsing the rx/tx in bytes
#        RX bytes:0 (0  Bytes)  TX bytes:0 (0  Bytes)
/\sRX bytes:/{
    array_interfaces[index_interface, "network-interface-rx-bytes"] = getSecondPart($2)
    array_interfaces[index_interface, "network-interface-tx-bytes"] = getSecondPart($6)
}

END {

    # Publishing metrics based on the parsed data
    for( index_of_table = 1; index_of_table < index_interface + 1; index_of_table++ ){

        tags_name_ui["name"] = array_interfaces[index_of_table, "name"]

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (RX Errors)"
        writeDoubleMetricWithLiveConfig("network-interface-rx-errors", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-errors"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (RX Dropped)"
        writeDoubleMetricWithLiveConfig("network-interface-rx-dropped", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-dropped"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (RX Overruns)"
        writeDoubleMetricWithLiveConfig("network-interface-rx-overruns", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-overruns"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (TX Errors)"
        writeDoubleMetricWithLiveConfig("network-interface-tx-errors", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-errors"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (TX Dropped)"
        writeDoubleMetricWithLiveConfig("network-interface-tx-dropped", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-dropped"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (TX Overruns)"
        writeDoubleMetricWithLiveConfig("network-interface-tx-overruns", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-overruns"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (TX Collisions)"
        writeDoubleMetricWithLiveConfig("network-interface-tx-collisions", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-collisions"], "Interface Statistics", "number", "name-interface")

        # In case of not-live-config, the tag-name is not used.
        tags_name_only["name"] = array_interfaces[index_of_table, "name"]

        writeDoubleMetric("network-interface-interrupts", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-interrupts"])

        writeDoubleMetric("network-interface-rx-bytes", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-bytes"])

        writeDoubleMetric("network-interface-tx-bytes", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-bytes"])

        writeDoubleMetric("network-interface-rx-packets", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-packets"])

        writeDoubleMetric("network-interface-tx-packets", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-packets"])

    }

}




fortios-fnsysctl-ifconfig

#! META
name: fortios-fnsysctl-ifconfig
description: FortiGate Diagnose Interface
type: monitoring
monitoring_interval: 5 minutes
requires:
    vendor: fortinet
    os.name: FortiOS
    product: firewall

# --------------------------------------------------------------------------------------------------
# The script publish the following metrics
#
# [network-interface-rx-errors]           [number of rx errors packets]
# [network-interface-rx-dropped]          [number of rx dropped packets]
# [network-interface-rx-overruns]         [number of rx overruns packets]
# [network-interface-tx-errors]           [number of tx errors packets]
# [network-interface-tx-dropped]          [number of tx dropped packets]
# [network-interface-tx-overruns]         [number of tx overruns packets]
# [network-interface-tx-collisions]       [number of tx collisions in bytes]
# [network-interface-interrupts]          [number of interrupts] (not-live-config)
# [network-interface-rx-bytes]            [number of rx in bytes] (not-live-config)
# [network-interface-tx-bytes]            [number of tx in bytes] (not-live-config)
# [network-interface-rx-packets]          [number of rx in packets] (not-live-config)
# [network-interface-tx-packets]          [number of tx in packets] (not-live-config)
#
# --------------------------------------------------------------------------------------------------

#! COMMENTS
network-interface-rx-errors:
    why: |
        Capture the interface Receive Errors counter. Receive errors indicate an issue with duplex/speed matching.
        Check the link below for more information about troubleshooting network interface problems:
        http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
        An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-rx-dropped:
    why: |
       Capture the interface Receive Drop counter. Packet loss may have severe impact to the traffic utilization
       (retransmission for TCP apps) and to the performance of the applications. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-rx-overruns:
    why: |
       Capture the interface Receive overruns counter. High value of overruns packets may have impact to the traffic
       utilization (retransmission for TCP apps) and to the performance of the applications. In a small number of
       cases, the overrun counter may be incremented because of a software defect. However, in the majority of cases,
       it indicates that the receiving capability of the interface was exceeded. Nothing can be done on the device that
       reports overruns. If possible, the rate that frames are coming should be controlled at the remote end of the
       connection. Check the link below for more information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-errors:
    why: |
        Capture the interface Transmit Errors counter. Transmit errors indicate an issue with duplex/speed matching.
        Check the link below for more information about troubleshooting network interface problems:
        http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
        This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS
        hidden command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-dropped:
    why: |
       Capture the interface Transmit Drop counter. Packet loss may have severe impact to the traffic utilization
       (retransmission for TCP apps) and to the performance of the applications. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-overruns:
    why: |
       Capture the interface Transmit Overruns counter. A high value of overrun packets may have impact on traffic
       utilization, causing a re-transmission of TCP apps and consequently degrade application performance. In a small
       number of cases, the overrun counter may be incremented because of a software defect. However, in the majority
       of cases, it indicates that the receiving capability of the interface was exceeded. Nothing can be done on the
       device that reports overruns. If possible, the rate that frames are coming should be controlled at the remote
       end of the connection. Check the link below for more information about troubleshooting network interface
       problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-collisions:
    why: |
       Capture the interface transimit collisions counter and is valid for half duplex mode. High value of collision
       packets may have impact to the traffic utilization (retransmission for TCP apps) and to the performance of the
       applications. Check the link below for more information about troubleshooting network  interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-interrupts:
    why: |
       Capture the interrupt number information assigned to the NIC of the Fortinet firewall.
    how: |
       This script logs into the Fortigate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-rx-bytes:
    why: |
       Capture the interface Received Bytes counter. Knowing the amount of bytes and packets flowing through an
       interface can help estimate an interface's performance and utilization. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-bytes:
    why: |
       Capture the interface Transmitted Bytes counter. Knowing the amount of bytes and packets flowing through an
       interface can help estimate an interface's performance and utilization. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-rx-packets:
    why: |
       Capture the interface Received Packet counter. Knowing the amount of bytes and packets flowing through an
       interface can help estimate an interface's performance and utilization. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false

network-interface-tx-packets:
    why: |
       Capture the interface Transmitted Packet counter. Knowing the amount of bytes and packets flowing through an
       interface can help estimate an interface's performance and utilization. Check the link below for more
       information about troubleshooting network interface problems:
       http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
    how: |
       This script logs into the FortiGate using SSH and retrieves the output of the "fnsysctl ifconfig" FortiOS hidden
       command. The output includes all the interface related information and statistics.
    without-indeni: |
         An admin would need to log into the Fortinet firewall and manually review the interface statistics.
    can-with-snmp: true
    can-with-syslog: false


#! REMOTE::SSH
fnsysctl ifconfig


#! PARSER::AWK

#-----------------------------------------------------------------------
# Helper function.
# Split the input string using ':' as a delimiter and return second part.
# For example for input 'packets:5' the result is '5'
#-----------------------------------------------------------------------
function getSecondPart(stringWithDelim) {
    split(stringWithDelim, stringArray, ":")
    return stringArray[2]
}

# Initialize the variables
BEGIN {
    # We will store each interface data in an array (array_interfaces)
    # Initialize the index of the array
    index_interface = 0
}

# The begin of the interface package.
# We increase the index_interface and store the data in the array.
#eth0    Link encap:Ethernet  HWaddr 08:5B:0E:EE:CA:B0
/\sLink encap:/ {
    index_interface++

    # 1. Parse first line (interface name)
    #eth1    Link encap:Ethernet  HWaddr 08:5B:0E:EE:CA:B1
    array_interfaces[index_interface, "name"] = $1

    # set default value for "network-interface-interrupts"
    array_interfaces[index_interface, "network-interface-interrupts"] = 0

}

# Parsing the rx line
#        RX packets:165910091 errors:0 dropped:0 overruns:0 frame:0
/\sRX packets:/{
    array_interfaces[index_interface, "network-interface-rx-errors"] = getSecondPart($3)
    array_interfaces[index_interface, "network-interface-rx-dropped"] = getSecondPart($4)
    array_interfaces[index_interface, "network-interface-rx-overruns"] = getSecondPart($5)
}

# Parsing the tx line
#        TX packets:1687661 errors:0 dropped:0 overruns:0 carrier:0
/\sTX packets:/{
    array_interfaces[index_interface, "network-interface-tx-errors"] = getSecondPart($3)
    array_interfaces[index_interface, "network-interface-tx-dropped"] = getSecondPart($4)
    array_interfaces[index_interface, "network-interface-tx-overruns"] = getSecondPart($5)
}

# Parsing the RX packets line
#        RX packets:3866 errors:0 dropped:0 overruns:0 frame:0
/\sRX packets:/{
    array_interfaces[index_interface, "network-interface-rx-packets"] = getSecondPart($2)
}

# Parsing the TX packets line
#        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
/\sTX packets:/{
    array_interfaces[index_interface, "network-interface-tx-packets"] = getSecondPart($2)
}

# Parsing the collisions line
#        collisions:0 txqueuelen:1000
/\scollisions:/{
    array_interfaces[index_interface, "network-interface-tx-collisions"] = getSecondPart($1)
}

# Parsing the interrupts line
#        Interrupt:19 Memory:df700000-df720000
/\sInterrupt:/{
    array_interfaces[index_interface, "network-interface-interrupts"] = getSecondPart($1)
}

# Parsing the rx/tx in bytes
#        RX bytes:0 (0  Bytes)  TX bytes:0 (0  Bytes)
/\sRX bytes:/{
    array_interfaces[index_interface, "network-interface-rx-bytes"] = getSecondPart($2)
    array_interfaces[index_interface, "network-interface-tx-bytes"] = getSecondPart($6)
}

END {

    # Publishing metrics based on the parsed data
    for( index_of_table = 1; index_of_table < index_interface + 1; index_of_table++ ){

        tags_name_ui["name"] = array_interfaces[index_of_table, "name"]

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (RX Errors)"
        writeDoubleMetricWithLiveConfig("network-interface-rx-errors", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-errors"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (RX Dropped)"
        writeDoubleMetricWithLiveConfig("network-interface-rx-dropped", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-dropped"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (RX Overruns)"
        writeDoubleMetricWithLiveConfig("network-interface-rx-overruns", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-overruns"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (TX Errors)"
        writeDoubleMetricWithLiveConfig("network-interface-tx-errors", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-errors"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (TX Dropped)"
        writeDoubleMetricWithLiveConfig("network-interface-tx-dropped", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-dropped"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (TX Overruns)"
        writeDoubleMetricWithLiveConfig("network-interface-tx-overruns", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-overruns"], "Interface Statistics", "number", "name-interface")

        tags_name_ui["name-interface"] = array_interfaces[index_of_table, "name"] " (TX Collisions)"
        writeDoubleMetricWithLiveConfig("network-interface-tx-collisions", tags_name_ui, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-collisions"], "Interface Statistics", "number", "name-interface")

        # In case of not-live-config, the tag-name is not used.
        tags_name_only["name"] = array_interfaces[index_of_table, "name"]

        writeDoubleMetric("network-interface-interrupts", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-interrupts"])

        writeDoubleMetric("network-interface-rx-bytes", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-bytes"])

        writeDoubleMetric("network-interface-tx-bytes", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-bytes"])

        writeDoubleMetric("network-interface-rx-packets", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-rx-packets"])

        writeDoubleMetric("network-interface-tx-packets", tags_name_only, "gauge", 60, array_interfaces[index_of_table, "network-interface-tx-packets"])

    }

}




cross_vendor_tx_overrun

package com.indeni.server.rules.library.templatebased.crossvendor

import com.indeni.server.rules.RuleContext
import com.indeni.server.rules.library.{ConditionalRemediationSteps, NearingCapacityWithItemsTemplateRule}

/**
  *
  */
case class CrossVendorTxOverrun(context: RuleContext) extends NearingCapacityWithItemsTemplateRule(context,
  ruleName = "cross_vendor_tx_overrun",
  ruleFriendlyName = "All Devices: TX packets overrun",
  ruleDescription = "Indeni tracks the number of packets that had issues and alerts if the ratio is too high.",
  usageMetricName = "network-interface-tx-overruns",
  limitMetricName = "network-interface-tx-packets",
  applicableMetricTag = "name",
  threshold = 0.5,
  minimumValueToAlert = 100.0, // We don't want to alert if the number of error packets is really low
  alertDescription = "Some network interfaces and ports are experiencing a high overrun rate. Review the ports below.",
  alertItemDescriptionFormat = "%.0f packets overrun out of a total of %.0f transmitted.",
  baseRemediationText = "Packet overruns usually occur when there are too many packets being inserted into the port's memory buffer, faster than the rate at which the kernel is able to process them.",
  alertItemsHeader = "Affected Ports")(
  ConditionalRemediationSteps.OS_NXOS ->
    """|
       |In a small number of cases, the overrun counter may be incremented because of a software defect. However, in the majority of cases, it indicates that the receiving capability of the interface was exceeded. Nothing can be done on the device that reports overruns. If possible, the rate that frames are coming should be controlled at the remote end of the connection.
       |1. Run the "show interface" command to review the interface overrun & underun counters and the bitrate. Consider to configure the "load-interval 30" interface sub command to improve the accuracy of the interface measurements.
       |2. If the number of overruns is high, the hardware should be upgraded.
       |In case of high bandwidth utilization:
       |1. Run the "show interface" command to review the interface counters and the bitrate. Consider to configure the "load-interval 30" interface sub command to improve the accuracy of the interface measurements.
       |2. If the interface bitrate is too high and close to the upper bandwidth limit consider to use multiple links with the port-channel technology or upgrade the bandwidth of the link
       |3. Consider to implement QoS in case of high bandwidth utilization.""".stripMargin,
  ConditionalRemediationSteps.VENDOR_JUNIPER ->
    """|The issue can not be resolved on the device that reports overruns. The rate that frames are coming should be controlled at the remote end of the connection.
       |1. Run the “show interface extensive” command to review the interface overrun counters. 

       |2. If the number of overruns is high, consider upgrading the hardware.
       |3. Review the following article on Juniper tech support site: <a target="_blank" href="https://www.juniper.net/documentation/en_US/junos/topics/reference/command-summary/show-interfaces-security.html#jd0e1772">Operational Commands</a>""".stripMargin,
  ConditionalRemediationSteps.VENDOR_FORTINET ->
    """
       |1. Run "diag hardware deviceinfo nic <interface>" command to display a list of hardware related error names and values. Review  the next link for more details: http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
       |2. Run command "fnsysctl cat /proc/net/dev" to get a summary of the interface statistics.
       |3. Check for speed and duplex mismatch in the interface settings on both sides of a cable, and check for a damaged cable. Review the next link for more info: http://kb.fortinet.com/kb/documentLink.do?externalID=10653""".stripMargin
)