@@ -4,11 +4,13 @@ import (
4
4
"errors"
5
5
"fmt"
6
6
"net/http"
7
- "net/url"
8
7
"os"
9
8
"strconv"
9
+ "strings"
10
10
"time"
11
11
12
+ "github.com/observeinc/observe-agent/internal/commands/util"
13
+ "github.com/observeinc/observe-agent/internal/config"
12
14
io_prometheus_client "github.com/prometheus/client_model/go"
13
15
"github.com/prometheus/common/expfmt"
14
16
"github.com/shirou/gopsutil/v3/host"
@@ -71,15 +73,15 @@ func bToMb(b float32) float32 {
71
73
}
72
74
73
75
func GetAgentStatusFromHealthcheck (baseURL string , path string ) (AgentStatus , error ) {
76
+ baseURL = util .ReplaceEnvString (baseURL )
77
+ path = util .ReplaceEnvString (path )
74
78
if len (path ) == 0 || len (baseURL ) == 0 {
75
79
return NotRunning , errors .New ("health_check endpoint and path must be provided" )
76
80
}
77
- if baseURL [len (baseURL )- 1 ] == '/' {
78
- baseURL = baseURL [:len (baseURL )- 1 ]
79
- }
80
- URL , err := url .JoinPath (baseURL , path )
81
- if err != nil {
82
- return NotRunning , err
81
+ URL := util .JoinUrl (baseURL , path )
82
+ // The healthcheck extension is always http
83
+ if ! strings .Contains (URL , "://" ) {
84
+ URL = "http://" + URL
83
85
}
84
86
85
87
c := & http.Client {}
@@ -106,17 +108,22 @@ func getMetricsSum(metrics []*io_prometheus_client.Metric) float64 {
106
108
return sum
107
109
}
108
110
111
+ func GetAgentMetrics (conf * config.AgentConfig ) (* AgentMetrics , error ) {
112
+ host := util .ReplaceEnvString (conf .InternalTelemetry .Host )
113
+ if ! strings .Contains (host , "://" ) {
114
+ host = "http://" + host
115
+ }
116
+ host = strings .TrimRight (host , ":/" )
117
+ port := conf .InternalTelemetry .Port
118
+ baseURL := fmt .Sprintf ("%s:%d" , host , port )
119
+ return GetAgentMetricsFromEndpoint (baseURL )
120
+ }
121
+
109
122
func GetAgentMetricsFromEndpoint (baseURL string ) (* AgentMetrics , error ) {
110
123
if len (baseURL ) == 0 {
111
124
return nil , errors .New ("metrics endpoint must be provided" )
112
125
}
113
- if baseURL [len (baseURL )- 1 ] == '/' {
114
- baseURL = baseURL [:len (baseURL )- 1 ]
115
- }
116
- URL , err := url .JoinPath (baseURL , "/metrics" )
117
- if err != nil {
118
- return nil , err
119
- }
126
+ URL := util .JoinUrl (baseURL , "/metrics" )
120
127
c := & http.Client {}
121
128
req , err := http .NewRequest ("GET" , URL , nil )
122
129
if err != nil {
@@ -140,53 +147,53 @@ func GetAgentMetricsFromEndpoint(baseURL string) (*AgentMetrics, error) {
140
147
if v .Type .String () == io_prometheus_client .MetricType_HISTOGRAM .String () {
141
148
met := v .Metric [0 ]
142
149
switch name := * v .Name ; name {
143
- case "otelcol_http_client_duration " :
150
+ case "http_client_duration_milliseconds " :
144
151
agentMets .AvgServerResponseTime = float32 (met .Histogram .GetSampleSum ()) / float32 (met .Histogram .GetSampleCount ())
145
- case "otelcol_http_server_duration " :
152
+ case "http_server_duration_milliseconds " :
146
153
agentMets .AvgClientResponseTime = float32 (met .Histogram .GetSampleSum ()) / float32 (met .Histogram .GetSampleCount ())
147
154
default :
148
155
}
149
156
} else {
150
157
met := v .Metric [0 ]
151
158
switch name := * v .Name ; name {
152
159
// Log-related metrics
153
- case "otelcol_receiver_accepted_log_records " :
160
+ case "otelcol_receiver_accepted_log_records_total " :
154
161
agentMets .LogsStats .ReceiverAcceptedCount = int (getMetricsSum (v .Metric ))
155
- case "otelcol_receiver_refused_log_records " :
162
+ case "otelcol_receiver_refused_log_records_total " :
156
163
agentMets .LogsStats .ReceiverRefusedCount = int (getMetricsSum (v .Metric ))
157
- case "otelcol_exporter_sent_log_records " :
164
+ case "otelcol_exporter_sent_log_records_total " :
158
165
agentMets .LogsStats .ExporterSentCount = int (getMetricsSum (v .Metric ))
159
- case "otelcol_exporter_send_failed_log_records " :
166
+ case "otelcol_exporter_send_failed_log_records_total " :
160
167
agentMets .LogsStats .ExporterSendFailedCount = int (getMetricsSum (v .Metric ))
161
168
162
169
// Metric-related metrics
163
- case "otelcol_receiver_accepted_metric_points " :
170
+ case "otelcol_receiver_accepted_metric_points_total " :
164
171
agentMets .MetricsStats .ReceiverAcceptedCount = int (getMetricsSum (v .Metric ))
165
- case "otelcol_receiver_refused_metric_points " :
172
+ case "otelcol_receiver_refused_metric_points_total " :
166
173
agentMets .MetricsStats .ReceiverRefusedCount = int (getMetricsSum (v .Metric ))
167
- case "otelcol_exporter_sent_metric_points " :
174
+ case "otelcol_exporter_sent_metric_points_total " :
168
175
agentMets .MetricsStats .ExporterSentCount = int (getMetricsSum (v .Metric ))
169
- case "otelcol_exporter_send_failed_metric_points " :
176
+ case "otelcol_exporter_send_failed_metric_points_total " :
170
177
agentMets .MetricsStats .ExporterSendFailedCount = int (getMetricsSum (v .Metric ))
171
178
172
179
// Trace-related metrics
173
- case "otelcol_receiver_accepted_spans " :
180
+ case "otelcol_receiver_accepted_spans_total " :
174
181
agentMets .TracesStats .ReceiverAcceptedCount = int (getMetricsSum (v .Metric ))
175
- case "otelcol_receiver_refused_spans " :
182
+ case "otelcol_receiver_refused_spans_total " :
176
183
agentMets .TracesStats .ReceiverRefusedCount = int (getMetricsSum (v .Metric ))
177
- case "otelcol_exporter_sent_spans " :
184
+ case "otelcol_exporter_sent_spans_total " :
178
185
agentMets .TracesStats .ExporterSentCount = int (getMetricsSum (v .Metric ))
179
- case "otelcol_exporter_send_failed_spans " :
186
+ case "otelcol_exporter_send_failed_spans_total " :
180
187
agentMets .TracesStats .ExporterSendFailedCount = int (getMetricsSum (v .Metric ))
181
188
182
189
// General metrics
183
190
case "otelcol_exporter_queue_size" :
184
191
agentMets .ExporterQueueSize = float32 (met .Gauge .GetValue ())
185
- case "otelcol_process_cpu_seconds " :
192
+ case "otelcol_process_cpu_seconds_total " :
186
193
agentMets .CPUSeconds = float32 (getMetricsSum (v .Metric ))
187
- case "otelcol_process_uptime " :
194
+ case "otelcol_process_uptime_seconds_total " :
188
195
agentMets .Uptime = float32 (getMetricsSum (v .Metric ))
189
- case "otelcol_process_memory_rss " :
196
+ case "otelcol_process_memory_rss_bytes " :
190
197
agentMets .MemoryUsed = bToMb (float32 (met .Gauge .GetValue ()))
191
198
case "otelcol_process_runtime_total_sys_memory_bytes" :
192
199
agentMets .TotalSysMemory = bToMb (float32 (met .Gauge .GetValue ()))
@@ -197,8 +204,8 @@ func GetAgentMetricsFromEndpoint(baseURL string) (*AgentMetrics, error) {
197
204
return & agentMets , nil
198
205
}
199
206
200
- func GetStatusData (telemetryEndpoint string , healthcheckEndpoint string , healthcheckPath string ) (* StatusData , error ) {
201
- agentMets , err := GetAgentMetricsFromEndpoint ( telemetryEndpoint )
207
+ func GetStatusData (conf * config. AgentConfig ) (* StatusData , error ) {
208
+ agentMets , err := GetAgentMetrics ( conf )
202
209
if err != nil {
203
210
fmt .Fprintln (os .Stderr , "Error getting agent metrics: " , err )
204
211
agentMets = & AgentMetrics {}
@@ -216,7 +223,7 @@ func GetStatusData(telemetryEndpoint string, healthcheckEndpoint string, healthc
216
223
if err != nil {
217
224
uptime = time .Duration (0 )
218
225
}
219
- status , err := GetAgentStatusFromHealthcheck (healthcheckEndpoint , healthcheckPath )
226
+ status , err := GetAgentStatusFromHealthcheck (conf . HealthCheck . Endpoint , conf . HealthCheck . Path )
220
227
if err != nil {
221
228
fmt .Fprintln (os .Stderr , "Error receiving data from agent health check: " , err )
222
229
status = NotRunning
0 commit comments