@@ -46,6 +46,9 @@ type DataStream struct {
46
46
client * http.Client
47
47
url * url.URL
48
48
49
+ up prometheus.Gauge
50
+ totalScrapes , jsonParseFailures prometheus.Counter
51
+
49
52
dataStreamMetrics []* dataStreamMetric
50
53
}
51
54
@@ -56,6 +59,18 @@ func NewDataStream(logger log.Logger, client *http.Client, url *url.URL) *DataSt
56
59
client : client ,
57
60
url : url ,
58
61
62
+ up : prometheus .NewGauge (prometheus.GaugeOpts {
63
+ Name : prometheus .BuildFQName (namespace , "data_stream_stats" , "up" ),
64
+ Help : "Was the last scrape of the ElasticSearch Data Stream stats endpoint successful." ,
65
+ }),
66
+ totalScrapes : prometheus .NewCounter (prometheus.CounterOpts {
67
+ Name : prometheus .BuildFQName (namespace , "data_stream_stats" , "total_scrapes" ),
68
+ Help : "Current total ElasticSearch Data STream scrapes." ,
69
+ }),
70
+ jsonParseFailures : prometheus .NewCounter (prometheus.CounterOpts {
71
+ Name : prometheus .BuildFQName (namespace , "data_stream_stats" , "json_parse_failures" ),
72
+ Help : "Number of errors while parsing JSON." ,
73
+ }),
59
74
dataStreamMetrics : []* dataStreamMetric {
60
75
{
61
76
Type : prometheus .CounterValue ,
@@ -90,6 +105,10 @@ func (ds *DataStream) Describe(ch chan<- *prometheus.Desc) {
90
105
for _ , metric := range ds .dataStreamMetrics {
91
106
ch <- metric .Desc
92
107
}
108
+
109
+ ch <- ds .up .Desc ()
110
+ ch <- ds .totalScrapes .Desc ()
111
+ ch <- ds .jsonParseFailures .Desc ()
93
112
}
94
113
95
114
func (ds * DataStream ) fetchAndDecodeDataStreamStats () (DataStreamStatsResponse , error ) {
@@ -119,10 +138,12 @@ func (ds *DataStream) fetchAndDecodeDataStreamStats() (DataStreamStatsResponse,
119
138
120
139
bts , err := io .ReadAll (res .Body )
121
140
if err != nil {
141
+ ds .jsonParseFailures .Inc ()
122
142
return dsr , err
123
143
}
124
144
125
145
if err := json .Unmarshal (bts , & dsr ); err != nil {
146
+ ds .jsonParseFailures .Inc ()
126
147
return dsr , err
127
148
}
128
149
@@ -131,16 +152,25 @@ func (ds *DataStream) fetchAndDecodeDataStreamStats() (DataStreamStatsResponse,
131
152
132
153
// Collect gets DataStream metric values
133
154
func (ds * DataStream ) Collect (ch chan <- prometheus.Metric ) {
155
+ ds .totalScrapes .Inc ()
156
+ defer func () {
157
+ ch <- ds .up
158
+ ch <- ds .totalScrapes
159
+ ch <- ds .jsonParseFailures
160
+ }()
134
161
135
162
dataStreamStatsResp , err := ds .fetchAndDecodeDataStreamStats ()
136
163
if err != nil {
164
+ ds .up .Set (0 )
137
165
level .Warn (ds .logger ).Log (
138
166
"msg" , "failed to fetch and decode data stream stats" ,
139
167
"err" , err ,
140
168
)
141
169
return
142
170
}
143
171
172
+ ds .up .Set (1 )
173
+
144
174
for _ , metric := range ds .dataStreamMetrics {
145
175
for _ , dataStream := range dataStreamStatsResp .DataStreamStats {
146
176
fmt .Printf ("Metric: %+v" , dataStream )
0 commit comments