Tool for monitoring network devices (mainly using SNMP) - monitoring check plugin

Thola

Thola

Go Report Card GitHub code style GitHub license GitHub branch checks state GoDoc doc

Description

A tool for monitoring network devices written in Go. It features a check mode which complies with the monitoring plugins development guidelines and is therefore compatible with Nagios, Icinga, Zabbix, Checkmk, etc.

Installation

You can download the latest compiled version for your platform under the "Releases" tab or build it yourself:

git clone https://github.com/inexio/thola.git
cd thola
go build

Note: This requires Go 1.16 or newer

If you also want to build the client binary, which can be used for sending requests to a running Thola API, use the following build command:

go build --tags client -o thola-client

Features

Thola currently has three main modes of operation with various subcommands:

  • identify automatically identifies the device and outputs its vendor, model and other properties.
  • read reads out values and statistics of the device.
    • read available-components returns the available components for the device.
    • read interfaces outputs the interfaces with several values like error counters and statistics.
    • read count-interfaces counts the interfaces.
    • read cpu-load returns the current cpu load of all CPUs.
    • read memory-usage reads out the current memory usage.
    • read disk reads storage utilizations.
    • read server outputs server specific information like users and process count.
    • read ups outputs the special values of a UPS device.
    • read sbc reads out SBC specific information.
  • check performs checks that can be used in monitoring systems. Output is by default in check plugin format.
    • check identify compares the device properties with given expectations.
    • check snmp checks SNMP reachability.
    • check interface-metrics outputs performance data for the interfaces, including special values based on the interface type (e.g. Radio Interface).
    • check cpu-load checks the average CPU load of all CPUs against given thresholds and outputs the current load of all CPUs as performance data.
    • check memory-usage checks the current memory usage against given thresholds.
    • check ups checks if a UPS device has its main voltage applied and outputs additional performance data like battery capacity or current load, and compares them to optionally given thresholds.
    • check disk checks the free space of storages.
    • check server checks server specific information.
    • check thola-server checks reachability of a Thola API.
    • check sbc checks an SBC device and outputs metrics for each realm and agent as performance data.

More features are coming soon:

  • Read out additional information
    • Inventory data
    • Sensors and Status Flags like temperatures, frequencies, alarms, etc.
    • Device specific data (e.g. DSLAMs)
  • More checks
    • Hardware health
    • Device specific checks

Quick Start

Use the identify mode to automatically discover some properties of a network device.

$ thola identify

Usage:
  thola identify [host] [flags]

Specify the address of the network device in the [host] argument. The --format flag modifies the format of the output. --format pretty is set by default and is useful when reading the output manually. Other options are json and xml.

$ thola identify 10.204.2.90

Device: 
  Class: ceraos/ip10
  Properties: 
    Vendor: Ceragon
    Model: IP-10
    SerialNumber: 00:0A:25:25:77:67
    OSVersion: 2.9.25-1

Next we want to print the interfaces of the network device and their relevant data. We use the read interfaces command for this.

$ thola read interfaces 10.204.2.90

Interfaces: [8] 
  IfIndex: 1
  IfDescr: Radio Interface #0
  IfType: sonet
  IfMtu: 2430
  IfSpeed: 367000
  ...
  
  IfIndex: 5001
  IfDescr: Ethernet #7
  IfType: ethernetCsmacd
  IfMtu: 1548
  IfSpeed: 10000000
  IfPhysAddress: 00:0A:25:27:57:1E
  IfAdminStatus: up
  IfOperStatus: down
  ...

API Mode

Thola can be executed as a REST API. You can start the API using the api command:

$ thola api
 ______   __  __     ______     __         ______   
/\__  _\ /\ \_\ \   /\  __ \   /\ \       /\  __ \  
\/_/\ \/ \ \  __ \  \ \ \/\ \  \ \ \____  \ \  __ \ 
   \ \_\  \ \_\ \_\  \ \_____\  \ \_____\  \ \_\ \_\
    \/_/   \/_/\/_/   \/_____/   \/_____/   \/_/\/_/

⇨ http server started on [::]:8237

For sending requests to the Thola API you can use the Thola client. When executing the Thola client you can specify the address of the API with the --target-api flag.

$ thola-client identify 10.204.2.90 --target-api http://192.168.10.20:8237 

Device: 
  Class: ceraos/ip10
    Properties: 
      Vendor: Ceragon
      Model: IP-10
      SerialNumber: 00:0A:25:25:77:67
      OSVersion: 2.9.25-1

You can find the full API documentation on our SwaggerHub.

Supported Devices

We support a lot of different devices and hope for your contributions to grow our device collection. Some examples are:

  • Cisco
  • Juniper
  • Huawei
  • Nokia/ISAM
  • Ceragon
  • Brocade
  • Edgecore
  • ...

Basic interface readout is supported for every device.

Supported Protocols

Currently we mostly work with SNMP, but already provide basic features for HTTP(S). We plan to support more protocols like telnet, SSH and more.

Tests

You can run our test located in the test directory with the go test command if you have Docker and Docker Compose installed.

If you want to add your own devices to the tests you can put your SNMP recordings in the testdata/devices folder. After that you just need to run the script located in create_testdata to create the expectation files and your devices are included in the testsuite!

