modbus_tcp
# modbus_tcp collector
modbus_tcp collector performs Modbus TCP requests to collect performance data.
Configuration¶
The common collector's configuration is:
| Parameter | Type | Default | Description | 
|---|---|---|---|
id | 
String | Collector's ID. Must be unique per agent instance. | |
type | 
String | Must be modbus_tcp | 
|
interval | 
Integer | agent.defaults.interval | 
Repetition interval in seconds | 
labels | 
Object | Additional collector-level labels | |
relabel | 
Array | Optional relabeling rules. See Relabeling Rules for details | 
The collector-specific configuration is:
| Parameter | Type | Default | Description | 
|---|---|---|---|
address | 
String | IP address of Modbus TCP server | |
port | 
Integer | 502 | Port of Modbus TCP server | 
timeout_ms | 
Integer | 5000 | Request timeout, ms. | 
defaults | 
Object | Items defaults | |
first_reference | 
Integer | 0 | Starting register. Adjusts items.register by this value. | 
items | 
Array | Metrics to collect as a list of items | |
name | 
String | Metric name, as to be exposed | |
help | 
String | Short help to be exposed along with metric | |
labels | 
Object | Metric labels | |
register | 
Integer | Starting register of modbus request, based on defaults.first_reference | 
|
register_type | 
String | holding | 
Modbus request type. Either holding, input or coil | 
format | 
String | Expected response format. See Response format for details | |
slave | 
Integer | 255 | Optional slave id, see note below. | 
Check address notation
Take note the starting register address is zero-based, while vendors
can document the registers starting from 1. Refer to the vendor documentation
and set defaults.first_reference to 1 when neccessary.
On Slave ID
Modbus TCP specification insists on using slave id of 255 for TCP connections. Meanwhile some implmenetations await broadcast id (0). Modbust TCP-to-RTU proxies also may expect explicit slave id to process the request.
Config Example:
- id: Modbus
  type: modbus_tcp
  address: 192.168.0.2
  port: 502
  items:
    - name: dc_temp
      help: Temperature in celsius
      labels:
        side: east
      register: 12
      format: f32_be
    - name: dc_temp
      help: Temperature in celsius
      labels:
        side: west
      register: 14
      format: f32_be
Response Format¶
Modbus' response is as an array of 16-bit integers. Actual data encoding
should be set as format parameter. Some encodings may require reading
2 or 4 adjacent registers.
| Format | Count | Description | 
|---|---|---|
i16_be | 
1 | 16-bit signed integer, big-endian. | 
u16_be | 
1 | 16-bit unsigned integer, big-endian. | 
i32_be | 
2 | 32-bit signed integer, big-endian | 
i32_le | 
2 | 32-bit signed integer, low-endian | 
i32_bs | 
2 | 32-bit signed integer, big-endian, swapped | 
i32_ls | 
2 | 32-bit signed integer, low-endian, swapped | 
u32_be | 
2 | 32-bit unsigned integer, big-endian | 
u32_le | 
2 | 32-bit unsigned integer, low-endian | 
u32_bs | 
2 | 32-bit unsigned integer, big-endian, swapped | 
u32_ls | 
2 | 32-bit unsigned integer, low-endian, swapped | 
f32_be | 
2 | 32-bit floating point, big-endian | 
f32_le | 
2 | 32-bit floating point, low-endian | 
f32_bs | 
2 | 32-bit floating point, big-endian, swapped | 
f32_ls | 
2 | 32-bit floating point, low-endian, swapped | 
The 32-bit integer 0x01020304 stored as a sequence of 4 octets. 4 different
approaches widely used between modbus devices:
| Format | 1 | 2 | 3 | 4 | 
|---|---|---|---|---|
| Big-endian (be) | 01 | 02 | 03 | 04 | 
| Low-endian (le) | 04 | 03 | 02 | 01 | 
| Big-endian, swapped (bs) | 02 | 01 | 04 | 03 | 
| Low-endian, swapped (ls) | 03 | 04 | 01 | 02 | 
Little-Endian Notice
There is some mess with 32-bit low-endian types. Some vendors
and tools call the low-endian swapped format merely as low-endian.
So try to change le suffix to ls if the result is really wierd.
Collected Metrics¶
modbus_tcp doesn't impose the specific format of the metrics. The generated
metrics are fully configurable.
Labels¶
Metric labels depends on configuration.