9
9
import io .opentelemetry .api .common .AttributeKey ;
10
10
import io .opentelemetry .api .common .Attributes ;
11
11
import io .opentelemetry .api .metrics .Meter ;
12
+ import java .util .ArrayList ;
13
+ import java .util .List ;
12
14
import oshi .SystemInfo ;
13
15
import oshi .hardware .GlobalMemory ;
14
16
import oshi .hardware .HWDiskStore ;
@@ -28,111 +30,121 @@ public class SystemMetrics {
28
30
private SystemMetrics () {}
29
31
30
32
/** Register observers for system metrics. */
31
- public static void registerObservers (OpenTelemetry openTelemetry ) {
33
+ public static List < AutoCloseable > registerObservers (OpenTelemetry openTelemetry ) {
32
34
Meter meter = openTelemetry .getMeterProvider ().get ("io.opentelemetry.oshi" );
33
35
SystemInfo systemInfo = new SystemInfo ();
34
36
HardwareAbstractionLayer hal = systemInfo .getHardware ();
37
+ List <AutoCloseable > observables = new ArrayList <>();
35
38
36
- meter
37
- .upDownCounterBuilder ("system.memory.usage" )
38
- .setDescription ("System memory usage" )
39
- .setUnit ("By" )
40
- .buildWithCallback (
41
- r -> {
42
- GlobalMemory mem = hal .getMemory ();
43
- r .record (mem .getTotal () - mem .getAvailable (), ATTRIBUTES_USED );
44
- r .record (mem .getAvailable (), ATTRIBUTES_FREE );
45
- });
39
+ observables .add (
40
+ meter
41
+ .upDownCounterBuilder ("system.memory.usage" )
42
+ .setDescription ("System memory usage" )
43
+ .setUnit ("By" )
44
+ .buildWithCallback (
45
+ r -> {
46
+ GlobalMemory mem = hal .getMemory ();
47
+ r .record (mem .getTotal () - mem .getAvailable (), ATTRIBUTES_USED );
48
+ r .record (mem .getAvailable (), ATTRIBUTES_FREE );
49
+ }));
46
50
47
- meter
48
- .gaugeBuilder ("system.memory.utilization" )
49
- .setDescription ("System memory utilization" )
50
- .setUnit ("1" )
51
- .buildWithCallback (
52
- r -> {
53
- GlobalMemory mem = hal .getMemory ();
54
- r .record (
55
- ((double ) (mem .getTotal () - mem .getAvailable ())) / mem .getTotal (),
56
- ATTRIBUTES_USED );
57
- r .record (((double ) mem .getAvailable ()) / mem .getTotal (), ATTRIBUTES_FREE );
58
- });
51
+ observables .add (
52
+ meter
53
+ .gaugeBuilder ("system.memory.utilization" )
54
+ .setDescription ("System memory utilization" )
55
+ .setUnit ("1" )
56
+ .buildWithCallback (
57
+ r -> {
58
+ GlobalMemory mem = hal .getMemory ();
59
+ r .record (
60
+ ((double ) (mem .getTotal () - mem .getAvailable ())) / mem .getTotal (),
61
+ ATTRIBUTES_USED );
62
+ r .record (((double ) mem .getAvailable ()) / mem .getTotal (), ATTRIBUTES_FREE );
63
+ }));
59
64
60
- meter
61
- .counterBuilder ("system.network.io" )
62
- .setDescription ("System network IO" )
63
- .setUnit ("By" )
64
- .buildWithCallback (
65
- r -> {
66
- for (NetworkIF networkIf : hal .getNetworkIFs ()) {
67
- networkIf .updateAttributes ();
68
- long recv = networkIf .getBytesRecv ();
69
- long sent = networkIf .getBytesSent ();
70
- String device = networkIf .getName ();
71
- r .record (recv , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "receive" ));
72
- r .record (sent , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "transmit" ));
73
- }
74
- });
65
+ observables .add (
66
+ meter
67
+ .counterBuilder ("system.network.io" )
68
+ .setDescription ("System network IO" )
69
+ .setUnit ("By" )
70
+ .buildWithCallback (
71
+ r -> {
72
+ for (NetworkIF networkIf : hal .getNetworkIFs ()) {
73
+ networkIf .updateAttributes ();
74
+ long recv = networkIf .getBytesRecv ();
75
+ long sent = networkIf .getBytesSent ();
76
+ String device = networkIf .getName ();
77
+ r .record (recv , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "receive" ));
78
+ r .record (sent , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "transmit" ));
79
+ }
80
+ }));
75
81
76
- meter
77
- .counterBuilder ("system.network.packets" )
78
- .setDescription ("System network packets" )
79
- .setUnit ("{packets}" )
80
- .buildWithCallback (
81
- r -> {
82
- for (NetworkIF networkIf : hal .getNetworkIFs ()) {
83
- networkIf .updateAttributes ();
84
- long recv = networkIf .getPacketsRecv ();
85
- long sent = networkIf .getPacketsSent ();
86
- String device = networkIf .getName ();
87
- r .record (recv , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "receive" ));
88
- r .record (sent , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "transmit" ));
89
- }
90
- });
82
+ observables .add (
83
+ meter
84
+ .counterBuilder ("system.network.packets" )
85
+ .setDescription ("System network packets" )
86
+ .setUnit ("{packets}" )
87
+ .buildWithCallback (
88
+ r -> {
89
+ for (NetworkIF networkIf : hal .getNetworkIFs ()) {
90
+ networkIf .updateAttributes ();
91
+ long recv = networkIf .getPacketsRecv ();
92
+ long sent = networkIf .getPacketsSent ();
93
+ String device = networkIf .getName ();
94
+ r .record (recv , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "receive" ));
95
+ r .record (sent , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "transmit" ));
96
+ }
97
+ }));
91
98
92
- meter
93
- .counterBuilder ("system.network.errors" )
94
- .setDescription ("System network errors" )
95
- .setUnit ("{errors}" )
96
- .buildWithCallback (
97
- r -> {
98
- for (NetworkIF networkIf : hal .getNetworkIFs ()) {
99
- networkIf .updateAttributes ();
100
- long recv = networkIf .getInErrors ();
101
- long sent = networkIf .getOutErrors ();
102
- String device = networkIf .getName ();
103
- r .record (recv , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "receive" ));
104
- r .record (sent , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "transmit" ));
105
- }
106
- });
99
+ observables .add (
100
+ meter
101
+ .counterBuilder ("system.network.errors" )
102
+ .setDescription ("System network errors" )
103
+ .setUnit ("{errors}" )
104
+ .buildWithCallback (
105
+ r -> {
106
+ for (NetworkIF networkIf : hal .getNetworkIFs ()) {
107
+ networkIf .updateAttributes ();
108
+ long recv = networkIf .getInErrors ();
109
+ long sent = networkIf .getOutErrors ();
110
+ String device = networkIf .getName ();
111
+ r .record (recv , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "receive" ));
112
+ r .record (sent , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "transmit" ));
113
+ }
114
+ }));
107
115
108
- meter
109
- .counterBuilder ("system.disk.io" )
110
- .setDescription ("System disk IO" )
111
- .setUnit ("By" )
112
- .buildWithCallback (
113
- r -> {
114
- for (HWDiskStore diskStore : hal .getDiskStores ()) {
115
- long read = diskStore .getReadBytes ();
116
- long write = diskStore .getWriteBytes ();
117
- String device = diskStore .getName ();
118
- r .record (read , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "read" ));
119
- r .record (write , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "write" ));
120
- }
121
- });
116
+ observables .add (
117
+ meter
118
+ .counterBuilder ("system.disk.io" )
119
+ .setDescription ("System disk IO" )
120
+ .setUnit ("By" )
121
+ .buildWithCallback (
122
+ r -> {
123
+ for (HWDiskStore diskStore : hal .getDiskStores ()) {
124
+ long read = diskStore .getReadBytes ();
125
+ long write = diskStore .getWriteBytes ();
126
+ String device = diskStore .getName ();
127
+ r .record (read , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "read" ));
128
+ r .record (write , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "write" ));
129
+ }
130
+ }));
122
131
123
- meter
124
- .counterBuilder ("system.disk.operations" )
125
- .setDescription ("System disk operations" )
126
- .setUnit ("{operations}" )
127
- .buildWithCallback (
128
- r -> {
129
- for (HWDiskStore diskStore : hal .getDiskStores ()) {
130
- long read = diskStore .getReads ();
131
- long write = diskStore .getWrites ();
132
- String device = diskStore .getName ();
133
- r .record (read , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "read" ));
134
- r .record (write , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "write" ));
135
- }
136
- });
132
+ observables .add (
133
+ meter
134
+ .counterBuilder ("system.disk.operations" )
135
+ .setDescription ("System disk operations" )
136
+ .setUnit ("{operations}" )
137
+ .buildWithCallback (
138
+ r -> {
139
+ for (HWDiskStore diskStore : hal .getDiskStores ()) {
140
+ long read = diskStore .getReads ();
141
+ long write = diskStore .getWrites ();
142
+ String device = diskStore .getName ();
143
+ r .record (read , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "read" ));
144
+ r .record (write , Attributes .of (DEVICE_KEY , device , DIRECTION_KEY , "write" ));
145
+ }
146
+ }));
147
+
148
+ return observables ;
137
149
}
138
150
}
0 commit comments