|
21 | 21 | with: |
22 | 22 | go-version-file: 'go.mod' |
23 | 23 |
|
24 | | - - name: Start Kafka 4.0 with KRaft |
| 24 | + - name: Start Kafka 4 with KRaft |
25 | 25 | run: | |
26 | 26 | docker run -d \ |
27 | 27 | --name broker \ |
|
38 | 38 | -e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 \ |
39 | 39 | -e KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS=0 \ |
40 | 40 | -e KAFKA_NUM_PARTITIONS=3 \ |
41 | | - apache/kafka:4.0.0 |
| 41 | + apache/kafka:4.1.0 |
42 | 42 |
|
43 | 43 | # Wait for Kafka to be ready |
44 | 44 | echo "Waiting for Kafka to start..." |
@@ -193,6 +193,87 @@ jobs: |
193 | 193 | echo " - Messages produced: $PRODUCED" |
194 | 194 | echo " - Messages received: $RECEIVED" |
195 | 195 |
|
| 196 | + - name: Validate built-in KMinion metrics |
| 197 | + run: | |
| 198 | + echo "Validating built-in KMinion metrics..." |
| 199 | + METRICS=$(curl -s http://localhost:8080/metrics) |
| 200 | +
|
| 201 | + # Core exporter metrics |
| 202 | + CORE_METRICS=( |
| 203 | + "kminion_exporter_up" |
| 204 | + "kminion_exporter_offset_consumer_records_consumed_total" |
| 205 | + ) |
| 206 | +
|
| 207 | + # Kafka cluster metrics |
| 208 | + KAFKA_METRICS=( |
| 209 | + "kminion_kafka_cluster_info" |
| 210 | + "kminion_kafka_broker_info" |
| 211 | + ) |
| 212 | +
|
| 213 | + # Topic metrics |
| 214 | + TOPIC_METRICS=( |
| 215 | + "kminion_kafka_topic_info" |
| 216 | + "kminion_kafka_topic_partition_count" |
| 217 | + "kminion_kafka_topic_partition_high_water_mark" |
| 218 | + "kminion_kafka_topic_high_water_mark_sum" |
| 219 | + ) |
| 220 | +
|
| 221 | + MISSING_METRICS=() |
| 222 | +
|
| 223 | + # Check core metrics |
| 224 | + for metric in "${CORE_METRICS[@]}"; do |
| 225 | + if ! echo "$METRICS" | grep -q "^${metric}"; then |
| 226 | + MISSING_METRICS+=("$metric") |
| 227 | + fi |
| 228 | + done |
| 229 | +
|
| 230 | + # Check Kafka metrics |
| 231 | + for metric in "${KAFKA_METRICS[@]}"; do |
| 232 | + if ! echo "$METRICS" | grep -q "^${metric}"; then |
| 233 | + MISSING_METRICS+=("$metric") |
| 234 | + fi |
| 235 | + done |
| 236 | +
|
| 237 | + # Check topic metrics |
| 238 | + for metric in "${TOPIC_METRICS[@]}"; do |
| 239 | + if ! echo "$METRICS" | grep -q "^${metric}"; then |
| 240 | + MISSING_METRICS+=("$metric") |
| 241 | + fi |
| 242 | + done |
| 243 | +
|
| 244 | + if [ ${#MISSING_METRICS[@]} -ne 0 ]; then |
| 245 | + echo "ERROR: Missing required built-in metrics:" |
| 246 | + printf '%s\n' "${MISSING_METRICS[@]}" |
| 247 | + echo "" |
| 248 | + echo "=== Available metrics ===" |
| 249 | + echo "$METRICS" | grep "^kminion_" | head -20 |
| 250 | + exit 1 |
| 251 | + fi |
| 252 | +
|
| 253 | + # Validate specific metric values |
| 254 | + EXPORTER_UP=$(echo "$METRICS" | grep "^kminion_exporter_up" | awk '{print $2}') |
| 255 | + if [ "$EXPORTER_UP" != "1" ]; then |
| 256 | + echo "ERROR: kminion_exporter_up should be 1, got: $EXPORTER_UP" |
| 257 | + exit 1 |
| 258 | + fi |
| 259 | +
|
| 260 | + # Check that cluster info has broker_count label |
| 261 | + if ! echo "$METRICS" | grep "kminion_kafka_cluster_info" | grep -q "broker_count"; then |
| 262 | + echo "ERROR: kminion_kafka_cluster_info missing broker_count label" |
| 263 | + exit 1 |
| 264 | + fi |
| 265 | +
|
| 266 | + # Check that we have broker info for at least one broker |
| 267 | + BROKER_COUNT=$(echo "$METRICS" | grep "^kminion_kafka_broker_info" | wc -l) |
| 268 | + if [ "$BROKER_COUNT" -lt 1 ]; then |
| 269 | + echo "ERROR: No broker info metrics found" |
| 270 | + exit 1 |
| 271 | + fi |
| 272 | +
|
| 273 | + echo "✅ Built-in KMinion metrics validation passed!" |
| 274 | + echo " - Exporter up: $EXPORTER_UP" |
| 275 | + echo " - Brokers detected: $BROKER_COUNT" |
| 276 | +
|
196 | 277 | - name: Show logs on failure |
197 | 278 | if: failure() |
198 | 279 | run: | |
|
0 commit comments