Contribution

We are always looking forward to your ideas and suggestions.

If you want to help us please make sure that your code is conform to our coding style.

Happy coding!

Comments
  • Include VLAN information in interfaces

    Include VLAN information in interfaces

    Thola looks very promising to replace an ancient PHP tool running in our infrastructure. To fully replace it, we would need VLAN information in the "read interfaces" cmd-call (and maybe some other information as well).

    Are there plans/code/ideas on how to implement / add VLAN information? I have not found any VLAN reference in the code besides the IfType, so im guessing it has not been considered at all just yet?

    Im might try adding that for Juniper, unless there is already something planned / implemented?

    • Volker
  • Error: cannot create any connection to the device

    Error: cannot create any connection to the device

    Actually Im getting this error of Connection using Thola to identify a device.

    [root@vm-centos8 thola]# ./thola identify vm-centos8 Error: cannot create any connection to the device

    I followed the official guide and also I have Golang 1.16 already installed in my system.

    go version go1.16.6 linux/amd64

    My OS version is CentOS 8:

    NAME="CentOS Linux" VERSION="8" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="8" PLATFORM_ID="platform:el8" PRETTY_NAME="CentOS Linux 8" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:8" HOME_URL="https://centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-8" CENTOS_MANTISBT_PROJECT_VERSION="8"

  • SNMP v3 support?

    SNMP v3 support?

    Hi, thank you for this project. Is SNMP v3 support provided? If so, how is it configured? I have not found anything about this in the documentation yet.

  • Adding hardware-health check to HP switch

    Adding hardware-health check to HP switch

    Hello everyone, Im very interested in using thola to replace our currently used bunch of plugins. So far the development of your plugin looks realy promising. I tried to create a hardware-health monitoring for the HP ARUBA 5406R zl2. I have extended the procurve.yaml.

    name: procurve
    
    config:
      components:
        cpu: true
        memory: true
        hardware_health: true
    
    match:
      logical_operator: "OR"
      conditions:
        - type: SysObjectID
          match_mode: startsWith
          values:
            - ".1.3.6.1.4.1.11.2.3.7.11"
    
    identify:
      properties:
        vendor:
          - detection: constant
            value: "HP ProCurve"
        model:
          - detection: SysDescription
            operators:
              - type: modify
                modify_method: regexSubmatch
                regex: '^HP ([^,]+),'
                format: "$1"
        serial_number:
          - detection: snmpget
            oid: .1.3.6.1.2.1.47.1.1.1.1.11.1001
        os_version:
          - detection: SysDescription
            operators:
              - type: modify
                modify_method: regexSubmatch
                regex: 'revision ([^,]+),'
                format: "$1"
    
    components:
      cpu:
        load:
          - detection: snmpget
            oid: .1.3.6.1.4.1.11.2.14.11.5.1.9.6.1.0
      memory:
        usage:
          - detection: snmpget
            oid: .1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7.1
            operators:
              - type: modify
                modify_method: divide
                value:
                  detection: snmpget
                  oid: 1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.5.1
                  operators:
                    - type: modify
                      modify_method: divide
                      value:
                        detection: constant
                        value: 100
      hardware_health:
        environment_monitor_state:
          - detection: snmpget
            oid: .1.3.6.1.4.1.11.2.36.1.1.5.1.1.3.1
        fans:
          detection: snmpwalk
          values:
            description:
              oid: 1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.2
            state:
              oid: 1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4
        power_supply:
          detection: snmpwalk
          values:
            description:
              oid: .1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.9
            state:
              oid: .1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.2
    

    In doing so I encountered several problems. When checking the switch I get an error message:

    CRITICAL: environment monitor state is critical
    error while adding performance data point (error: failed to add performance data point: a performance data point with this metric does already exist)
    

    Here is the read:

    HardwareHealthComponent:
      EnvironmentMonitorState: 3
      Fans: [6]
          Description: 0
          State: 5
    
          Description: 0
          State: 5
    
          Description: 0
          State: 5
    
          Description: 0
          State: 5
    
          Description: 1
          State: 5
    
          Description: 2
          State: 2
    
    
      PowerSupply: [2]
          Description: J9828A
          State: 5
    
          State: 1
    

    In the source code I saw that for the enviroment monitor state a fixed value is expected. As a workaround for this I added the following code:

    operators:
      - type: switch
        switch_mode: regex
        cases:
          - case: "2|3"
            operators:
              - type: modify
                modify_method: overwrite
                value: "2"
          - case: ".*"
            operators:
              - type: modify
                modify_method: overwrite
                value: "0"
    

    Changing the yaml to:

    name: procurve
    
    config:
      components:
        cpu: true
        memory: true
        hardware_health: true
    
    match:
      logical_operator: "OR"
      conditions:
        - type: SysObjectID
          match_mode: startsWith
          values:
            - ".1.3.6.1.4.1.11.2.3.7.11"
    
    identify:
      properties:
        vendor:
          - detection: constant
            value: "HP ProCurve"
        model:
          - detection: SysDescription
            operators:
              - type: modify
                modify_method: regexSubmatch
                regex: '^HP ([^,]+),'
                format: "$1"
        serial_number:
          - detection: snmpget
            oid: .1.3.6.1.2.1.47.1.1.1.1.11.1001
        os_version:
          - detection: SysDescription
            operators:
              - type: modify
                modify_method: regexSubmatch
                regex: 'revision ([^,]+),'
                format: "$1"
    
    components:
      cpu:
        load:
          - detection: snmpget
            oid: .1.3.6.1.4.1.11.2.14.11.5.1.9.6.1.0
      memory:
        usage:
          - detection: snmpget
            oid: .1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7.1
            operators:
              - type: modify
                modify_method: divide
                value:
                  detection: snmpget
                  oid: 1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.5.1
                  operators:
                    - type: modify
                      modify_method: divide
                      value:
                        detection: constant
                        value: 100
      hardware_health:
        environment_monitor_state:
          - detection: snmpget
            oid: .1.3.6.1.4.1.11.2.36.1.1.5.1.1.3.1
            operators:
              - type: switch
                switch_mode: regex
                cases:
                  - case: "2|3"
                    operators:
                      - type: modify
                        modify_method: overwrite
                        value: "2"
                  - case: ".*"
                    operators:
                      - type: modify
                        modify_method: overwrite
                        value: "0"
        fans:
          detection: snmpwalk
          values:
            description:
              oid: 1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.2
            state:
              oid: 1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4
        power_supply:
          detection: snmpwalk
          values:
            description:
              oid: .1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.9
            state:
              oid: .1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.2
    

    But now part of the error remains with:

    error while adding performance data point (error: failed to add performance data point: a performance data point with this metric does already exist)
    

    If I understand the source code correctly, it makes a data point for each value depending on the description. For the description I am currently reading out the fan type. Unfortunately, these are not unique.

    There is an OID with a list with all descriptions for all components: 1.3.6.1.2.1.47.1.1.1.7

    The problem is when I try to use this OID, it assigns the wrong descriptions.

    My questions are:

    1. We found the following comment in the source: state 2 only works for oracle-acme sbcs, this needs to be generalized once check hardware health is made for all device classes. When are you planing to extend the hardware-health check to allow other devices?
    2. How are the values interpreted in fans and power_supply? Can I work with --warning and --critical?
    3. Is there a way to map a value based on the OID in a snmpwalk instead the value?
    4. Is there any way to limit the range of OIDs it tries to read or select a starting point?

    Here is a anonymized snmprec:

    1.3.6.1.2.1.1.1.0|4x|4850204a3938353041205377697463682035343036527a6c322c207265766973696f6e204b422e31362e31302e303031302c20524f4d204b422e31362e30312e3030303620282f77732f73776275696c646d2f72656c5f616a616e74615f71616f66662f636f64652f6275696c642f626f6d2873776275696c646d5f72656c5f616a616e74615f71616f66665f72656c5f616a616e74612929
    1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.11.2.3.7.11.160
    1.3.6.1.2.1.1.3.0|67|7803216
    1.3.6.1.2.1.1.4.0|4x|41434d45
    1.3.6.1.2.1.1.5.0|4x|536572766572
    1.3.6.1.2.1.1.6.0|4x|656d707479
    1.3.6.1.2.1.1.7.0|2|74
    1.3.6.1.2.1.47.1.1.1.1.7.1|4|Chassis
    1.3.6.1.2.1.47.1.1.1.1.7.2|4|Backplane
    1.3.6.1.2.1.47.1.1.1.1.7.3|4x|46616e2054726179
    1.3.6.1.2.1.47.1.1.1.1.7.4|4x|54656d70657261747572652073656e736f722070736575646f636f6e7461696e6572
    1.3.6.1.2.1.47.1.1.1.1.7.5|4x|506f77657220737570706c79206261792070736575646f636f6e7461696e6572
    1.3.6.1.2.1.47.1.1.1.1.7.6|4x|4d616e6167656d656e74206d6f64756c652070736575646f636f6e7461696e6572
    1.3.6.1.2.1.47.1.1.1.1.7.9|4x|496e74657266616365206d6f64756c652070736575646f636f6e7461696e6572
    1.3.6.1.2.1.47.1.1.1.1.7.11|4x|46616e2031
    1.3.6.1.2.1.47.1.1.1.1.7.12|4x|46616e2032
    1.3.6.1.2.1.47.1.1.1.1.7.13|4x|46616e2033
    1.3.6.1.2.1.47.1.1.1.1.7.14|4x|46616e2034
    1.3.6.1.2.1.47.1.1.1.1.7.15|4x|46616e2035
    1.3.6.1.2.1.47.1.1.1.1.7.16|4x|46616e2036
    1.3.6.1.2.1.47.1.1.1.1.7.25|4x|436861737369732054656d7065726174757265
    1.3.6.1.2.1.47.1.1.1.1.7.26|4x|506f77657220537570706c79204261792031
    1.3.6.1.2.1.47.1.1.1.1.7.27|4x|506f77657220537570706c79204261792032
    1.3.6.1.2.1.47.1.1.1.1.7.30|4x|506f77657220537570706c792031
    1.3.6.1.2.1.47.1.1.1.1.7.34|4x|537769746368204d616e6167656d656e74204d6f64756c6520536c6f74
    1.3.6.1.2.1.47.1.1.1.1.7.35|4x|537769746368204d616e6167656d656e74204d6f64756c6520536c6f74
    1.3.6.1.2.1.47.1.1.1.1.7.39|4x|536c6f742041
    1.3.6.1.2.1.47.1.1.1.1.7.40|4x|536c6f742042
    1.3.6.1.2.1.47.1.1.1.1.7.41|4x|536c6f742043
    1.3.6.1.2.1.47.1.1.1.1.7.42|4x|536c6f742044
    1.3.6.1.2.1.47.1.1.1.1.7.43|4x|536c6f742045
    1.3.6.1.2.1.47.1.1.1.1.7.44|4x|536c6f742046
    1.3.6.1.2.1.47.1.1.1.1.7.69|4x|537769746368204d616e6167656d656e74204d6f64756c65
    1.3.6.1.2.1.47.1.1.1.1.7.74|4|A
    1.3.6.1.2.1.47.1.1.1.1.7.75|4|B
    1.3.6.1.2.1.47.1.1.1.1.7.76|4|C
    1.3.6.1.2.1.47.1.1.1.1.7.77|4|D
    1.3.6.1.2.1.47.1.1.1.1.7.78|4|E
    1.3.6.1.2.1.47.1.1.1.1.7.79|4|F
    1.3.6.1.2.1.47.1.1.1.1.7.104|4x|506f7274204131
    1.3.6.1.2.1.47.1.1.1.1.7.105|4x|506f7274204132
    1.3.6.1.2.1.47.1.1.1.1.7.106|4x|506f7274204133
    1.3.6.1.2.1.47.1.1.1.1.7.107|4x|506f7274204134
    1.3.6.1.2.1.47.1.1.1.1.7.108|4x|506f7274204135
    1.3.6.1.2.1.47.1.1.1.1.7.109|4x|506f7274204136
    1.3.6.1.2.1.47.1.1.1.1.7.110|4x|506f7274204137
    1.3.6.1.2.1.47.1.1.1.1.7.111|4x|506f7274204138
    1.3.6.1.2.1.47.1.1.1.1.7.112|4x|506f7274204139
    1.3.6.1.2.1.47.1.1.1.1.7.113|4x|506f727420413130
    1.3.6.1.2.1.47.1.1.1.1.7.114|4x|506f727420413131
    1.3.6.1.2.1.47.1.1.1.1.7.115|4x|506f727420413132
    1.3.6.1.2.1.47.1.1.1.1.7.116|4x|506f727420413133
    1.3.6.1.2.1.47.1.1.1.1.7.117|4x|506f727420413134
    1.3.6.1.2.1.47.1.1.1.1.7.118|4x|506f727420413135
    1.3.6.1.2.1.47.1.1.1.1.7.119|4x|506f727420413136
    1.3.6.1.2.1.47.1.1.1.1.7.120|4x|506f727420413137
    1.3.6.1.2.1.47.1.1.1.1.7.121|4x|506f727420413138
    1.3.6.1.2.1.47.1.1.1.1.7.122|4x|506f727420413139
    1.3.6.1.2.1.47.1.1.1.1.7.123|4x|506f727420413230
    1.3.6.1.2.1.47.1.1.1.1.7.124|4x|506f727420413231
    1.3.6.1.2.1.47.1.1.1.1.7.125|4x|506f727420413232
    1.3.6.1.2.1.47.1.1.1.1.7.136|4x|506f7274204231
    1.3.6.1.2.1.47.1.1.1.1.7.137|4x|506f7274204232
    1.3.6.1.2.1.47.1.1.1.1.7.138|4x|506f7274204233
    1.3.6.1.2.1.47.1.1.1.1.7.139|4x|506f7274204234
    1.3.6.1.2.1.47.1.1.1.1.7.140|4x|506f7274204235
    1.3.6.1.2.1.47.1.1.1.1.7.141|4x|506f7274204236
    1.3.6.1.2.1.47.1.1.1.1.7.142|4x|506f7274204237
    1.3.6.1.2.1.47.1.1.1.1.7.143|4x|506f7274204238
    1.3.6.1.2.1.47.1.1.1.1.7.144|4x|506f7274204239
    1.3.6.1.2.1.47.1.1.1.1.7.145|4x|506f727420423130
    1.3.6.1.2.1.47.1.1.1.1.7.146|4x|506f727420423131
    1.3.6.1.2.1.47.1.1.1.1.7.147|4x|506f727420423132
    1.3.6.1.2.1.47.1.1.1.1.7.148|4x|506f727420423133
    1.3.6.1.2.1.47.1.1.1.1.7.149|4x|506f727420423134
    1.3.6.1.2.1.47.1.1.1.1.7.150|4x|506f727420423135
    1.3.6.1.2.1.47.1.1.1.1.7.151|4x|506f727420423136
    1.3.6.1.2.1.47.1.1.1.1.7.152|4x|506f727420423137
    1.3.6.1.2.1.47.1.1.1.1.7.153|4x|506f727420423138
    1.3.6.1.2.1.47.1.1.1.1.7.154|4x|506f727420423139
    1.3.6.1.2.1.47.1.1.1.1.7.155|4x|506f727420423230
    1.3.6.1.2.1.47.1.1.1.1.7.156|4x|506f727420423231
    1.3.6.1.2.1.47.1.1.1.1.7.157|4x|506f727420423232
    1.3.6.1.2.1.47.1.1.1.1.7.168|4x|506f7274204331
    1.3.6.1.2.1.47.1.1.1.1.7.169|4x|506f7274204332
    1.3.6.1.2.1.47.1.1.1.1.7.170|4x|506f7274204333
    1.3.6.1.2.1.47.1.1.1.1.7.171|4x|506f7274204334
    1.3.6.1.2.1.47.1.1.1.1.7.172|4x|506f7274204335
    1.3.6.1.2.1.47.1.1.1.1.7.173|4x|506f7274204336
    1.3.6.1.2.1.47.1.1.1.1.7.174|4x|506f7274204337
    1.3.6.1.2.1.47.1.1.1.1.7.175|4x|506f7274204338
    1.3.6.1.2.1.47.1.1.1.1.7.176|4x|506f7274204339
    1.3.6.1.2.1.47.1.1.1.1.7.177|4x|506f727420433130
    1.3.6.1.2.1.47.1.1.1.1.7.178|4x|506f727420433131
    1.3.6.1.2.1.47.1.1.1.1.7.179|4x|506f727420433132
    1.3.6.1.2.1.47.1.1.1.1.7.180|4x|506f727420433133
    1.3.6.1.2.1.47.1.1.1.1.7.181|4x|506f727420433134
    1.3.6.1.2.1.47.1.1.1.1.7.182|4x|506f727420433135
    1.3.6.1.2.1.47.1.1.1.1.7.183|4x|506f727420433136
    1.3.6.1.2.1.47.1.1.1.1.7.184|4x|506f727420433137
    1.3.6.1.2.1.47.1.1.1.1.7.185|4x|506f727420433138
    1.3.6.1.2.1.47.1.1.1.1.7.186|4x|506f727420433139
    1.3.6.1.2.1.47.1.1.1.1.7.187|4x|506f727420433230
    1.3.6.1.2.1.47.1.1.1.1.7.188|4x|506f727420433231
    1.3.6.1.2.1.47.1.1.1.1.7.189|4x|506f727420433232
    1.3.6.1.2.1.47.1.1.1.1.7.190|4x|506f727420433233
    1.3.6.1.2.1.47.1.1.1.1.7.191|4x|506f727420433234
    1.3.6.1.2.1.47.1.1.1.1.7.200|4x|506f7274204431
    1.3.6.1.2.1.47.1.1.1.1.7.201|4x|506f7274204432
    1.3.6.1.2.1.47.1.1.1.1.7.202|4x|506f7274204433
    1.3.6.1.2.1.47.1.1.1.1.7.203|4x|506f7274204434
    1.3.6.1.2.1.47.1.1.1.1.7.204|4x|506f7274204435
    1.3.6.1.2.1.47.1.1.1.1.7.205|4x|506f7274204436
    1.3.6.1.2.1.47.1.1.1.1.7.206|4x|506f7274204437
    1.3.6.1.2.1.47.1.1.1.1.7.207|4x|506f7274204438
    1.3.6.1.2.1.47.1.1.1.1.7.208|4x|506f7274204439
    1.3.6.1.2.1.47.1.1.1.1.7.209|4x|506f727420443130
    1.3.6.1.2.1.47.1.1.1.1.7.210|4x|506f727420443131
    1.3.6.1.2.1.47.1.1.1.1.7.211|4x|506f727420443132
    1.3.6.1.2.1.47.1.1.1.1.7.212|4x|506f727420443133
    1.3.6.1.2.1.47.1.1.1.1.7.213|4x|506f727420443134
    1.3.6.1.2.1.47.1.1.1.1.7.214|4x|506f727420443135
    1.3.6.1.2.1.47.1.1.1.1.7.215|4x|506f727420443136
    1.3.6.1.2.1.47.1.1.1.1.7.216|4x|506f727420443137
    1.3.6.1.2.1.47.1.1.1.1.7.217|4x|506f727420443138
    1.3.6.1.2.1.47.1.1.1.1.7.218|4x|506f727420443139
    1.3.6.1.2.1.47.1.1.1.1.7.219|4x|506f727420443230
    1.3.6.1.2.1.47.1.1.1.1.7.220|4x|506f727420443231
    1.3.6.1.2.1.47.1.1.1.1.7.221|4x|506f727420443232
    1.3.6.1.2.1.47.1.1.1.1.7.222|4x|506f727420443233
    1.3.6.1.2.1.47.1.1.1.1.7.223|4x|506f727420443234
    1.3.6.1.2.1.47.1.1.1.1.7.232|4x|506f7274204531
    1.3.6.1.2.1.47.1.1.1.1.7.233|4x|506f7274204532
    1.3.6.1.2.1.47.1.1.1.1.7.234|4x|506f7274204533
    1.3.6.1.2.1.47.1.1.1.1.7.235|4x|506f7274204534
    1.3.6.1.2.1.47.1.1.1.1.7.236|4x|506f7274204535
    1.3.6.1.2.1.47.1.1.1.1.7.237|4x|506f7274204536
    1.3.6.1.2.1.47.1.1.1.1.7.238|4x|506f7274204537
    1.3.6.1.2.1.47.1.1.1.1.7.239|4x|506f7274204538
    1.3.6.1.2.1.47.1.1.1.1.7.264|4x|506f7274204631
    1.3.6.1.2.1.47.1.1.1.1.7.265|4x|506f7274204632
    1.3.6.1.2.1.47.1.1.1.1.7.266|4x|506f7274204633
    1.3.6.1.2.1.47.1.1.1.1.7.267|4x|506f7274204634
    1.3.6.1.2.1.47.1.1.1.1.7.268|4x|506f7274204635
    1.3.6.1.2.1.47.1.1.1.1.7.269|4x|506f7274204636
    1.3.6.1.2.1.47.1.1.1.1.7.270|4x|506f7274204637
    1.3.6.1.2.1.47.1.1.1.1.7.271|4x|506f7274204638
    1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.5.1|2|687427584
    1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7.1|2|189125984
    1.3.6.1.4.1.11.2.14.11.5.1.9.6.1.0|2|69
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.2.1|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.2.2|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.2.3|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.2.4|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.2.5|2|1
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.2.6|2|2
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.3.1|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.3.2|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.3.3|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.3.4|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.3.5|2|4
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.3.6|2|4
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4.1|2|5
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4.2|2|5
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4.3|2|5
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4.4|2|5
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4.5|2|5
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4.6|2|2
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.5.1|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.5.2|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.5.3|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.5.4|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.5.5|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.5.6|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.6.1|65|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.6.2|65|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.6.3|65|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.6.4|65|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.6.5|65|0
    1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.6.6|65|0
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.2.1|2|5
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.2.2|2|1
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.3.1|65|0
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.3.2|65|0
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.4.1|2|29
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.4.2|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.5.1|4x|414320313230562f32343056
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.5.2|4x|2d2d202d2d2d2d2d2d2d2d2d
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.6.1|2|190
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.6.2|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.7.1|2|700
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.7.2|2|0
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.8.1|65|82308
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.8.2|65|0
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.9.1|4|J9828A
    1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.9.2|4|
    1.3.6.1.4.1.11.2.36.1.1.5.1.1.3.1|2|3
    

    And a interpretation of the variables from a MIB:

    hpHttpMgDeviceHealth OBJECT-TYPE
        SYNTAX INTEGER {
               unknown        (1),
               unused         (2),
               ok             (3), -- available for meaningful work
               warning        (4), -- something needs attention
               critical       (5), -- something has failed
               nonrecoverable (6)
        }
        MAX-ACCESS read-only
        STATUS current
        DESCRIPTION
            "Overall health of the device. The goal of this object
             is to be the single poll point to check the status of the
             device."
        ::= { hpHttpMgDeviceEntry 3 }
    
    HpicfDcFanState ::= TEXTUAL-CONVENTION
        STATUS         current
        DESCRIPTION   "An enumerated value which provides an indication of the
                      fan state."
        SYNTAX        INTEGER  {
           failed(0),
           removed(1),
           off(2),
           underspeed(3),
           overspeed(4),
           ok(5),
           maxstate(6)
        }
    
    HpicfDcPsState ::= TEXTUAL-CONVENTION
        STATUS        current
        DESCRIPTION   "An enumerated value which provides the state of the
                      switch power supply entity."
        SYNTAX        INTEGER  {
           psNotPresent(1),
           psNotPlugged(2),
           psPowered(3),
           psFailed(4),
           psPermFailure(5),
           psMax(6),
           psAuxFailure(7),
           psNotPowered(8),
           psAuxNotPowered(9)
        }
    

    Best regards, Sebastian Grallert

  • Support for HP ProCurve HP J9728A 2920-48G

    Support for HP ProCurve HP J9728A 2920-48G

    Hi there, great work so far. From the docs i can't make out how to integrate for instance an HP J9728A 2920-48G switch model. I assume that no definition exists for this model, but i'm not sure about that either. When trying to identify the switch i just get:

    thola identify IP Device: Class: generic

    Where can i define the folder where the YAML files are situated? And if HP Procurves are not supported yet, what ist the best way to add them and to extend thola?

  • Build fails

    Build fails

    I try to build thola. After git clone https://github.com/inexio/thola.git and cd thola i got an error:

    > go build
    build github.com/inexio/thola: cannot find module for path embed
    
  • Levels of loglevel

    Levels of loglevel

    Hi! i am trying to write my own class. Is it possible to change the loglevel to read the received value? In tshark I see the snmp response, but thola can't do anything with it. Currently I use loglevel=trace

  • Support for temperature sensors

    Support for temperature sensors

    I would like to read the reading of temperature sensors with Thola. Many devices support specific OIDs for temperature sensors. Alas the correspondig component ist missing in Thola.

  • Add parameter for non-standard SNMP-port

    Add parameter for non-standard SNMP-port

    THX for releasing this tool!

    We have a tool, that "speaks" SNMP-protocol on a different port to not interfere with standard SNMP-daemon on the same machine. It would be great to query and monitor this tool via thola.

    Please add a flag for non-standard SNMP port (<> 161).

  • Warning and critical values should be included in perfdata string

    Warning and critical values should be included in perfdata string

    Currently, perfdata strings do not contain the warning and critical value - e.g. on CPU or Memory Usage checks:

    ./thola --ip 1.2.3.4 --snmp-community public check memory-usage --critical 50
    CRITICAL: memory usage is 55% | 'memory_usage'=55%;;;;
    

    To meet the monitoring plugins development guidelines, perfdata strings should be formatted like below:

    label=value[uom];[warn];[crit];[min];[max]
    
  • Invalid character error thrown in check interface-metrics on Cisco ASA

    Invalid character error thrown in check interface-metrics on Cisco ASA

    Hey all! I'm trying to get the interface metrics on my Cisco ASA and it keeps throwing this error:

    UNKNOWN: error while adding performance data (error: failed to add performance data point: given performance data point is not valid: metric contains invalid character)

    I don't know if it helps, but read interfaces doesn't have the same problem.

    Thanks!

  • Bump github.com/labstack/echo/v4 from 4.6.1 to 4.9.0

    Bump github.com/labstack/echo/v4 from 4.6.1 to 4.9.0

    Bumps github.com/labstack/echo/v4 from 4.6.1 to 4.9.0.

    Release notes

    Sourced from github.com/labstack/echo/v4's releases.

    v4.9.0

    Security

    • Fix open redirect vulnerability in handlers serving static directories (e.Static, e.StaticFs, echo.StaticDirectoryHandler) #2260

    Enhancements

    • Allow configuring ErrorHandler in CSRF middleware #2257
    • Replace HTTP method constants in tests with stdlib constants #2247

    v4.8.0

    Most notable things

    You can now add any arbitrary HTTP method type as a route #2237

    e.Add("COPY", "/*", func(c echo.Context) error 
      return c.String(http.StatusOK, "OK COPY")
    })
    

    You can add custom 404 handler for specific paths #2217

    e.RouteNotFound("/*", func(c echo.Context) error { return c.NoContent(http.StatusNotFound) })
    

    g := e.Group("/images") g.RouteNotFound("/*", func(c echo.Context) error { return c.NoContent(http.StatusNotFound) })

    Enhancements

    • Add new value binding methods (UnixTimeMilli,TextUnmarshaler,JSONUnmarshaler) to Valuebinder #2127
    • Refactor: body_limit middleware unit test #2145
    • Refactor: Timeout mw: rework how test waits for timeout. #2187
    • BasicAuth middleware returns 500 InternalServerError on invalid base64 strings but should return 400 #2191
    • Refactor: duplicated findStaticChild process at findChildWithLabel #2176
    • Allow different param names in different methods with same path scheme #2209
    • Add support for registering handlers for different 404 routes #2217
    • Middlewares should use errors.As() instead of type assertion on HTTPError #2227
    • Allow arbitrary HTTP method types to be added as routes #2237

    v4.7.2

    Fixes

    • Fix nil pointer exception when calling Start again after address binding error #2131
    • Fix CSRF middleware not being able to extract token from multipart/form-data form #2136
    • Fix Timeout middleware write race #2126

    Enhancements

    ... (truncated)

    Changelog

    Sourced from github.com/labstack/echo/v4's changelog.

    v4.9.0 - 2022-09-04

    Security

    • Fix open redirect vulnerability in handlers serving static directories (e.Static, e.StaticFs, echo.StaticDirectoryHandler) #2260

    Enhancements

    • Allow configuring ErrorHandler in CSRF middleware #2257
    • Replace HTTP method constants in tests with stdlib constants #2247

    v4.8.0 - 2022-08-10

    Most notable things

    You can now add any arbitrary HTTP method type as a route #2237

    e.Add("COPY", "/*", func(c echo.Context) error 
      return c.String(http.StatusOK, "OK COPY")
    })
    

    You can add custom 404 handler for specific paths #2217

    e.RouteNotFound("/*", func(c echo.Context) error { return c.NoContent(http.StatusNotFound) })
    

    g := e.Group("/images") g.RouteNotFound("/*", func(c echo.Context) error { return c.NoContent(http.StatusNotFound) })

    Enhancements

    • Add new value binding methods (UnixTimeMilli,TextUnmarshaler,JSONUnmarshaler) to Valuebinder #2127
    • Refactor: body_limit middleware unit test #2145
    • Refactor: Timeout mw: rework how test waits for timeout. #2187
    • BasicAuth middleware returns 500 InternalServerError on invalid base64 strings but should return 400 #2191
    • Refactor: duplicated findStaticChild process at findChildWithLabel #2176
    • Allow different param names in different methods with same path scheme #2209
    • Add support for registering handlers for different 404 routes #2217
    • Middlewares should use errors.As() instead of type assertion on HTTPError #2227
    • Allow arbitrary HTTP method types to be added as routes #2237

    v4.7.2 - 2022-03-16

    Fixes

    • Fix nil pointer exception when calling Start again after address binding error #2131
    • Fix CSRF middleware not being able to extract token from multipart/form-data form #2136
    • Fix Timeout middleware write race #2126

    ... (truncated)

    Commits
    • 16d3b65 Changelog for 4.9.0
    • 0ac4d74 Fix #2259 open redirect vulnerability in echo.StaticDirectoryHandler (used by...
    • d77e8c0 Added ErrorHandler and ErrorHandlerWithContext in CSRF middleware (#2257)
    • 534bbb8 replace POST constance with stdlib constance
    • fb57d96 replace GET constance with stdlib constance
    • d48197d Changelog for 4.8.0
    • cba12a5 Allow arbitrary HTTP method types to be added as routes
    • a327884 add:README.md-Third-party middlewares-github.com/go-woo/protoc-gen-echo
    • 61422dd Update CI-flow (Go 1.19 +deps)
    • a9879ff Middlewares should use errors.As() instead of type assertion on HTTPError
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

scrapligo -- is a Go library focused on connecting to devices, specifically network devices (routers/switches/firewalls/etc.) via SSH and NETCONF.
scrapligo -- is a Go library focused on connecting to devices, specifically network devices (routers/switches/firewalls/etc.) via SSH and NETCONF.

scrapligo -- scrap(e c)li (but in go!) -- is a Go library focused on connecting to devices, specifically network devices (routers/switches/firewalls/etc.) via SSH and NETCONF.

Jan 4, 2023
An SNMP library written in GoLang.

gosnmp GoSNMP is an SNMP client library fully written in Go. It provides Get, GetNext, GetBulk, Walk, BulkWalk, Set and Traps. It supports IPv4 and IP

Jan 7, 2023
GoSNMP is an SNMP client library fully written in Go

GoSNMP is an SNMP client library fully written in Go. It provides Get, GetNext, GetBulk, Walk, BulkWalk, Set and Traps. It supports IPv4 and IPv6, using SNMPv1, SNMPv2c or SNMPv3. Builds are tested against linux/amd64 and linux/386.

Jan 5, 2023
GoSNMP is an SNMP client library fully written in Go.

GoSNMP is an SNMP client library fully written in Go. It provides Get, GetNext, GetBulk, Walk, BulkWalk, Set and Traps. It supports IPv4 and IPv6, using SNMPv1, SNMPv2c or SNMPv3. Builds are tested against linux/amd64 and linux/386.

Oct 28, 2021
Prometheus exporter for counting connected devices to a network using nmap

nmapprom Prometheus exporter for counting the hosts connected to a network using nmap · Report Bug · Request Feature Table of Contents About The Proje

Oct 17, 2021
IRC bot for launch ddos attack, Mainly of scan target are IoT device that run linux and open default SSH port
IRC bot for launch ddos attack, Mainly of scan target are IoT device that run linux and open default SSH port

IRC bot for launch ddos attack, Mainly of scan target are IoT device that run linux and open default SSH port

Nov 10, 2021
CSI driver NVMf mainly supports RDMA and TCP for Software Defined Storage by NVMf

CSI NVMf driver Overview This is a repository for NVMe-oF CSI Driver. Currently it implements bare minimum of th CSI spec. Requirements The CSI NVMf d

Nov 30, 2022
Collection of useful golang code snippets, mainly for learning purposes

Go-Things Collection of go code snippets, tools, etc. mainly for learning purpos

Dec 31, 2021
Nomad plugin for reserving device mappings used by ebs devices.

Nomad Skeleton Device Plugin Skeleton project for Nomad device plugins. This project is intended for bootstrapping development of a new device plugin.

Jan 5, 2022
Connect your devices into a single private WireGuard®-based mesh network.

Wiretrustee A WireGuard®-based mesh network that connects your devices into a single private network. Why using Wiretrustee? Connect multiple devices

Dec 31, 2022
Jazigo is a tool written in Go for retrieving configuration for multiple devices, similar to rancid, fetchconfig, oxidized, Sweet.

Table of Contents About Jazigo Supported Platforms Features Requirements Quick Start - Short version Quick Start - Detailed version Global Settings Im

Jan 5, 2023
mdmb is a tool for simulating Apple devices interacting with Apple MDM servers.

mdmb mdmb — short for MDM Benchmark, à la ab — is a tool for simulating Apple devices interacting with Apple MDM servers. mdmb creates sets of fake Ap

Dec 1, 2022
This is a tool that allows you to check minecraft names availability, this tool can do around 3000~ names a minute or more!

Checker This is a tool that allows you to check minecraft names availability, this tool can do around 3000~ names a minute or more! Tutorial To instal

Feb 13, 2022
Schema-free, document-oriented streaming database that optimized for monitoring network traffic in real-time

Basenine Schema-free, document-oriented streaming database that optimized for monitoring network traffic in real-time. Featured Aspects Has the fastes

Nov 2, 2022
The plugin serves as a starting point for writing a Mattermost plugin

Plugin Starter Template This plugin serves as a starting point for writing a Mattermost plugin. Feel free to base your own plugin off this repository.

Dec 10, 2021
Feb 10, 2022
Cf-cli-find-app-plugin - CF CLI plugin to find applications containing a search string

Overview This cf cli plugin allows users to search for application names that co

Jan 3, 2022
Twitter-plugin - Falco Plugin for Twitter Stream

Twitter Plugin This repository contains the twittter plugin for Falco, which fol

Mar 17, 2022
communicate with iOS devices implemented with Golang

Golang-iDevice much more easy to use ?? electricbubble/gidevice-cli Installation go get github.com/electricbubble/gidevice Devices package main impor

Dec 18, 2022