From bc1918b4631f0c490005d996f41ac6f435ebf559 Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Fri, 19 Sep 2025 15:54:57 +0200 Subject: [PATCH 01/13] feat: compression of prometheus data --- holmes/core/models.py | 4 +- holmes/core/tool_calling_llm.py | 9 +- holmes/core/tools.py | 2 + .../tool_context_window_limiter.py | 16 +- .../toolsets/prometheus/data_compression.py | 370 + .../plugins/toolsets/prometheus/prometheus.py | 61 +- .../http_traffic_generator.py | 576 + .../160_http_404_monitoring/manifest.yaml | 757 + .../160_http_404_monitoring/test_case.yaml | 24 + .../160_http_404_monitoring/toolsets.yaml | 5 + .../prometheus/raw_prometheus_data.json | 22106 ++++++++++++++++ .../prometheus/test_data_compression.py | 381 + 12 files changed, 24291 insertions(+), 20 deletions(-) create mode 100644 holmes/plugins/toolsets/prometheus/data_compression.py create mode 100644 tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/http_traffic_generator.py create mode 100644 tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/manifest.yaml create mode 100644 tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/test_case.yaml create mode 100644 tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/toolsets.yaml create mode 100644 tests/plugins/toolsets/prometheus/raw_prometheus_data.json create mode 100644 tests/plugins/toolsets/prometheus/test_data_compression.py diff --git a/holmes/core/models.py b/holmes/core/models.py index 87f180ca8..8dd79aa77 100644 --- a/holmes/core/models.py +++ b/holmes/core/models.py @@ -68,7 +68,9 @@ def as_streaming_tool_result_response(self): def format_tool_result_data(tool_result: StructuredToolResult) -> str: tool_response = tool_result.data - if isinstance(tool_result.data, str): + if tool_result.llm_data: + tool_response = tool_result.llm_data + elif isinstance(tool_result.data, str): tool_response = tool_result.data else: try: diff --git a/holmes/core/tool_calling_llm.py b/holmes/core/tool_calling_llm.py index 95dcfb735..3b3bfff35 100644 --- a/holmes/core/tool_calling_llm.py +++ b/holmes/core/tool_calling_llm.py @@ -679,7 +679,7 @@ def _get_tool_call_result( tool = self.tool_executor.get_tool_by_name(tool_name) - return ToolCallResult( + tool_call_result = ToolCallResult( tool_call_id=tool_call_id, tool_name=tool_name, description=str(tool.get_parameterized_one_liner(tool_params)) @@ -688,6 +688,12 @@ def _get_tool_call_result( result=tool_response, ) + message = tool_call_result.as_tool_call_message() + + token_count = self.llm.count_tokens_for_message(messages=[message]) + tool_call_result.size = token_count + return tool_call_result + @staticmethod def _log_tool_call_result(tool_span, tool_call_result: ToolCallResult): tool_span.set_attributes(name=tool_call_result.tool_name) @@ -698,6 +704,7 @@ def _log_tool_call_result(tool_span, tool_call_result: ToolCallResult): metadata={ "status": tool_call_result.result.status, "description": tool_call_result.description, + "token_count": tool_call_result.size }, ) diff --git a/holmes/core/tools.py b/holmes/core/tools.py index 2d13a7b7b..1d848e31a 100644 --- a/holmes/core/tools.py +++ b/holmes/core/tools.py @@ -81,11 +81,13 @@ class StructuredToolResult(BaseModel): error: Optional[str] = None return_code: Optional[int] = None data: Optional[Any] = None + llm_data: Optional[str] = None url: Optional[str] = None invocation: Optional[str] = None params: Optional[Dict] = None icon_url: Optional[str] = None + def get_stringified_data(self) -> str: if self.data is None: return "" diff --git a/holmes/core/tools_utils/tool_context_window_limiter.py b/holmes/core/tools_utils/tool_context_window_limiter.py index ceb52660e..5b520d27f 100644 --- a/holmes/core/tools_utils/tool_context_window_limiter.py +++ b/holmes/core/tools_utils/tool_context_window_limiter.py @@ -11,23 +11,25 @@ def prevent_overly_big_tool_response(tool_call_result: ToolCallResult, llm: LLM) and 0 < TOOL_MAX_ALLOCATED_CONTEXT_WINDOW_PCT and TOOL_MAX_ALLOCATED_CONTEXT_WINDOW_PCT <= 100 ): - message = tool_call_result.as_tool_call_message() - - messages_token = llm.count_tokens_for_message(messages=[message]) + + if not tool_call_result.size: + message = tool_call_result.as_tool_call_message() + messages_token = llm.count_tokens_for_message(messages=[message]) + tool_call_result.size = messages_token context_window_size = llm.get_context_window_size() max_tokens_allowed: int = int( context_window_size * TOOL_MAX_ALLOCATED_CONTEXT_WINDOW_PCT // 100 ) - if messages_token > max_tokens_allowed: + if tool_call_result.size > max_tokens_allowed: relative_pct = ( - (messages_token - max_tokens_allowed) / messages_token + (tool_call_result.size - max_tokens_allowed) / tool_call_result.size ) * 100 - error_message = f"The tool call result is too large to return: {messages_token} tokens.\nThe maximum allowed tokens is {max_tokens_allowed} which is {format(relative_pct, '.1f')}% smaller.\nInstructions for the LLM: try to repeat the query but proactively narrow down the result so that the tool answer fits within the allowed number of tokens." + error_message = f"The tool call result is too large to return: {tool_call_result.size} tokens.\nThe maximum allowed tokens is {max_tokens_allowed} which is {format(relative_pct, '.1f')}% smaller.\nInstructions for the LLM: try to repeat the query but proactively narrow down the result so that the tool answer fits within the allowed number of tokens." tool_call_result.result.status = StructuredToolResultStatus.ERROR tool_call_result.result.data = None tool_call_result.result.error = error_message sentry_helper.capture_toolcall_contains_too_many_tokens( - tool_call_result, messages_token, max_tokens_allowed + tool_call_result, tool_call_result.size, max_tokens_allowed ) diff --git a/holmes/plugins/toolsets/prometheus/data_compression.py b/holmes/plugins/toolsets/prometheus/data_compression.py new file mode 100644 index 000000000..31d03afef --- /dev/null +++ b/holmes/plugins/toolsets/prometheus/data_compression.py @@ -0,0 +1,370 @@ + + +import json +import logging +import shlex +from sys import exc_info +from typing import Any, List, Dict, Optional, Set, Union + +from click import group +from numpy import isin +from pydantic import BaseModel +import yaml + +class RawMetric(BaseModel): + metric: dict[str, Any] # labels + values: list[list[Any]] # typically list of tuples with timestamp as the first value and whatever value as the second + + +class CompressedMetric(BaseModel): + labels: set[tuple[str, Any]] + values: list[list[Any]] + +class Group(BaseModel): + common_labels: set[tuple[str, Any]] + metrics: list[Union["Group", CompressedMetric]] + +def format_labels(labels: set[tuple[str, Any]], section_name:str, line_prefix: str = '') -> list[str]: + lines = [] + if labels: + sorted_labels = sorted(labels, key=lambda t: t[0]) # keep label list stable in the outpout by sorting them by key + if len(sorted_labels) <= 10: + labels_dict = {} + for (k, v) in sorted_labels: + labels_dict[k] = v + lines.append(f"{line_prefix}{section_name} {json.dumps(labels_dict)}") + else: + lines.append(line_prefix+section_name) + for (k, v) in sorted_labels: + lines.append(f"{line_prefix}{INDENT_SPACES}- {str(k)}: {str(v)}") + else: + raise Exception("No label") + return lines + +INDENT_SPACES = " " + +def format_data(data: Union[Group, CompressedMetric], line_prefix: str = '') -> str: + + lines = [] + if isinstance(data, CompressedMetric): + if not data.labels: + print(f"{line_prefix}{INDENT_SPACES}- CompressedMetric Data has no labels: labels={data.labels} values={data.values}") + raise ValueError(f"CompressedMetric Data has no labels: labels={data.labels} values={data.values}") + lines.extend(format_labels(labels=data.labels, section_name="labels:")) + if data.values: + lines.append("values:") + for value in data.values: + lines.append(f"{INDENT_SPACES}- {str(value[0])}: {str(value[1])}") + else: + lines.append("values: NO_VALUES") + txt = "\n".join([line_prefix + line for line in lines]) + print(txt) + return txt + + elif data.metrics: + if not data.common_labels: + print(f"{line_prefix}{INDENT_SPACES}- Group has no labels: labels={data.common_labels} metrics={len(data.metrics)}") + raise ValueError(f"Group has no labels: labels={data.common_labels} metrics={len(data.metrics)}") + group_labels = format_labels(labels=data.common_labels, section_name="common_labels:", line_prefix=line_prefix) + print(group_labels) + lines.extend(group_labels) + lines.append(f"{line_prefix}metrics:") + + for metric in data.metrics: + metric_lines = format_data(data=metric, line_prefix=line_prefix + (INDENT_SPACES*2)) + if metric_lines: + metric_lines = f"{line_prefix}{INDENT_SPACES}- " + metric_lines.lstrip() + lines.append(metric_lines) + return "\n".join([line for line in lines]) + return "" + +def format_zero_values_data(data: Union[Group, CompressedMetric], line_prefix: str = '') -> str: + + lines = [] + try: + if isinstance(data, CompressedMetric): + lines.extend(format_labels(labels=data.labels, section_name="")) + txt = "\n".join([line_prefix + line for line in lines]) + # print(txt + "\n\n") + return txt + + elif data.metrics: + lines.extend(format_labels(labels=data.common_labels, section_name="", line_prefix=line_prefix)) + + compress_labels = True + compressed_label_values:list = [] + compress_key:Optional[str] = None + # close to the leaves the data may be a high number of metrics differentiated by a single label + # Check if it's the case. + for metric in data.metrics: + if isinstance(metric, CompressedMetric) and len(metric.labels) == 1: + key, value = next(iter(metric.labels)) + if not compress_key: + compress_key = key + elif key != compress_key: + compress_labels = False + break + compressed_label_values.append(value) + else: + compress_labels = False + break + if compress_labels and compress_key: + lines.append(f"{line_prefix}{INDENT_SPACES}- {json.dumps({compress_key:compressed_label_values})}") + else: + + for metric in data.metrics: + metric_lines = format_zero_values_data(data=metric, line_prefix=line_prefix + (INDENT_SPACES*2)) + if metric_lines: + metric_lines = f"{line_prefix}{INDENT_SPACES}- " + metric_lines.lstrip() + lines.append(metric_lines) + txt = "\n".join([line for line in lines]) + # print(txt + "\n\n") + return txt + else: + raise Exception("Data has no metrics and is not a CompressedMetric") + except Exception: + logging.error(f"ERROR: {str(data)}", exc_info=True) + raise + + return "" + +def format_zero_values_metrics(metrics: list[Union[Group, CompressedMetric]]) -> str: + formatted_string = "# Metrics with the following hierarchised labels have NO DATA:\n" + for metric in metrics: + formatted_string += format_zero_values_data(metric, line_prefix=INDENT_SPACES) + "\n" + + return formatted_string + +def format_compressed_metrics(metrics: list[Union[Group, CompressedMetric]]) -> str: + formatted_string = "# The following metrics have been hierarchically grouped by labels:\n" + for metric in metrics: + d = format_data(metric, line_prefix=INDENT_SPACES) + formatted_string += d + "\n" + + return formatted_string + +def raw_metric_to_compressed_metric(raw_metric:RawMetric, remove_labels: set[tuple[str, Any]]) -> CompressedMetric: + labels:set[tuple[str, Any]] = set() + if remove_labels: + for label in raw_metric.metric.items(): + if label not in remove_labels: + labels.add(label) + else: + labels = set(raw_metric.metric.items()) + return CompressedMetric( + labels=labels, + values=raw_metric.values + ) + +def remove_labels(metric: CompressedMetric, remove_labels: set[tuple[str, Any]]): + labels:set[tuple[str, Any]] = set() + for label in metric.labels: + if label not in remove_labels: + labels.add(label) + metric.labels = labels + + +idx = 0 + +class PreFilteredMetrics(BaseModel): + metrics_with_only_zero_values: list[CompressedMetric] + other_metrics: list[CompressedMetric] + +def pre_filter_metrics(metrics: list[CompressedMetric]) -> PreFilteredMetrics: + """ A prefilter before metrics are merged together. + It helps for high cardinality when a lot of metrics have 0 as values. + These metrics are grouped and then summarized as zero values + """ + metrics_with_only_zero_values:list[CompressedMetric] = [] + other_metrics:list[CompressedMetric] = [] + for metric in metrics: + metric_has_non_zero_value = False + for value in metric.values: + if value[1] != "0" and value[1] != 0: + other_metrics.append(metric) + metric_has_non_zero_value = True + break + if not metric_has_non_zero_value: + metrics_with_only_zero_values.append(metric) + + return PreFilteredMetrics( + metrics_with_only_zero_values=metrics_with_only_zero_values, + other_metrics=other_metrics + ) + + +def group_metrics(metrics_to_process: list[CompressedMetric], globally_common_labels:set[tuple[str, Any]] = set(), logging_prefix: str = '') -> list[Union[Group, CompressedMetric]]: + global idx + idx = idx + 1 + most_common_label, match_count = find_most_common_label(metrics=metrics_to_process, ignore_label_set = set()) + if not globally_common_labels: + while most_common_label and match_count == len(metrics_to_process): + globally_common_labels.add(most_common_label) + most_common_label, match_count = find_most_common_label(metrics=metrics_to_process, ignore_label_set = globally_common_labels) + + print(f"{logging_prefix}** FOUND {len(globally_common_labels)} globally common labels") + else: + print(f"\n\n\n{logging_prefix}NESTED group_metrics {globally_common_labels} with #{len(metrics_to_process)} entities\n\n") + groups:list[Union[Group, CompressedMetric]] = [] + unmatched_metrics:list[CompressedMetric] = [] + # Constantly iterate over all metrics trying to extract the most common label + # Once we find a common label that matches more than one metric, we try to find other common labels between these metrics + # We group the metrics together once we don't find any more common metrics + if not most_common_label or match_count <= 1: + unmatched_metrics = metrics_to_process + else: + while most_common_label and match_count > 1: + print(f"{logging_prefix}** PROCESSING GROUP based on label {most_common_label} #{match_count}") + current_group_labels = set() + current_group:list[CompressedMetric] = [] + current_group_labels.add(most_common_label) + unmatched_metrics = [] + for metric_data in metrics_to_process: + if most_common_label in metric_data.labels: + current_group.append(metric_data) + else: + unmatched_metrics.append(metric_data) + + print(f"{logging_prefix}** Found {len(current_group)} entities in group with common label={current_group_labels}") + all_group_labels = current_group_labels.union(globally_common_labels) + most_common_label, match_count = find_most_common_label(metrics=current_group, ignore_label_set = all_group_labels) + + # Keep aggregating all labels that are common with the current group. + while match_count == len(current_group): + current_group_labels.add(most_common_label) + all_group_labels = current_group_labels.union(globally_common_labels) + most_common_label, match_count = find_most_common_label(metrics=current_group, ignore_label_set = all_group_labels) + + print(f"{logging_prefix}** Of the {len(current_group)} entities in the current group, the following labels are common: {current_group_labels}") + # We're done with our group as we found no more common labels. + # 1. Remove the common labels from all metrics in this group + # 2. Recurse to further group metrics within this group + for metric_in_group in current_group: + all_group_labels = current_group_labels.union(globally_common_labels) + remove_labels(metric=metric_in_group, remove_labels=all_group_labels) + + # print(f"{logging_prefix}** Entities in the current group, labels have been filtered: {current_group}") + + # print(f"{logging_prefix}- current_group:\n{format_compressed_metrics(list(current_group))}\n\n") + # if idx <= 2: + # if len(current_group)== 1: + # print("** WARNING WARNING WARNING WARNING WARNING WARNING WARNING should not happen as we check match_count > 1 for the group") + # print(f"{logging_prefix}** Current group size is 1. Adding entity as-is to the output list") + # groups.append(current_group[0]) + # elif len(current_group) > 1: + # print(f"{logging_prefix}** Current group size is {len(current_group)}. Recursing...") + # sub_groups = group_metrics(metrics_to_process=current_group, globally_common_labels=set(), logging_prefix=logging_prefix + INDENT_SPACES + f'{idx}- ') + # groups.append(Group(common_labels=current_group_labels, metrics=sub_groups)) + # else: + # print("** WARNING WARNING WARNING WARNING WARNING WARNING WARNING should not happen as we check match_count > 1 for the group") + # print(f"{logging_prefix}** Current group is empty. Aie Aie Aie") + groups.append(Group(common_labels=current_group_labels, metrics=current_group)) + # else: + # print(f"{logging_prefix}- processed group:\n{format_compressed_metrics(list(sub_groups))}\n\n") + # groups.append(Group(common_labels=current_group_labels, metrics=current_group)) + + most_common_label, match_count = find_most_common_label(metrics=unmatched_metrics, ignore_label_set = globally_common_labels) + metrics_to_process = unmatched_metrics + + + # print(f"********************* GROUPS:\n{[g.model_dump() for g in groups]}\n") + # print(f"********************* UMATCHED:\n{[m.model_dump() for m in unmatched_metrics]}\n") + + for metric in unmatched_metrics: + remove_labels(metric=metric, remove_labels=globally_common_labels) + # prepend instead of append so that unique metrics are closer to common labels than grouped metrics + # I 'guess' it may help the LLM in making sense of the hierarchy + groups.insert(0, metric) + + if globally_common_labels and len(groups) > 1: + parent_group = Group( + common_labels=globally_common_labels, + metrics=groups + ) + return [parent_group] + else: + return groups + +def set_default(obj): + if isinstance(obj, set): + return list(obj) + raise TypeError + +def summarize_metrics(metrics_to_process: list[CompressedMetric]) -> str: + + summarized_text = "" + print(f"metrics_to_process={len(metrics_to_process)}") + filtered_metrics = pre_filter_metrics(metrics=metrics_to_process) + print(f"filtered_metrics.metrics_with_only_zero_values={len(filtered_metrics.metrics_with_only_zero_values)}") + print(f"filtered_metrics.other_metrics={len(filtered_metrics.other_metrics)}") + if len(filtered_metrics.metrics_with_only_zero_values) >= len(filtered_metrics.other_metrics) * 0.1: + # print(f"ZERO METRICS:{str(filtered_metrics.metrics_with_only_zero_values)}") + zero_metrics = group_metrics(filtered_metrics.metrics_with_only_zero_values) + # print(f"ZERO METRICS GROUPED:{str(zero_metrics)}") + summarized_text += format_zero_values_metrics(zero_metrics) + + if summarized_text and filtered_metrics.other_metrics: + summarized_text += "\n" + + if filtered_metrics.other_metrics: + print("*************************************************************************************************************") + print("*************************************************************************************************************") + print("*************************************************************************************************************") + print("*************************************************************************************************************") + print("*************************************************************************************************************") + print("*************************************************************************************************************") + metrics = group_metrics(metrics_to_process=filtered_metrics.other_metrics) + print(json.dumps([metric.model_dump() for metric in metrics], indent=2, default=set_default)) + print("*************************************************************************************************************") + print("*************************************************************************************************************") + print("*************************************************************************************************************") + print("*************************************************************************************************************") + print("*************************************************************************************************************") + print("*************************************************************************************************************") + print("*************************************************************************************************************") + summarized_text += format_compressed_metrics(metrics) + + return summarized_text + + + + +def find_most_common_label(metrics: list[CompressedMetric], ignore_label_set: Set[tuple[str, Any]]) -> tuple[Optional[tuple[str, Any]], int]: + # print(f"find_most_common_label, metrics#={len(metrics)}, ignore_label_set={ignore_label_set}") + """ + Find label keys and values that are most common across all label sets. + Returns labels that appear in ALL label sets with the same value. + + Args: + label_sets: List of label dictionaries + + Returns: + Dictionary of common labels (key -> most common value) + """ + if len(metrics) <= 1: + return None, 0 + + # Count frequency of each (key, value) pair + label_counts: dict[tuple[str, Any], int] = {} + + # First, collect all (key, value) pairs and their counts + for metric_data in metrics: + labels = metric_data.labels + for (key, value) in labels: + if (key, value) not in ignore_label_set: + label_key = (key, value) + label_counts[label_key] = label_counts.get(label_key, 0) + 1 + + # Find labels that appear in ALL sets (100% frequency) + most_common_label: Optional[tuple[str, Any]] = None + most_common_count_value = 0 + for (key, value), count in label_counts.items(): + if not most_common_label and count > 1: + most_common_label = (key, value) + most_common_count_value = count + elif count > 1 and count > most_common_count_value: + most_common_label = (key, value) + most_common_count_value = count + + # print(f"find_most_common_label -> most_common_label={most_common_label}, most_common_count_value={most_common_count_value}") + return most_common_label, most_common_count_value diff --git a/holmes/plugins/toolsets/prometheus/prometheus.py b/holmes/plugins/toolsets/prometheus/prometheus.py index b60a142fa..7c2c27316 100644 --- a/holmes/plugins/toolsets/prometheus/prometheus.py +++ b/holmes/plugins/toolsets/prometheus/prometheus.py @@ -21,6 +21,7 @@ ToolsetTag, ) from holmes.plugins.toolsets.consts import STANDARD_END_DATETIME_TOOL_PARAM_DESCRIPTION +from holmes.plugins.toolsets.prometheus.data_compression import RawMetric, raw_metric_to_compressed_metric, summarize_metrics from holmes.plugins.toolsets.prometheus.utils import parse_duration_to_seconds from holmes.plugins.toolsets.service_discovery import PrometheusDiscovery from holmes.plugins.toolsets.utils import ( @@ -316,7 +317,6 @@ def add_prometheus_auth(prometheus_auth_header: Optional[str]) -> Dict[str, Any] results["Authorization"] = prometheus_auth_header return results - def create_data_summary_for_large_result( result_data: Dict, query: str, data_size_chars: int, is_range_query: bool = False ) -> Dict[str, Any]: @@ -1365,25 +1365,64 @@ def _invoke( "output_type": output_type, } + llm_data:Optional[str] = None + # Check if data should be included based on size if self.toolset.config.tool_calls_return_data: result_data = data.get("data", {}) + response_data["data"] = result_data + + + try: + metrics_list_dict = result_data.get("result") + raw_metrics = [RawMetric(**metric) for metric in metrics_list_dict] + metrics = [raw_metric_to_compressed_metric(metric, remove_labels=set()) for metric in raw_metrics] + + compressed_data = summarize_metrics(metrics) + response_data["raw_data"] = result_data + original_size = len(json.dumps(result_data)) + compressed_size = len(json.dumps(compressed_data)) + compression_ratio = (1 - compressed_size / original_size) * 100 if original_size > 0 else 0 + + if compression_ratio > 20: + # below this amount it's likely not worth mutating the response + llm_data = compressed_data + logging.info( + f"Compressed Prometheus data: {original_size:,} → {compressed_size:,} chars " + f"({compression_ratio:.1f}% reduction)" + ) + else: + logging.info( + f"Compressed Prometheus data: {original_size:,} → {compressed_size:,} chars " + f"({compression_ratio:.1f}% reduction). Original data will be used instead." + ) + + + + response_data["compression_info"] = { + "original_size_chars": original_size, + "compressed_size_chars": compressed_size, + "compression_ratio_percent": round(compression_ratio, 1) + } + except Exception as e: + logging.warning(f"Failed to compress data: {e}, the original data will be used") + - # Estimate the size of the data data_str_preview = json.dumps(result_data) + if llm_data: + data_str_preview = llm_data data_size_chars = len(data_str_preview) - # Provide summary if data is too large + # Provide summary if data is still too large after compression + # In this case the summary is based on the original data and not the compressed data if ( self.toolset.config.query_response_size_limit - and data_size_chars - > self.toolset.config.query_response_size_limit + and data_size_chars > self.toolset.config.query_response_size_limit ): - response_data["data_summary"] = ( - create_data_summary_for_large_result( - result_data, query, data_size_chars, is_range_query=True - ) + response_data["data_summary"] = create_data_summary_for_large_result( + response_data["data"], query, data_size_chars, is_range_query=True ) + # Remove the large data and keep only summary logging.info( f"Prometheus range query returned large dataset: " f"{response_data['data_summary'].get('series_count', 0)} series, " @@ -1394,14 +1433,14 @@ def _invoke( response_data["data_summary"]["_debug_info"] = ( f"Data size: {data_size_chars:,} chars exceeded limit of {self.toolset.config.query_response_size_limit:,} chars" ) - else: - response_data["data"] = result_data + data_str = json.dumps(response_data, indent=2) return StructuredToolResult( status=StructuredToolResultStatus.SUCCESS, data=data_str, + llm_data=llm_data, params=params, ) diff --git a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/http_traffic_generator.py b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/http_traffic_generator.py new file mode 100644 index 000000000..7a22aa9de --- /dev/null +++ b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/http_traffic_generator.py @@ -0,0 +1,576 @@ +import os +import time +import random +import json +from datetime import datetime +import threading +from http.server import HTTPServer, BaseHTTPRequestHandler +from urllib.parse import urlparse +import prometheus_client +from prometheus_client import Counter, Histogram, Gauge +import logging +import asyncio +from concurrent.futures import ThreadPoolExecutor + +# Configure logging +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + +# Massive amount of Prometheus metrics with high cardinality +# HTTP request metrics with many dimensions +http_requests_total = Counter('http_requests_total', 'Total HTTP requests', + ['method', 'status_code', 'endpoint', 'user_agent', 'source_ip', 'region', 'service_version']) +http_request_duration = Histogram('http_request_duration_seconds', 'HTTP request duration', + ['method', 'endpoint', 'status_code', 'region', 'user_type']) +http_request_size_bytes = Histogram('http_request_size_bytes', 'HTTP request size in bytes', + ['method', 'endpoint', 'content_type']) +http_response_size_bytes = Histogram('http_response_size_bytes', 'HTTP response size in bytes', + ['method', 'endpoint', 'status_code']) + +# Connection metrics +current_connections = Gauge('http_current_connections', 'Current HTTP connections', ['endpoint', 'region']) +connection_duration = Histogram('http_connection_duration_seconds', 'Connection duration', ['region']) + +# Application metrics +app_requests_per_second = Gauge('app_requests_per_second', 'Requests per second', ['endpoint', 'method']) +app_error_rate = Gauge('app_error_rate', 'Error rate percentage', ['endpoint', 'error_type']) +app_latency_p95 = Gauge('app_latency_p95_seconds', 'P95 latency', ['endpoint']) +app_latency_p99 = Gauge('app_latency_p99_seconds', 'P99 latency', ['endpoint']) + +# Business metrics +business_revenue_per_request = Gauge('business_revenue_per_request_usd', 'Revenue per request', ['product_category']) +business_conversion_rate = Gauge('business_conversion_rate', 'Conversion rate', ['traffic_source', 'user_segment']) +business_cart_abandonment = Gauge('business_cart_abandonment_rate', 'Cart abandonment rate', ['user_type']) + +# Infrastructure metrics +infra_cpu_usage = Gauge('infra_cpu_usage_percent', 'CPU usage', ['instance', 'region', 'availability_zone']) +infra_memory_usage = Gauge('infra_memory_usage_percent', 'Memory usage', ['instance', 'region']) +infra_disk_io = Gauge('infra_disk_io_ops_per_sec', 'Disk I/O operations', ['instance', 'disk_type']) +infra_network_bytes = Counter('infra_network_bytes_total', 'Network bytes', ['instance', 'direction', 'interface']) + +# Database metrics +db_query_duration = Histogram('db_query_duration_seconds', 'Database query duration', + ['database', 'table', 'operation', 'index_used']) +db_connections_active = Gauge('db_connections_active', 'Active database connections', ['database', 'user', 'host']) +db_slow_queries = Counter('db_slow_queries_total', 'Slow database queries', ['database', 'table']) + +# Cache metrics +cache_hits = Counter('cache_hits_total', 'Cache hits', ['cache_type', 'key_pattern', 'region']) +cache_misses = Counter('cache_misses_total', 'Cache misses', ['cache_type', 'key_pattern', 'region']) +cache_evictions = Counter('cache_evictions_total', 'Cache evictions', ['cache_type', 'reason']) + +# Security metrics +security_failed_logins = Counter('security_failed_logins_total', 'Failed login attempts', ['source_ip', 'username']) +security_blocked_requests = Counter('security_blocked_requests_total', 'Blocked requests', ['rule_id', 'source_ip', 'endpoint']) +security_suspicious_activity = Counter('security_suspicious_activity_total', 'Suspicious activity', ['activity_type', 'severity']) + +class HTTPMetricsHandler(BaseHTTPRequestHandler): + """HTTP request handler that generates realistic traffic patterns""" + + def do_GET(self): + self.handle_request('GET') + + def do_POST(self): + self.handle_request('POST') + + def do_PUT(self): + self.handle_request('PUT') + + def do_DELETE(self): + self.handle_request('DELETE') + + def handle_request(self, method): + start_time = time.time() + + try: + path = self.path + client_ip = self.client_address[0] + + # Generate rich context for metrics + region = self.get_region_from_ip(client_ip) + user_agent = self.get_user_agent() + service_version = random.choice(['v2.1.0', 'v2.1.1', 'v2.0.9', 'v2.2.0-beta']) + user_type = self.get_user_type(client_ip) + + current_connections.labels(endpoint=self.get_endpoint_category(path), region=region).inc() + + # Determine response based on path and client + status_code, response_data = self.determine_response(path, client_ip, method) + + # Add realistic response time variation + response_time = self.calculate_response_time(path, status_code) + time.sleep(response_time) + + # Calculate request/response sizes + request_size = random.randint(200, 2000) + response_size = len(json.dumps(response_data).encode()) if response_data else random.randint(100, 500) + + # Send response + self.send_response(status_code) + self.send_header('Content-Type', 'application/json' if status_code == 200 else 'text/plain') + self.send_header('Server', f'ProductionAPI/{service_version}') + self.end_headers() + + if status_code == 200: + self.wfile.write(json.dumps(response_data).encode()) + else: + self.wfile.write(b'Not Found' if status_code == 404 else b'Error') + + # Record extensive metrics with high cardinality + endpoint = self.get_endpoint_category(path) + content_type = 'application/json' if status_code == 200 else 'text/plain' + + # HTTP metrics + http_requests_total.labels( + method=method, status_code=str(status_code), endpoint=endpoint, + user_agent=user_agent, source_ip=client_ip, region=region, service_version=service_version + ).inc() + + http_request_duration.labels( + method=method, endpoint=endpoint, status_code=str(status_code), region=region, user_type=user_type + ).observe(time.time() - start_time) + + http_request_size_bytes.labels(method=method, endpoint=endpoint, content_type=content_type).observe(request_size) + http_response_size_bytes.labels(method=method, endpoint=endpoint, status_code=str(status_code)).observe(response_size) + + # Application metrics + self.record_application_metrics(endpoint, method, status_code, response_time) + + # Business metrics + self.record_business_metrics(path, status_code, user_type) + + # Infrastructure metrics + self.record_infrastructure_metrics(region) + + # Database metrics + self.record_database_metrics(endpoint) + + # Cache metrics + self.record_cache_metrics(endpoint, region) + + # Security metrics + self.record_security_metrics(client_ip, path, status_code, user_agent) + + # Connection metrics + connection_duration.labels(region=region).observe(random.uniform(0.1, 5.0)) + + # Log the request (reduced logging to avoid spam) + if random.random() < 0.01: # Log only 1% of requests + logger.info(f"{client_ip} - {method} {path} - {status_code} - {response_time:.3f}s") + + except Exception as e: + logger.error(f"Error handling request: {e}") + finally: + current_connections.labels(endpoint=self.get_endpoint_category(path), region=self.get_region_from_ip(client_ip)).dec() + + def get_region_from_ip(self, ip): + """Map IP ranges to regions""" + if ip.startswith('192.168.1.'): + return 'us-east-1' + elif ip.startswith('192.168.2.'): + return 'us-west-2' + elif ip.startswith('10.0.'): + return 'eu-central-1' + elif ip.startswith('172.16.'): + return 'ap-southeast-1' + else: + return 'us-east-1' + + def get_user_agent(self): + """Generate realistic user agents""" + agents = [ + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36', + 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36', + 'PostmanRuntime/7.29.0', + 'curl/7.68.0', + 'Go-http-client/1.1', + 'Python/3.9 requests/2.25.1' + ] + return random.choice(agents) + + def get_user_type(self, ip): + """Determine user type based on IP""" + if ip == '192.168.50.100': + return 'scanner' + elif ip.startswith('192.168.1.'): + return 'premium' + elif ip.startswith('10.0.'): + return 'enterprise' + else: + return 'regular' + + def record_application_metrics(self, endpoint, method, status_code, response_time): + """Record application-level metrics""" + app_requests_per_second.labels(endpoint=endpoint, method=method).set(random.uniform(50, 500)) + + if status_code >= 400: + error_type = 'client_error' if status_code < 500 else 'server_error' + app_error_rate.labels(endpoint=endpoint, error_type=error_type).set(random.uniform(0.5, 5.0)) + + app_latency_p95.labels(endpoint=endpoint).set(response_time * 1.5) + app_latency_p99.labels(endpoint=endpoint).set(response_time * 2.0) + + def record_business_metrics(self, path, status_code, user_type): + """Record business-level metrics""" + if '/api/v1/products' in path: + category = random.choice(['electronics', 'clothing', 'books', 'home']) + business_revenue_per_request.labels(product_category=category).set(random.uniform(10, 200)) + + if status_code == 200 and user_type != 'scanner': + traffic_source = random.choice(['organic', 'paid', 'social', 'direct']) + user_segment = random.choice(['new', 'returning', 'vip']) + business_conversion_rate.labels(traffic_source=traffic_source, user_segment=user_segment).set(random.uniform(0.02, 0.15)) + + business_cart_abandonment.labels(user_type=user_type).set(random.uniform(0.3, 0.7)) + + def record_infrastructure_metrics(self, region): + """Record infrastructure metrics for multiple instances""" + for i in range(random.randint(3, 8)): # 3-8 instances per region + instance = f'i-{random.randint(100000, 999999):06d}' + az = f'{region}{random.choice(["a", "b", "c"])}' + + infra_cpu_usage.labels(instance=instance, region=region, availability_zone=az).set(random.uniform(20, 90)) + infra_memory_usage.labels(instance=instance, region=region).set(random.uniform(40, 85)) + + disk_type = random.choice(['gp2', 'gp3', 'io1', 'nvme']) + infra_disk_io.labels(instance=instance, disk_type=disk_type).set(random.uniform(100, 2000)) + + for direction in ['in', 'out']: + for interface in ['eth0', 'eth1']: + infra_network_bytes.labels(instance=instance, direction=direction, interface=interface).inc( + random.randint(1000, 50000) + ) + + def record_database_metrics(self, endpoint): + """Record database metrics""" + databases = ['users_db', 'products_db', 'orders_db', 'analytics_db'] + tables = ['users', 'products', 'orders', 'sessions', 'events', 'inventory'] + operations = ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] + + for _ in range(random.randint(1, 3)): # 1-3 queries per request + db = random.choice(databases) + table = random.choice(tables) + operation = random.choice(operations) + index_used = random.choice(['primary', 'idx_timestamp', 'idx_user_id', 'none']) + + db_query_duration.labels(database=db, table=table, operation=operation, index_used=index_used).observe( + random.uniform(0.001, 0.1) + ) + + if random.random() < 0.05: # 5% slow queries + db_slow_queries.labels(database=db, table=table).inc() + + # Connection pools + for db in databases: + for user in ['app_user', 'readonly_user', 'admin_user']: + for host in ['db-primary', 'db-replica-1', 'db-replica-2']: + db_connections_active.labels(database=db, user=user, host=host).set(random.randint(5, 50)) + + def record_cache_metrics(self, endpoint, region): + """Record cache metrics""" + cache_types = ['redis', 'memcached', 'local'] + key_patterns = ['user:*', 'product:*', 'session:*', 'config:*', 'temp:*'] + + for cache_type in cache_types: + for key_pattern in key_patterns: + if random.random() < 0.8: # 80% cache hit rate + cache_hits.labels(cache_type=cache_type, key_pattern=key_pattern, region=region).inc() + else: + cache_misses.labels(cache_type=cache_type, key_pattern=key_pattern, region=region).inc() + + if random.random() < 0.02: # 2% eviction rate + reason = random.choice(['memory_pressure', 'ttl_expired', 'manual']) + cache_evictions.labels(cache_type=cache_type, reason=reason).inc() + + def record_security_metrics(self, client_ip, path, status_code, user_agent): + """Record security-related metrics""" + # Failed login attempts + if '/api/auth/login' in path and status_code == 401: + username = f'user_{random.randint(1000, 9999)}' + security_failed_logins.labels(source_ip=client_ip, username=username).inc() + + # Blocked requests (for scanning IPs) + if client_ip == '192.168.50.100' and status_code == 404: + rule_id = random.choice(['WAF_001', 'WAF_002', 'RATE_LIMIT', 'BLACKLIST']) + security_blocked_requests.labels(rule_id=rule_id, source_ip=client_ip, endpoint=path).inc() + + activity_type = random.choice(['path_traversal', 'sql_injection', 'xss_attempt', 'scanner']) + severity = 'high' if activity_type in ['sql_injection', 'path_traversal'] else 'medium' + security_suspicious_activity.labels(activity_type=activity_type, severity=severity).inc() + + def determine_response(self, path, client_ip, method): + """Determine response based on path and client IP""" + + # Special handling for the problematic IP (192.168.50.100) + if client_ip == '192.168.50.100': + # Always return 404 for this IP to simulate scanning/probing + return 404, None + + # Valid endpoints that should return 200 + valid_endpoints = [ + '/api/v1/users', + '/api/v1/products', + '/api/v1/orders', + '/api/v1/inventory', + '/api/v1/analytics', + '/api/v1/health', + '/api/v2/users', + '/api/v2/products', + '/health', + '/metrics', + '/status', + '/api/auth/login', + '/api/auth/logout', + '/api/dashboard', + '/api/reports' + ] + + # Check if it's a valid endpoint + if any(path.startswith(endpoint) for endpoint in valid_endpoints): + # Background error rate (10%) + if random.random() < 0.90: # 90% success rate + return 200, { + "status": "success", + "timestamp": datetime.now().isoformat(), + "data": {"id": random.randint(1, 10000), "value": random.randint(1, 100)} + } + else: + # Background errors - mix of 500 and 404 + return random.choice([500, 404]), None + else: + # Unknown endpoint - return 404 + return 404, None + + def calculate_response_time(self, path, status_code): + """Calculate realistic response times""" + base_time = 0.01 # 10ms base + + if status_code == 404: + return base_time + random.uniform(0.001, 0.005) # Fast 404s + + # Different endpoints have different response time patterns + if '/api/v1/analytics' in path or '/api/reports' in path: + return base_time + random.uniform(0.1, 0.5) # Slower analytics + elif '/api/v1/products' in path or '/api/v1/inventory' in path: + return base_time + random.uniform(0.02, 0.1) # Medium database queries + else: + return base_time + random.uniform(0.005, 0.03) # Fast API calls + + def get_endpoint_category(self, path): + """Categorize endpoint for metrics""" + if path.startswith('/api/v1/'): + return 'api_v1' + elif path.startswith('/api/v2/'): + return 'api_v2' + elif path.startswith('/api/'): + return 'api_other' + elif path in ['/health', '/status', '/metrics']: + return 'system' + else: + return 'unknown' + + def log_message(self, format, *args): + """Suppress default HTTP server logging""" + pass + +class TrafficGenerator: + """Generates massive volumes of realistic HTTP traffic patterns""" + + def __init__(self): + self.running = True + # Massive number of background IPs to create high cardinality + self.background_ips = [] + + # Generate 200+ unique IPs across different subnets + for subnet in ['192.168.1', '192.168.2', '10.0.1', '10.0.2', '10.0.3', '172.16.0', '172.16.1', '172.17.0']: + for i in range(25): + self.background_ips.append(f'{subnet}.{i + 10}') + + # Add enterprise ranges + for i in range(50): + self.background_ips.append(f'10.100.{random.randint(1,10)}.{i + 100}') + + # Add cloud provider ranges + for i in range(30): + self.background_ips.append(f'172.31.{random.randint(1,15)}.{i + 50}') + + self.problematic_ip = '192.168.50.100' + + # Massive number of endpoints to create high cardinality + self.endpoints = [] + + # Core API endpoints + base_endpoints = ['/api/v1/users', '/api/v1/products', '/api/v1/orders', '/api/v1/inventory', + '/api/v1/analytics', '/api/v1/health', '/api/v2/users', '/api/v2/products', + '/health', '/metrics', '/api/auth/login', '/api/auth/logout', '/api/dashboard', + '/api/reports', '/status'] + + # Add parameterized versions to create high cardinality + for base in base_endpoints: + self.endpoints.append(base) + # Add ID-based endpoints + for i in range(10): + if 'users' in base or 'products' in base or 'orders' in base: + self.endpoints.append(f'{base}/{random.randint(1000, 9999)}') + + # Add microservice endpoints + services = ['user-service', 'product-service', 'order-service', 'payment-service', + 'inventory-service', 'notification-service', 'analytics-service', 'auth-service'] + + for service in services: + for endpoint in ['health', 'metrics', 'status', 'config', 'info']: + self.endpoints.append(f'/api/{service}/{endpoint}') + # Add versioned endpoints + for version in ['v1', 'v2']: + self.endpoints.append(f'/api/{version}/{service}/{endpoint}') + + # Add resource-specific endpoints with IDs + resources = ['customers', 'invoices', 'transactions', 'subscriptions', 'campaigns', 'segments'] + for resource in resources: + self.endpoints.append(f'/api/v1/{resource}') + for i in range(20): # Add individual resource endpoints + self.endpoints.append(f'/api/v1/{resource}/{random.randint(10000, 99999)}') + + # Scanning endpoints used by the problematic IP (expanded) + self.scan_endpoints = [ + '/admin', '/admin.php', '/wp-admin', '/phpmyadmin', '/config', '/backup', '/test', + '/api/v3/admin', '/debug', '/console', '/manager', '/status/internal', '/api/internal', + '/system', '/root', '/.env', '/phpinfo.php', '/wp-config.php', '/database.sql', + '/backup.sql', '/admin/login', '/administrator', '/cpanel', '/webmail', '/ftp', + '/ssh', '/telnet', '/mysql', '/postgres', '/redis', '/mongodb', '/elasticsearch', + '/.git/config', '/.svn', '/cgi-bin', '/scripts', '/includes', '/uploads', + '/tmp', '/temp', '/cache', '/logs', '/private', '/secrets', '/keys', + '/api/admin', '/api/debug', '/api/test', '/api/internal/health', '/admin/dashboard', + '/management', '/monitoring', '/grafana', '/prometheus', '/kibana', '/jenkins' + ] + + def start_background_traffic(self): + """Generate massive continuous background HTTP traffic with multiple threads""" + def generate_requests(thread_id): + while self.running: + try: + # Generate 100-500 requests per batch per thread (massive volume) + requests_per_batch = random.randint(100, 500) + + for _ in range(requests_per_batch): + if not self.running: + break + + # Select random source IP (background traffic) + source_ip = random.choice(self.background_ips) + endpoint = random.choice(self.endpoints) + method = random.choice(['GET', 'GET', 'GET', 'GET', 'POST', 'PUT', 'DELETE']) # GET is most common + + # Simulate the request (we'll let the server handle actual response) + self.log_simulated_request(source_ip, method, endpoint) + + # Very small delay between requests to maintain high volume + time.sleep(random.uniform(0.001, 0.01)) + + # Short pause between batches + time.sleep(random.uniform(0.1, 0.5)) + + except Exception as e: + logger.error(f"Error in background traffic generation thread {thread_id}: {e}") + time.sleep(1) + + # Start multiple threads to generate massive traffic + threads = [] + for i in range(8): # 8 threads generating traffic concurrently + thread = threading.Thread(target=generate_requests, args=(i,), daemon=True) + thread.start() + threads.append(thread) + + logger.info(f"Started {len(threads)} background traffic generator threads") + return threads + + def start_periodic_404_traffic(self): + """Generate massive periodic 404 traffic from problematic IP every 3 minutes""" + def generate_404_requests(): + while self.running: + try: + # Wait for 3 minutes + time.sleep(180) + + if not self.running: + break + + logger.info(f"Starting massive 404 burst from {self.problematic_ip}") + + # Generate massive burst of 404 requests (50% spike rate) + # With 8 threads * 100-500 requests = 800-4000 requests per batch + # So 404 burst should be 400-2000 requests to be 50% + burst_requests = random.randint(1000, 2000) # Large burst to test context limits + + for i in range(burst_requests): + if not self.running: + break + + endpoint = random.choice(self.scan_endpoints) + method = 'GET' # Scanners typically use GET + + self.send_request(self.problematic_ip, method, endpoint) + + # Very fast succession of requests to create high volume + time.sleep(random.uniform(0.01, 0.05)) + + logger.info(f"Completed massive 404 burst: {burst_requests} requests from {self.problematic_ip}") + + except Exception as e: + logger.error(f"Error in 404 traffic generation: {e}") + time.sleep(60) + + thread = threading.Thread(target=generate_404_requests, daemon=True) + thread.start() + return thread + + def log_simulated_request(self, ip, method, endpoint): + """Log simulated request for debugging""" + pass # We'll let the actual HTTP handler do the logging + + def stop(self): + """Stop traffic generation""" + self.running = False + +def start_prometheus_server(port=8000): + """Start Prometheus metrics server""" + try: + prometheus_client.start_http_server(port) + logger.info(f"Prometheus metrics server started on port {port}") + except Exception as e: + logger.error(f"Failed to start Prometheus server: {e}") + +def main(): + logger.info("Starting HTTP Traffic Generator and Server") + + # Start Prometheus metrics server + start_prometheus_server(8000) + + # Initialize traffic generator + traffic_gen = TrafficGenerator() + + # Start background traffic generation + bg_thread = traffic_gen.start_background_traffic() + + # Start periodic 404 traffic + scan_thread = traffic_gen.start_periodic_404_traffic() + + # Start HTTP server + server_address = ('0.0.0.0', 8080) + httpd = HTTPServer(server_address, HTTPMetricsHandler) + + logger.info("HTTP server listening on port 8080") + logger.info("Prometheus metrics available on port 8000") + logger.info("Starting traffic generation...") + + try: + httpd.serve_forever() + except KeyboardInterrupt: + logger.info("Shutting down...") + traffic_gen.stop() + httpd.shutdown() + httpd.server_close() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/manifest.yaml b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/manifest.yaml new file mode 100644 index 000000000..487e32ddc --- /dev/null +++ b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/manifest.yaml @@ -0,0 +1,757 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: app-160 + +--- +apiVersion: v1 +kind: Secret +metadata: + name: http-traffic-generator + namespace: app-160 +type: Opaque +stringData: + http_traffic_generator.py: | + import os + import time + import random + import json + from datetime import datetime + import threading + from http.server import HTTPServer, BaseHTTPRequestHandler + from urllib.parse import urlparse + import prometheus_client + from prometheus_client import Counter, Histogram, Gauge + import logging + import asyncio + from concurrent.futures import ThreadPoolExecutor + + # Configure logging + logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + logger = logging.getLogger(__name__) + + # Massive amount of Prometheus metrics with high cardinality + # HTTP request metrics with many dimensions + http_requests_total = Counter('http_requests_total', 'Total HTTP requests', + ['method', 'status_code', 'endpoint', 'user_agent', 'source_ip', 'region', 'service_version']) + http_request_duration = Histogram('http_request_duration_seconds', 'HTTP request duration', + ['method', 'endpoint', 'status_code', 'region', 'user_type']) + http_request_size_bytes = Histogram('http_request_size_bytes', 'HTTP request size in bytes', + ['method', 'endpoint', 'content_type']) + http_response_size_bytes = Histogram('http_response_size_bytes', 'HTTP response size in bytes', + ['method', 'endpoint', 'status_code']) + + # Connection metrics + current_connections = Gauge('http_current_connections', 'Current HTTP connections', ['endpoint', 'region']) + connection_duration = Histogram('http_connection_duration_seconds', 'Connection duration', ['region']) + + # Application metrics + app_requests_per_second = Gauge('app_requests_per_second', 'Requests per second', ['endpoint', 'method']) + app_error_rate = Gauge('app_error_rate', 'Error rate percentage', ['endpoint', 'error_type']) + app_latency_p95 = Gauge('app_latency_p95_seconds', 'P95 latency', ['endpoint']) + app_latency_p99 = Gauge('app_latency_p99_seconds', 'P99 latency', ['endpoint']) + + # Business metrics + business_revenue_per_request = Gauge('business_revenue_per_request_usd', 'Revenue per request', ['product_category']) + business_conversion_rate = Gauge('business_conversion_rate', 'Conversion rate', ['traffic_source', 'user_segment']) + business_cart_abandonment = Gauge('business_cart_abandonment_rate', 'Cart abandonment rate', ['user_type']) + + # Infrastructure metrics + infra_cpu_usage = Gauge('infra_cpu_usage_percent', 'CPU usage', ['instance', 'region', 'availability_zone']) + infra_memory_usage = Gauge('infra_memory_usage_percent', 'Memory usage', ['instance', 'region']) + infra_disk_io = Gauge('infra_disk_io_ops_per_sec', 'Disk I/O operations', ['instance', 'disk_type']) + infra_network_bytes = Counter('infra_network_bytes_total', 'Network bytes', ['instance', 'direction', 'interface']) + + # Database metrics + db_query_duration = Histogram('db_query_duration_seconds', 'Database query duration', + ['database', 'table', 'operation', 'index_used']) + db_connections_active = Gauge('db_connections_active', 'Active database connections', ['database', 'user', 'host']) + db_slow_queries = Counter('db_slow_queries_total', 'Slow database queries', ['database', 'table']) + + # Cache metrics + cache_hits = Counter('cache_hits_total', 'Cache hits', ['cache_type', 'key_pattern', 'region']) + cache_misses = Counter('cache_misses_total', 'Cache misses', ['cache_type', 'key_pattern', 'region']) + cache_evictions = Counter('cache_evictions_total', 'Cache evictions', ['cache_type', 'reason']) + + # Security metrics + security_failed_logins = Counter('security_failed_logins_total', 'Failed login attempts', ['source_ip', 'username']) + security_blocked_requests = Counter('security_blocked_requests_total', 'Blocked requests', ['rule_id', 'source_ip', 'endpoint']) + security_suspicious_activity = Counter('security_suspicious_activity_total', 'Suspicious activity', ['activity_type', 'severity']) + + class HTTPMetricsHandler(BaseHTTPRequestHandler): + """HTTP request handler that generates realistic traffic patterns""" + + def do_GET(self): + self.handle_request('GET') + + def do_POST(self): + self.handle_request('POST') + + def do_PUT(self): + self.handle_request('PUT') + + def do_DELETE(self): + self.handle_request('DELETE') + + def handle_request(self, method): + start_time = time.time() + + try: + path = self.path + # Check for X-Forwarded-For header first, fall back to client address + forwarded_for = self.headers.get('X-Forwarded-For') + client_ip = forwarded_for if forwarded_for else self.client_address[0] + + # Generate rich context for metrics + region = self.get_region_from_ip(client_ip) + user_agent = self.get_user_agent() + service_version = random.choice(['v2.1.0', 'v2.1.1', 'v2.0.9', 'v2.2.0-beta']) + user_type = self.get_user_type(client_ip) + + current_connections.labels(endpoint=self.get_endpoint_category(path), region=region).inc() + + # Determine response based on path and client + status_code, response_data = self.determine_response(path, client_ip, method) + + # Add realistic response time variation + response_time = self.calculate_response_time(path, status_code) + time.sleep(response_time) + + # Calculate request/response sizes + request_size = random.randint(200, 2000) + response_size = len(json.dumps(response_data).encode()) if response_data else random.randint(100, 500) + + # Send response + self.send_response(status_code) + self.send_header('Content-Type', 'application/json' if status_code == 200 else 'text/plain') + self.send_header('Server', f'ProductionAPI/{service_version}') + self.end_headers() + + if status_code == 200: + self.wfile.write(json.dumps(response_data).encode()) + else: + self.wfile.write(b'Not Found' if status_code == 404 else b'Error') + + # Record extensive metrics with high cardinality + endpoint = self.get_endpoint_category(path) + content_type = 'application/json' if status_code == 200 else 'text/plain' + + # HTTP metrics + http_requests_total.labels( + method=method, status_code=str(status_code), endpoint=endpoint, + user_agent=user_agent, source_ip=client_ip, region=region, service_version=service_version + ).inc() + + http_request_duration.labels( + method=method, endpoint=endpoint, status_code=str(status_code), region=region, user_type=user_type + ).observe(time.time() - start_time) + + http_request_size_bytes.labels(method=method, endpoint=endpoint, content_type=content_type).observe(request_size) + http_response_size_bytes.labels(method=method, endpoint=endpoint, status_code=str(status_code)).observe(response_size) + + # Application metrics + self.record_application_metrics(endpoint, method, status_code, response_time) + + # Business metrics + self.record_business_metrics(path, status_code, user_type) + + # Infrastructure metrics + self.record_infrastructure_metrics(region) + + # Database metrics + self.record_database_metrics(endpoint) + + # Cache metrics + self.record_cache_metrics(endpoint, region) + + # Security metrics + self.record_security_metrics(client_ip, path, status_code, user_agent) + + # Connection metrics + connection_duration.labels(region=region).observe(random.uniform(0.1, 5.0)) + + # Log the request (reduced logging to avoid spam) + if random.random() < 0.01: # Log only 1% of requests + logger.info(f"{client_ip} - {method} {path} - {status_code} - {response_time:.3f}s") + + except Exception as e: + logger.error(f"Error handling request: {e}") + finally: + current_connections.labels(endpoint=self.get_endpoint_category(path), region=self.get_region_from_ip(client_ip)).dec() + + def get_region_from_ip(self, ip): + """Map IP ranges to regions""" + if ip.startswith('192.168.1.'): + return 'us-east-1' + elif ip.startswith('192.168.2.'): + return 'us-west-2' + elif ip.startswith('10.0.'): + return 'eu-central-1' + elif ip.startswith('172.16.'): + return 'ap-southeast-1' + else: + return 'us-east-1' + + def get_user_agent(self): + """Generate realistic user agents""" + agents = [ + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36', + 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36', + 'PostmanRuntime/7.29.0', + 'curl/7.68.0', + 'Go-http-client/1.1', + 'Python/3.9 requests/2.25.1' + ] + return random.choice(agents) + + def get_user_type(self, ip): + """Determine user type based on IP""" + if ip == '192.168.50.100': + return 'scanner' + elif ip.startswith('192.168.1.'): + return 'premium' + elif ip.startswith('10.0.'): + return 'enterprise' + else: + return 'regular' + + def record_application_metrics(self, endpoint, method, status_code, response_time): + """Record application-level metrics""" + app_requests_per_second.labels(endpoint=endpoint, method=method).set(random.uniform(50, 500)) + + if status_code >= 400: + error_type = 'client_error' if status_code < 500 else 'server_error' + app_error_rate.labels(endpoint=endpoint, error_type=error_type).set(random.uniform(0.5, 5.0)) + + app_latency_p95.labels(endpoint=endpoint).set(response_time * 1.5) + app_latency_p99.labels(endpoint=endpoint).set(response_time * 2.0) + + def record_business_metrics(self, path, status_code, user_type): + """Record business-level metrics""" + if '/api/v1/products' in path: + category = random.choice(['electronics', 'clothing', 'books', 'home']) + business_revenue_per_request.labels(product_category=category).set(random.uniform(10, 200)) + + if status_code == 200 and user_type != 'scanner': + traffic_source = random.choice(['organic', 'paid', 'social', 'direct']) + user_segment = random.choice(['new', 'returning', 'vip']) + business_conversion_rate.labels(traffic_source=traffic_source, user_segment=user_segment).set(random.uniform(0.02, 0.15)) + + business_cart_abandonment.labels(user_type=user_type).set(random.uniform(0.3, 0.7)) + + def record_infrastructure_metrics(self, region): + """Record infrastructure metrics for multiple instances""" + for i in range(random.randint(3, 8)): # 3-8 instances per region + instance = f'i-{random.randint(100000, 999999):06d}' + az = f'{region}{random.choice(["a", "b", "c"])}' + + infra_cpu_usage.labels(instance=instance, region=region, availability_zone=az).set(random.uniform(20, 90)) + infra_memory_usage.labels(instance=instance, region=region).set(random.uniform(40, 85)) + + disk_type = random.choice(['gp2', 'gp3', 'io1', 'nvme']) + infra_disk_io.labels(instance=instance, disk_type=disk_type).set(random.uniform(100, 2000)) + + for direction in ['in', 'out']: + for interface in ['eth0', 'eth1']: + infra_network_bytes.labels(instance=instance, direction=direction, interface=interface).inc( + random.randint(1000, 50000) + ) + + def record_database_metrics(self, endpoint): + """Record database metrics""" + databases = ['users_db', 'products_db', 'orders_db', 'analytics_db'] + tables = ['users', 'products', 'orders', 'sessions', 'events', 'inventory'] + operations = ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] + + for _ in range(random.randint(1, 3)): # 1-3 queries per request + db = random.choice(databases) + table = random.choice(tables) + operation = random.choice(operations) + index_used = random.choice(['primary', 'idx_timestamp', 'idx_user_id', 'none']) + + db_query_duration.labels(database=db, table=table, operation=operation, index_used=index_used).observe( + random.uniform(0.001, 0.1) + ) + + if random.random() < 0.05: # 5% slow queries + db_slow_queries.labels(database=db, table=table).inc() + + # Connection pools + for db in databases: + for user in ['app_user', 'readonly_user', 'admin_user']: + for host in ['db-primary', 'db-replica-1', 'db-replica-2']: + db_connections_active.labels(database=db, user=user, host=host).set(random.randint(5, 50)) + + def record_cache_metrics(self, endpoint, region): + """Record cache metrics""" + cache_types = ['redis', 'memcached', 'local'] + key_patterns = ['user:*', 'product:*', 'session:*', 'config:*', 'temp:*'] + + for cache_type in cache_types: + for key_pattern in key_patterns: + if random.random() < 0.8: # 80% cache hit rate + cache_hits.labels(cache_type=cache_type, key_pattern=key_pattern, region=region).inc() + else: + cache_misses.labels(cache_type=cache_type, key_pattern=key_pattern, region=region).inc() + + if random.random() < 0.02: # 2% eviction rate + reason = random.choice(['memory_pressure', 'ttl_expired', 'manual']) + cache_evictions.labels(cache_type=cache_type, reason=reason).inc() + + def record_security_metrics(self, client_ip, path, status_code, user_agent): + """Record security-related metrics""" + # Failed login attempts + if '/api/auth/login' in path and status_code == 401: + username = f'user_{random.randint(1000, 9999)}' + security_failed_logins.labels(source_ip=client_ip, username=username).inc() + + # Blocked requests (for scanning IPs) + if client_ip == '192.168.50.100' and status_code == 404: + rule_id = random.choice(['WAF_001', 'WAF_002', 'RATE_LIMIT', 'BLACKLIST']) + security_blocked_requests.labels(rule_id=rule_id, source_ip=client_ip, endpoint=path).inc() + + activity_type = random.choice(['path_traversal', 'sql_injection', 'xss_attempt', 'scanner']) + severity = 'high' if activity_type in ['sql_injection', 'path_traversal'] else 'medium' + security_suspicious_activity.labels(activity_type=activity_type, severity=severity).inc() + + def determine_response(self, path, client_ip, method): + """Determine response based on path and client IP""" + + # Special handling for the problematic IP (192.168.50.100) + if client_ip == '192.168.50.100': + # Always return 404 for this IP to simulate scanning/probing + return 404, None + + # Valid endpoints that should return 200 + valid_endpoints = [ + '/api/v1/users', '/api/v1/products', '/api/v1/orders', '/api/v1/inventory', + '/api/v1/analytics', '/api/v1/health', '/api/v2/users', '/api/v2/products', + '/health', '/metrics', '/status', '/api/auth/login', '/api/auth/logout', + '/api/dashboard', '/api/reports' + ] + + # Check if it's a valid endpoint + if any(path.startswith(endpoint) for endpoint in valid_endpoints): + # Background error rate (< 3%) + if random.random() < 0.97: # 97% success rate + return 200, { + "status": "success", + "timestamp": datetime.now().isoformat(), + "data": {"id": random.randint(1, 10000), "value": random.randint(1, 100)} + } + else: + # Background errors - mix of 500 and 404 + return random.choice([500, 404]), None + else: + # Unknown endpoint - return 404 + return 404, None + + def calculate_response_time(self, path, status_code): + """Calculate realistic response times""" + base_time = 0.01 # 10ms base + + if status_code == 404: + return base_time + random.uniform(0.001, 0.005) # Fast 404s + + # Different endpoints have different response time patterns + if '/api/v1/analytics' in path or '/api/reports' in path: + return base_time + random.uniform(0.1, 0.5) # Slower analytics + elif '/api/v1/products' in path or '/api/v1/inventory' in path: + return base_time + random.uniform(0.02, 0.1) # Medium database queries + else: + return base_time + random.uniform(0.005, 0.03) # Fast API calls + + def get_endpoint_category(self, path): + """Categorize endpoint for metrics""" + if path.startswith('/api/v1/'): + return 'api_v1' + elif path.startswith('/api/v2/'): + return 'api_v2' + elif path.startswith('/api/'): + return 'api_other' + elif path in ['/health', '/status', '/metrics']: + return 'system' + else: + return 'unknown' + + def log_message(self, format, *args): + """Suppress default HTTP server logging""" + pass + + class TrafficGenerator: + """Generates massive volumes of realistic HTTP traffic patterns""" + + def __init__(self): + self.running = True + # Massive number of background IPs to create high cardinality + self.background_ips = [] + + # Generate 200+ unique IPs across different subnets + for subnet in ['192.168.1', '192.168.2', '10.0.1', '10.0.2', '10.0.3', '172.16.0', '172.16.1', '172.17.0']: + for i in range(25): + self.background_ips.append(f'{subnet}.{i + 10}') + + # Add enterprise ranges + for i in range(50): + self.background_ips.append(f'10.100.{random.randint(1,10)}.{i + 100}') + + # Add cloud provider ranges + for i in range(30): + self.background_ips.append(f'172.31.{random.randint(1,15)}.{i + 50}') + + self.problematic_ip = '192.168.50.100' + + # Massive number of endpoints to create high cardinality + self.endpoints = [] + + # Core API endpoints + base_endpoints = ['/api/v1/users', '/api/v1/products', '/api/v1/orders', '/api/v1/inventory', + '/api/v1/analytics', '/api/v1/health', '/api/v2/users', '/api/v2/products', + '/health', '/metrics', '/api/auth/login', '/api/auth/logout', '/api/dashboard', + '/api/reports', '/status'] + + # Add parameterized versions to create high cardinality + for base in base_endpoints: + self.endpoints.append(base) + # Add ID-based endpoints + for i in range(10): + if 'users' in base or 'products' in base or 'orders' in base: + self.endpoints.append(f'{base}/{random.randint(1000, 9999)}') + + # Add microservice endpoints + services = ['user-service', 'product-service', 'order-service', 'payment-service', + 'inventory-service', 'notification-service', 'analytics-service', 'auth-service'] + + for service in services: + for endpoint in ['health', 'metrics', 'status', 'config', 'info']: + self.endpoints.append(f'/api/{service}/{endpoint}') + # Add versioned endpoints + for version in ['v1', 'v2']: + self.endpoints.append(f'/api/{version}/{service}/{endpoint}') + + # Add resource-specific endpoints with IDs + resources = ['customers', 'invoices', 'transactions', 'subscriptions', 'campaigns', 'segments'] + for resource in resources: + self.endpoints.append(f'/api/v1/{resource}') + for i in range(20): # Add individual resource endpoints + self.endpoints.append(f'/api/v1/{resource}/{random.randint(10000, 99999)}') + + # Scanning endpoints used by the problematic IP (expanded) + self.scan_endpoints = [ + '/admin', '/admin.php', '/wp-admin', '/phpmyadmin', '/config', '/backup', '/test', + '/api/v3/admin', '/debug', '/console', '/manager', '/status/internal', '/api/internal', + '/system', '/root', '/.env', '/phpinfo.php', '/wp-config.php', '/database.sql', + '/backup.sql', '/admin/login', '/administrator', '/cpanel', '/webmail', '/ftp', + '/ssh', '/telnet', '/mysql', '/postgres', '/redis', '/mongodb', '/elasticsearch', + '/.git/config', '/.svn', '/cgi-bin', '/scripts', '/includes', '/uploads', + '/tmp', '/temp', '/cache', '/logs', '/private', '/secrets', '/keys', + '/api/admin', '/api/debug', '/api/test', '/api/internal/health', '/admin/dashboard', + '/management', '/monitoring', '/grafana', '/prometheus', '/kibana', '/jenkins' + ] + + def start_background_traffic(self): + """Generate massive continuous background HTTP traffic with multiple threads""" + def generate_requests(thread_id): + while self.running: + try: + # Generate 10,000-50,000 requests per batch per thread (100x volume) + requests_per_batch = random.randint(10000, 50000) + + for _ in range(requests_per_batch): + if not self.running: + break + + # Select random source IP (background traffic) + source_ip = random.choice(self.background_ips) + endpoint = random.choice(self.endpoints) + method = random.choice(['GET', 'GET', 'GET', 'GET', 'POST', 'PUT', 'DELETE']) # GET is most common + + # Simulate the request (we'll let the server handle actual response) + self.log_simulated_request(source_ip, method, endpoint) + + # Minimal delay between requests to maintain extremely high volume + time.sleep(random.uniform(0.0001, 0.001)) + + # Very short pause between batches + time.sleep(random.uniform(0.01, 0.05)) + + except Exception as e: + logger.error(f"Error in background traffic generation thread {thread_id}: {e}") + time.sleep(1) + + # Start multiple threads to generate massive traffic + threads = [] + for i in range(8): # Increased to 8 threads for 100x traffic + thread = threading.Thread(target=generate_requests, args=(i,), daemon=True) + thread.start() + threads.append(thread) + + logger.info(f"Started {len(threads)} background traffic generator threads") + return threads + + def start_periodic_404_traffic(self): + """Generate massive periodic 404 traffic from problematic IP every 3 minutes""" + def generate_404_requests(): + while self.running: + try: + # Wait for 3 minutes + time.sleep(180) + + if not self.running: + break + + logger.info(f"Starting massive 404 burst from {self.problematic_ip}") + + # Generate massive burst of 404 requests (100x more - 10% of total massive traffic rate) + burst_requests = random.randint(20000, 60000) # 100x larger burst to test context limits + + for i in range(burst_requests): + if not self.running: + break + + endpoint = random.choice(self.scan_endpoints) + method = 'GET' # Scanners typically use GET + + self.log_simulated_request(self.problematic_ip, method, endpoint) + + # Extremely fast succession of requests to create ultra-high volume + time.sleep(random.uniform(0.001, 0.005)) + + logger.info(f"Completed massive 404 burst: {burst_requests} requests from {self.problematic_ip}") + + except Exception as e: + logger.error(f"Error in 404 traffic generation: {e}") + time.sleep(60) + + thread = threading.Thread(target=generate_404_requests, daemon=True) + thread.start() + return thread + + def log_simulated_request(self, ip, method, endpoint): + """Log simulated request for debugging""" + pass # We'll let the actual HTTP handler do the logging + + def stop(self): + """Stop traffic generation""" + self.running = False + + def start_prometheus_server(port=8000): + """Start Prometheus metrics server""" + try: + prometheus_client.start_http_server(port) + logger.info(f"Prometheus metrics server started on port {port}") + except Exception as e: + logger.error(f"Failed to start Prometheus server: {e}") + + def main(): + logger.info("Starting HTTP Traffic Generator and Server") + + # Start Prometheus metrics server + start_prometheus_server(8000) + + # Initialize traffic generator + traffic_gen = TrafficGenerator() + + # Start background traffic generation + bg_threads = traffic_gen.start_background_traffic() + + # Start periodic 404 traffic + scan_thread = traffic_gen.start_periodic_404_traffic() + + # Start HTTP server + server_address = ('0.0.0.0', 8080) + httpd = HTTPServer(server_address, HTTPMetricsHandler) + + logger.info("HTTP server listening on port 8080") + logger.info("Prometheus metrics available on port 8000") + logger.info("Starting massive traffic generation to stress-test LLM context...") + + try: + httpd.serve_forever() + except KeyboardInterrupt: + logger.info("Shutting down...") + traffic_gen.stop() + httpd.shutdown() + httpd.server_close() + + if __name__ == "__main__": + main() + + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: http-service + namespace: app-160 + labels: + app: http-service +spec: + replicas: 1 + selector: + matchLabels: + app: http-service + template: + metadata: + labels: + app: http-service + spec: + containers: + - name: http-service + image: python:3.9-slim + command: ["sh", "-c"] + args: + - | + pip install prometheus-client requests + cd /app + python http_traffic_generator.py + ports: + - containerPort: 8080 + name: http + - containerPort: 8000 + name: metrics + env: + - name: PYTHONUNBUFFERED + value: "1" + resources: + requests: + memory: "2Gi" + cpu: "1000m" + limits: + memory: "4Gi" + cpu: "2000m" + volumeMounts: + - name: app-code + mountPath: /app + livenessProbe: + httpGet: + path: /health + port: 8080 + initialDelaySeconds: 30 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /health + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 5 + volumes: + - name: app-code + secret: + secretName: http-traffic-generator + defaultMode: 0755 + +--- +apiVersion: v1 +kind: Service +metadata: + name: http-service + namespace: app-160 + labels: + app: http-service +spec: + selector: + app: http-service + ports: + - name: http + port: 8080 + targetPort: 8080 + - name: metrics + port: 8000 + targetPort: 8000 + +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: http-service-monitor + namespace: app-160 + labels: + app: http-service + release: robusta +spec: + selector: + matchLabels: + app: http-service + endpoints: + - port: metrics + interval: 2s + path: /metrics + + +--- +# Traffic simulation pods to create the requests +apiVersion: apps/v1 +kind: Deployment +metadata: + name: traffic-simulator + namespace: app-160 + labels: + app: traffic-simulator +spec: + replicas: 10 + selector: + matchLabels: + app: traffic-simulator + template: + metadata: + labels: + app: traffic-simulator + spec: + containers: + - name: traffic-simulator + image: curlimages/curl:latest + command: ["sh", "-c"] + args: + - | + while true; do + # Background traffic simulation - 100x more requests from various IPs + for i in $(seq 1 5000); do + # Simulate different source IPs by varying user agent and other headers + case $((RANDOM % 6)) in + 0) endpoint="/api/v1/users" ;; + 1) endpoint="/api/v1/products" ;; + 2) endpoint="/api/v1/orders" ;; + 3) endpoint="/health" ;; + 4) endpoint="/metrics" ;; + 5) endpoint="/api/v2/users" ;; + esac + + curl -s -H "X-Forwarded-For: 192.168.1.$((RANDOM % 50 + 10))" \ + -H "User-Agent: Mozilla/5.0 (simulation)" \ + http://http-service:8080$endpoint > /dev/null + + sleep 0.0$((RANDOM % 5 + 1)) + done + + # Every 3 minutes, simulate the problematic IP scanning + if [ $(($(date +%s) % 180)) -lt 5 ]; then + echo "Simulating 404 burst from problematic IP" + for j in $(seq 1 2000); do + case $((RANDOM % 8)) in + 0) scan_path="/admin" ;; + 1) scan_path="/wp-admin" ;; + 2) scan_path="/phpmyadmin" ;; + 3) scan_path="/config" ;; + 4) scan_path="/backup" ;; + 5) scan_path="/.env" ;; + 6) scan_path="/debug" ;; + 7) scan_path="/console" ;; + esac + curl -s -H "X-Forwarded-For: 192.168.50.100" \ + -H "User-Agent: Scanner/1.0" \ + http://http-service:8080$scan_path > /dev/null + sleep 0.01 + done + fi + + sleep 0.1 + done + resources: + requests: + memory: "128Mi" + cpu: "100m" + limits: + memory: "256Mi" + cpu: "500m" \ No newline at end of file diff --git a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/test_case.yaml b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/test_case.yaml new file mode 100644 index 000000000..bf5cbe246 --- /dev/null +++ b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/test_case.yaml @@ -0,0 +1,24 @@ +user_prompt: "Check prometheus metrics for increased 404 errors from service/http-service in the app-160 namespace between 2025-09-18T05:50:00Z and 2025-09-18T08:50:00Z. Using prometheus, narrow down the source of the 404 errors." +expected_output: + - Periodic 404 errors occurring every 3 minutes from IP address 192.168.50.100 + - 404 errors represent about 10% of total HTTP traffic during those periods + - Background HTTP traffic has normal error rate (<3%) + - The 404 errors are coming from requests to various endpoints that don't exist + - Pattern suggests automated scanning or probing behavior from the specific IP +tags: + - network + - prometheus + - context_window +before_test: | + kubectl create namespace app-160 || true + kubectl apply -f manifest.yaml -n app-160 + kubectl wait --for=condition=Ready pod -l app=http-service -n app-160 --timeout=300s + sleep 30 +after_test: | + kubectl delete namespace app-160 --force --grace-period=0 + +# port_forwards: +# - namespace: default +# service: service/robusta-kube-prometheus-st-prometheus +# local_port: 9160 +# remote_port: 9090 diff --git a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/toolsets.yaml b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/toolsets.yaml new file mode 100644 index 000000000..df879d62d --- /dev/null +++ b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/toolsets.yaml @@ -0,0 +1,5 @@ +toolsets: + prometheus/metrics: + enabled: true + config: + prometheus_url: http://localhost:9160 diff --git a/tests/plugins/toolsets/prometheus/raw_prometheus_data.json b/tests/plugins/toolsets/prometheus/raw_prometheus_data.json new file mode 100644 index 000000000..16b6c5e0e --- /dev/null +++ b/tests/plugins/toolsets/prometheus/raw_prometheus_data.json @@ -0,0 +1,22106 @@ +{ + "resultType": "matrix", + "result": [ + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758176430, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176430, "0"], + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758175170, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758176430, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758174960, "0"], + [1758175170, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758174960, "0"], + [1758175170, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176010, "0.0033761036031960817"], + [1758176220, "0.003400871250128883"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758176430, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758174960, "0"], + [1758175170, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177900, "0"], + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758180210, "0.003508771929824561"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"], + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"], + [1758182520, "0"], + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"], + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758178110, "0"], + [1758182520, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"], + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758177690, "0"], + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"], + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177900, "0"], + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758186300, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177690, "0"], + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"], + [1758182520, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178530, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"], + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"], + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"], + [1758177690, "0"], + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"], + [1758181050, "0"], + [1758181260, "0"], + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"], + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758180210, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177480, "0"], + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"], + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758182520, "0"], + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758180210, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177480, "0"], + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"], + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0"], + [1758178110, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"], + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177690, "0"], + [1758181890, "0"], + [1758182100, "0"], + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185670, "0"], + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"], + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"], + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"], + [1758186090, "0"], + [1758186300, "0.0034000000000000002"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"], + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0.003401360544217687"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758182520, "0"], + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"], + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"], + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185670, "0"], + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"], + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"], + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"], + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"], + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"], + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758182520, "0"], + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758182100, "0"], + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"], + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758186300, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"], + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758186300, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758180210, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"], + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758186300, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v1", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758175170, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758175590, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"], + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758177060, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0.0033888888888888888"], + [1758181470, "0.003466204762788014"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"], + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177900, "0"], + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758180210, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "api_v2", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758176430, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758175170, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758174960, "0"], + [1758175170, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758175170, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176430, "0"], + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758174960, "0"], + [1758175170, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758174960, "0"], + [1758175170, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "10.42.0.1", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "10.42.0.1", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758175590, "0"], + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "10.42.0.1", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758175380, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758176220, "0"], + [1758176430, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176640, "0"], + [1758176850, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"], + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"], + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758178530, "0"], + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"], + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.23", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"], + [1758182520, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"], + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"], + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "10.42.0.1", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "10.42.0.1", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177480, "0"], + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758186300, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758186300, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177690, "0"], + [1758178320, "0"], + [1758178530, "0"], + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"], + [1758182520, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758182310, "0"], + [1758182520, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"], + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"], + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "10.42.0.1", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.15", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.18", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758186300, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758181050, "0"], + [1758181260, "0"], + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758186300, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.22", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758182310, "0"], + [1758182520, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758182310, "0"], + [1758182520, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758177690, "0"], + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.37", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758185670, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.46", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"], + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.48", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758177480, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758182730, "0"], + [1758182940, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758177060, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758178530, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "10.42.0.1", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "10.42.0.1", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.10", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.11", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.12", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758180000, "0"], + [1758180210, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.13", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.14", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.16", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.17", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"], + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.19", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"], + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.20", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"], + [1758184620, "0"], + [1758184830, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.21", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177900, "0"], + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177690, "0"], + [1758186090, "0"], + [1758186300, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.24", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"], + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.25", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.26", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.27", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.28", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758177060, "0"], + [1758177270, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758177900, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.29", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.30", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758178320, "0"], + [1758178530, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.31", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.32", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.33", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758177060, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.34", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758184830, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.35", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177690, "0"], + [1758177900, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.36", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177480, "0"], + [1758177690, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.38", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.39", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.40", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.41", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758184200, "0"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"], + [1758182520, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.42", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758182520, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758181890, "0"], + [1758182100, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.43", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758177690, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.44", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758180420, "0"], + [1758180630, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.45", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.47", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177270, "0"], + [1758177480, "0"], + [1758179790, "0"], + [1758180000, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758177060, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.49", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758183570, "0"], + [1758183780, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.50", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [[1758178110, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176850, "0"], + [1758177060, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.51", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758185040, "0"], + [1758185250, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.52", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"], + [1758185460, "0"], + [1758185670, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.53", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183990, "0"], + [1758184200, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.54", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758181260, "0"], + [1758181470, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.55", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [[1758182100, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.56", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758181050, "0"], + [1758181260, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.57", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758177900, "0"], + [1758178110, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.58", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758183360, "0"], + [1758183570, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "system", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.1.59", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758185880, "0"], + [1758186090, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [[1758175590, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175170, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758175170, "0"], + [1758175590, "0"], + [1758175800, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758175590, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758175590, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758175590, "0"], + [1758175800, "0"], + [1758176010, "0.0033789939516151997"], + [1758176220, "0.003409090909090909"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758175800, "0.00380952380952381"], + [1758176010, "0.006759504679273721"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175170, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758175170, "0.0034567901234567907"], + [1758175590, "0.007058823529411767"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758175170, "0"], + [1758175590, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758175800, "0.00761904761904762"], + [1758176010, "0.010141297835237111"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758175800, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175590, "0.0035294117647058833"], + [1758175800, "0"], + [1758176010, "0.003381245899402671"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758175170, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758175170, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [[1758175590, "0"]] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758175170, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758175170, "0"], + [1758175800, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758175170, "0"], + [1758175590, "0.0035294117647058833"], + [1758175800, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758175170, "0"], + [1758175800, "0"], + [1758176010, "0.0033797523396368605"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758175170, "0.010370370370370372"], + [1758175800, "0.00380952380952381"], + [1758176010, "0.00380952380952381"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758175170, "0"], + [1758175590, "0.003541666666666666"], + [1758175800, "0"], + [1758176010, "0"], + [1758176220, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.240:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-655f9c678d-g5p49", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758175590, "0"], + [1758175800, "0"], + [1758176010, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758179790, "0.06528968798171476"], + [1758180000, "0.11409395973154364"], + [1758180210, "0.09849056603773584"], + [1758180420, "0.0067816091954022995"], + [1758180630, "0"], + [1758183360, "0.03398692810457517"], + [1758183570, "0.057423506559709764"], + [1758183780, "0.010839417314871598"], + [1758183990, "0.027169811320754716"], + [1758184200, "0.0337324333178532"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.06185338861425609"], + [1758180000, "0.10067114093959732"], + [1758180210, "0.091875"], + [1758180420, "0"], + [1758180630, "0"], + [1758183360, "0.030625"], + [1758183570, "0.03040067994337576"], + [1758183780, "0.010839417314871598"], + [1758183990, "0.020377358490566037"], + [1758184200, "0.033730352585435386"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.04116580266751458"], + [1758180000, "0.08053691275167786"], + [1758180210, "0.08514492753623187"], + [1758180420, "0"], + [1758180630, "0"], + [1758183360, "0.020416666666666666"], + [1758183570, "0.0405632976247916"], + [1758183780, "0.007226278209914398"], + [1758183990, "0.027169811320754716"], + [1758184200, "0.02698428206834831"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.03773531911188836"], + [1758180000, "0.05704697986577182"], + [1758180210, "0.05437908496732027"], + [1758180420, "0"], + [1758180630, "0"], + [1758183360, "0.03748148148148148"], + [1758183570, "0.04055877478444786"], + [1758183780, "0.003613139104957199"], + [1758183990, "0.03397435897435898"], + [1758184200, "0.03373673828147626"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758179790, "0.06864695520193144"], + [1758180000, "0.10402684563758391"], + [1758180210, "0.07492753623188406"], + [1758180420, "0.010192307692307691"], + [1758180630, "0"], + [1758183360, "0.017021276595744685"], + [1758183570, "0.04054195746260636"], + [1758183780, "0.010839417314871598"], + [1758183990, "0.027200000000000002"], + [1758184200, "0.043876207332259415"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0.06193043099152965"], + [1758180000, "0.07718120805369129"], + [1758180210, "0.05108695652173913"], + [1758180420, "0.013575757575757574"], + [1758180630, "0"], + [1758183360, "0.03746376811594203"], + [1758183570, "0.05744014061059039"], + [1758183780, "0.014452556419828797"], + [1758183990, "0.044183006535947714"], + [1758184200, "0.07084715039110015"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.0.9", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758179790, "0.03779929304204539"], + [1758180000, "0.08724832214765102"], + [1758180210, "0.06462585034013606"], + [1758180420, "0.006792452830188679"], + [1758180630, "0"], + [1758183360, "0.0238"], + [1758183570, "0.03379532080735009"], + [1758183780, "0.007226278209914398"], + [1758183990, "0.027301587301587306"], + [1758184200, "0.04723455218980765"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758179790, "0.020791540975364505"], + [1758180000, "0.09747276712328766"], + [1758180210, "0.1189102564102564"], + [1758180420, "0.010185185185185184"], + [1758180630, "0"], + [1758183360, "0.047581699346405236"], + [1758183570, "0.06755706654083501"], + [1758183780, "0.003613139104957199"], + [1758183990, "0.040754716981132075"], + [1758184200, "0.037108017473608555"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.027458782080772574"], + [1758180000, "0.0738255033557047"], + [1758180210, "0.09169811320754717"], + [1758180420, "0.006783625730994152"], + [1758180630, "0"], + [1758183360, "0.03058823529411765"], + [1758183570, "0.027025363399692706"], + [1758183780, "0"], + [1758183990, "0.027407407407407405"], + [1758184200, "0.05398234535978017"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.05845272961120668"], + [1758180000, "0.11073825503355705"], + [1758180210, "0.08833333333333332"], + [1758180420, "0.010185185185185184"], + [1758180630, "0"], + [1758183360, "0.030666666666666665"], + [1758183570, "0.03716714980685261"], + [1758183780, "0.003613139104957199"], + [1758183990, "0.023782051282051287"], + [1758184200, "0.0438697617970321"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.06525141326073895"], + [1758180000, "0.08724832214765102"], + [1758180210, "0.06457516339869282"], + [1758180420, "0.013551912568306011"], + [1758180630, "0"], + [1758183360, "0.027200000000000002"], + [1758183570, "0.05405594328347514"], + [1758183780, "0.018065695524785996"], + [1758183990, "0.044166666666666674"], + [1758184200, "0.06071837997213576"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758179790, "0.06517918755689808"], + [1758180000, "0.10738255033557048"], + [1758180210, "0.06794871794871794"], + [1758180420, "0.0203448275862069"], + [1758180630, "0"], + [1758183360, "0.04427536231884058"], + [1758183570, "0.05744600672515216"], + [1758183780, "0.003613139104957199"], + [1758183990, "0.023782051282051287"], + [1758184200, "0.0337435800986629"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0.030874352000635936"], + [1758180000, "0.07046979865771813"], + [1758180210, "0.06794871794871794"], + [1758180420, "0.020350877192982456"], + [1758180630, "0"], + [1758183360, "0.0272463768115942"], + [1758183570, "0.057428897224347"], + [1758183780, "0.010839417314871598"], + [1758183990, "0.023809523809523808"], + [1758184200, "0.03711041210962389"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.0", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758179790, "0.044596286223140796"], + [1758180000, "0.0738255033557047"], + [1758180210, "0.05096153846153846"], + [1758180420, "0.006799999999999999"], + [1758180630, "0"], + [1758183360, "0.02042553191489362"], + [1758183570, "0.027042198416527732"], + [1758183780, "0.007226278209914398"], + [1758183990, "0.027210884353741496"], + [1758184200, "0.04048675901983513"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758179790, "0.05145725333439322"], + [1758180000, "0.08389261744966443"], + [1758180210, "0.061224489795918366"], + [1758180420, "0.0034027777777777784"], + [1758180630, "0"], + [1758183360, "0.023790849673202618"], + [1758183570, "0.02030557225737187"], + [1758183780, "0.010839417314871598"], + [1758183990, "0.027179487179487184"], + [1758184200, "0.043849458361066004"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.054859012017481966"], + [1758180000, "0.09395973154362416"], + [1758180210, "0.08496732026143791"], + [1758180420, "0.01695402298850575"], + [1758180630, "0"], + [1758183360, "0.0407843137254902"], + [1758183570, "0.05747127614172592"], + [1758183780, "0.010839417314871598"], + [1758183990, "0.027200000000000002"], + [1758184200, "0.04725490102701696"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.0445729472642041"], + [1758180000, "0.07046979865771813"], + [1758180210, "0.05131578947368421"], + [1758180420, "0.01017241379310345"], + [1758180630, "0"], + [1758183360, "0.044183006535947714"], + [1758183570, "0.04731344913029013"], + [1758183780, "0.010839417314871598"], + [1758183990, "0.050980392156862744"], + [1758184200, "0.050601842009466214"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.048052868641352005"], + [1758180000, "0.0738255033557047"], + [1758180210, "0.0407843137254902"], + [1758180420, "0.010175438596491228"], + [1758180630, "0"], + [1758183360, "0.06457516339869282"], + [1758183570, "0.07095546781308225"], + [1758183780, "0.018065695524785996"], + [1758183990, "0.03073170731707317"], + [1758184200, "0.027016314100380346"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758179790, "0.03094556273534471"], + [1758180000, "0.07046979865771813"], + [1758180210, "0.051000000000000004"], + [1758180420, "0.006787878787878787"], + [1758180630, "0"], + [1758183360, "0.0407843137254902"], + [1758183570, "0.027036256645880077"], + [1758183780, "0.007226278209914398"], + [1758183990, "0.02728682170542636"], + [1758184200, "0.04385216331320916"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0.04116580266751458"], + [1758180000, "0.08053691275167786"], + [1758180210, "0.07496296296296295"], + [1758180420, "0.023757575757575755"], + [1758180630, "0"], + [1758183360, "0.023902439024390244"], + [1758183570, "0.04728994657858451"], + [1758183780, "0.007226278209914398"], + [1758183990, "0.034"], + [1758184200, "0.050638263920888126"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.1.1", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758179790, "0.044620520881255434"], + [1758180000, "0.06711409395973156"], + [1758180210, "0.0407843137254902"], + [1758180420, "0.0203448275862069"], + [1758180630, "0"], + [1758183360, "0.04429629629629629"], + [1758183570, "0.03715987467457747"], + [1758183780, "0"], + [1758183990, "0.013600000000000001"], + [1758184200, "0.0337324333178532"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Go-http-client/1.1" + }, + "values": [ + [1758179790, "0.04116580266751458"], + [1758180000, "0.10738255033557048"], + [1758180210, "0.09512820512820512"], + [1758180420, "0.01695402298850575"], + [1758180630, "0"], + [1758183360, "0.047581699346405236"], + [1758183570, "0.057428897224347"], + [1758183780, "0.003613139104957199"], + [1758183990, "0.017063492063492065"], + [1758184200, "0.030363064453328637"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.030908564176139502"], + [1758180000, "0.06375838926174497"], + [1758180210, "0.07503875968992249"], + [1758180420, "0.020377358490566037"], + [1758180630, "0"], + [1758183360, "0.03407407407407407"], + [1758183570, "0.04057276732176129"], + [1758183780, "0.018065695524785996"], + [1758183990, "0.03741496598639456"], + [1758184200, "0.04050420088030025"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.04823323262991619"], + [1758180000, "0.08724832214765102"], + [1758180210, "0.06805555555555555"], + [1758180420, "0"], + [1758180630, "0"], + [1758183360, "0.017028985507246377"], + [1758183570, "0.04392045391782355"], + [1758183780, "0.014452556419828797"], + [1758183990, "0.02038461538461539"], + [1758184200, "0.02362217942917113"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" + }, + "values": [ + [1758179790, "0.04114425901311147"], + [1758180000, "0.06711409395973156"], + [1758180210, "0.06462585034013606"], + [1758180420, "0.01018181818181818"], + [1758180630, "0"], + [1758183360, "0.03746376811594203"], + [1758183570, "0.04729438594946224"], + [1758183780, "0.007226278209914398"], + [1758183990, "0.04415094339622641"], + [1758184200, "0.040495164735721935"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "PostmanRuntime/7.29.0" + }, + "values": [ + [1758179790, "0.05143032376638934"], + [1758180000, "0.09395973154362416"], + [1758180210, "0.07868421052631579"], + [1758180420, "0.0067816091954022995"], + [1758180630, "0"], + [1758183360, "0.03398692810457517"], + [1758183570, "0.054045653232668016"], + [1758183780, "0.010839417314871598"], + [1758183990, "0.03737179487179488"], + [1758184200, "0.04390552127329331"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "Python/3.9 requests/2.25.1" + }, + "values": [ + [1758179790, "0.044620520881255434"], + [1758180000, "0.08053691275167786"], + [1758180210, "0.05775641025641025"], + [1758180420, "0.02037037037037037"], + [1758180630, "0"], + [1758183360, "0.03743055555555555"], + [1758183570, "0.060807067649308585"], + [1758183780, "0.007226278209914398"], + [1758183990, "0.023773584905660377"], + [1758184200, "0.04047891998142384"], + [1758184410, "0"] + ] + }, + { + "metric": { + "container": "http-service", + "endpoint": "metrics", + "exported_endpoint": "unknown", + "instance": "10.42.0.30:8000", + "job": "http-service", + "method": "GET", + "namespace": "app-160", + "pod": "http-service-55898d6cd6-8mk7f", + "region": "us-east-1", + "service": "http-service", + "service_version": "v2.2.0-beta", + "source_ip": "192.168.50.100", + "status_code": "404", + "user_agent": "curl/7.68.0" + }, + "values": [ + [1758179790, "0.02413397882473334"], + [1758180000, "0.04026845637583893"], + [1758180210, "0.05102040816326531"], + [1758180420, "0.016969696969696968"], + [1758180630, "0"], + [1758183360, "0.023790849673202618"], + [1758183570, "0.05069298121102515"], + [1758183780, "0.007226278209914398"], + [1758183990, "0.02047619047619048"], + [1758184200, "0.03374597061310161"], + [1758184410, "0"] + ] + } + ] +} diff --git a/tests/plugins/toolsets/prometheus/test_data_compression.py b/tests/plugins/toolsets/prometheus/test_data_compression.py new file mode 100644 index 000000000..96d0cf984 --- /dev/null +++ b/tests/plugins/toolsets/prometheus/test_data_compression.py @@ -0,0 +1,381 @@ +import json +import os +import pytest +from holmes.plugins.toolsets.prometheus.data_compression import CompressedMetric, Group, RawMetric, find_most_common_label, format_compressed_metrics, format_data, group_metrics, raw_metric_to_compressed_metric, summarize_metrics + + +class TestPrometheusDataCompression: + """Test cases for Prometheus range query data compression.""" + + def test_find_most_common_labels(self): + + metrics = [{ + "metric": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10" + }, + "values": [] + }, + { + "metric": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11" + }, + "values": [] + }, + { + "metric": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12" + }, + "values": [] + }, + { + "metric": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.10", + "source_ip": "192.168.1.30" + }, + "values": [] + } + ] + assert find_most_common_label(metrics=[CompressedMetric(**metric) for metric in metrics], ignore_label_set=set()) == (("exported_endpoint", "api_v1"), 4) + + + def test_find_most_common_labels_none(self): + + metrics = [{ + "labels": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.1", + "source_ip": "192.168.1.10" + }, + "values": [] + }, + { + "labels": { + "exported_endpoint": "api_v2", + "service_version": "v2.0.2", + "source_ip": "192.168.1.11" + }, + "values": [] + }, + { + "labels": { + "exported_endpoint": "api_v3", + "service_version": "v2.0.3", + "source_ip": "192.168.1.12" + }, + "values": [] + }, + { + "labels": { + "exported_endpoint": "api_v4", + "service_version": "v2.0.4", + "source_ip": "192.168.1.30" + }, + "values": [] + } + ] + assert find_most_common_label(metrics=[CompressedMetric(**metric) for metric in metrics], ignore_label_set=None) == (None, 0) + + + def test_group_metrics(self): + + input_metrics = [{ + "labels": set({ + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "http_code": 404 + }.items()), + "values": [ + [1758179790, "10.1"], + [1758180000, "10.2"], + ] + }, + { + "labels": set({ + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11", + "http_code": 404 + }.items()), + "values": [ + [1758180210, "11.1"], + [1758180420, "11.2"], + ] + }, + { + "labels": set({ + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "http_code": 404 + }.items()), + "values": [ + [1758180630, "12.1"], + [1758183360, "12.2"], + ] + }, + { + "labels": set({ + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "http_code": 404 + }.items()), + "values": [ + [1758183570, "12.3"], + [1758183780, "12.4"], + ] + }, + { + "labels": set({ + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.30", + "http_code": 404 + }.items()), + "values": [ + [1758183990, "30.1"], + [1758184200, "30.2"], + ] + }, + { + "labels": set({ + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "http_code": 400 + }.items()), + "values": [ + [1758184410, "12.5"], + [1758184620, "12.6"], + ] + }, + ] + + expected_metrics_raw = [{ + "common_labels": set({ + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "http_code": 404 + }.items()), + "metrics": [{ + "labels": set({ + "source_ip": "192.168.1.10", + }.items()), + "values": [ + [1758179790, "10.1"], + [1758180000, "10.2"], + ] + }, { + "labels": set({ + "source_ip": "192.168.1.11", + }.items()), + "values": [ + [1758180210, "11.1"], + [1758180420, "11.2"], + ] + }, { + "common_labels": set({ + "source_ip": "192.168.1.12", + }.items()), + "metrics": [{ + "labels": set(), + "values": [ + [1758180630, "12.1"], + [1758183360, "12.2"], + ] + }, { + "labels": set(), + "values": [ + [1758184410, "12.3"], + [1758184620, "12.4"], + ] + }] + }] + }, { + "labels": set({ + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "http_code": 400 + }.items()), + "values": [ + [1758184410, "12.5"], + [1758184620, "12.6"], + ] + }] + + expected_metrics = [Group(**metric) if metric.get("common_labels") else CompressedMetric(**metric) for metric in expected_metrics_raw] + + compressed_metrics = group_metrics(metrics_to_process=[CompressedMetric(**metric) for metric in input_metrics]) + print("**** EXPECTED:") + print(format_compressed_metrics(expected_metrics)) + print("**** ACTUAL:") + print(format_compressed_metrics(compressed_metrics)) + assert expected_metrics == compressed_metrics + assert False + + def test_format_data_compressed_metric(self): + metric = CompressedMetric( + labels=set([ + ("exported_endpoint", "api_v1"), + ("http_code", 400) + ]), + values=[ + [1758184410, "12.5"], + [1758184620, "12.6"], + ] + ) + actual_str = format_data(metric) + + expected_str = "labels:\n" + expected_str += " - exported_endpoint: api_v1\n" + expected_str += " - http_code: 400\n" + expected_str += "values:\n" + expected_str += " - 1758184410: 12.5\n" + expected_str += " - 1758184620: 12.6" + + + assert expected_str == actual_str + + +# [ +# { +# "labels": [ +# [ +# "source_ip", +# "192.168.1.48" +# ] +# ], +# "values": [ +# [ +# 1758176010, +# "0.0033761036031960817" +# ], +# [ +# 1758176220, +# "0.003400871250128883" +# ] +# ] +# }, +# { +# "labels": [ +# [ +# "source_ip", +# "192.168.1.48" +# ] +# ], +# "values": [ +# [ +# 1758176010, +# "0.0033761036031960817" +# ], +# [ +# 1758176220, +# "0.003400871250128883" +# ] +# ] +# } +# ] + + + def test_format_data_group(self): + + group = Group( + common_labels=set([ + ("exported_endpoint", "api_v1"), + ("http_code", 400) + ]), + metrics=[ + Group( + common_labels=set([ + ("service_version", "v2.0.9"), + ]), + metrics=[ + CompressedMetric( + labels=set([ + ("source_ip", "192.168.1.13"), + ]), + values=[ + [1758184410, "13.1"], + [1758184620, "13.2"], + ] + ), + CompressedMetric( + labels=set([ + ("source_ip", "192.168.1.14"), + ]), + values=[ + [1758184410, "14.1"], + [1758184620, "14.2"], + ] + ) + ] + ), + CompressedMetric( + labels=set([ + ("source_ip", "192.168.1.12"), + ]), + values=[ + [1758184410, "12.1"], + [1758184620, "12.2"], + ] + ) + ] + ) + + expected_str = "common_labels:\n" + expected_str += " - exported_endpoint: api_v1\n" + expected_str += " - http_code: 400\n" + expected_str += "metrics:\n" + expected_str += " - common_labels:\n" + expected_str += " - service_version: v2.0.9\n" + expected_str += " metrics:\n" + expected_str += " - labels:\n" + expected_str += " - source_ip: 192.168.1.13\n" + expected_str += " values:\n" + expected_str += " - 1758184410: 13.1\n" + expected_str += " - 1758184620: 13.2\n" + expected_str += " - labels:\n" + expected_str += " - source_ip: 192.168.1.14\n" + expected_str += " values:\n" + expected_str += " - 1758184410: 14.1\n" + expected_str += " - 1758184620: 14.2\n" + expected_str += " - labels:\n" + expected_str += " - source_ip: 192.168.1.12\n" + expected_str += " values:\n" + expected_str += " - 1758184410: 12.1\n" + expected_str += " - 1758184620: 12.2" + + + actual_str = format_compressed_metrics([group]) + + print("**** EXPECTED:") + print(expected_str) + print("**** ACTUAL:") + print(actual_str) + + assert expected_str.strip() == actual_str.strip() + + def test_format_data_realistic(self): + example_json_file_path = os.path.join(os.path.dirname(__file__), 'raw_prometheus_data.json') + + with open(example_json_file_path) as file: + data = json.load(file) + metrics_list_dict = data.get("result") + + raw_metrics = [RawMetric(**metric) for metric in metrics_list_dict] + metrics = [raw_metric_to_compressed_metric(metric, remove_labels=set()) for metric in raw_metrics] + + formatted_data = summarize_metrics(metrics) + + print(formatted_data) + assert False + From 911172eae99adc8d7443dcbfbcf7a2a08b74b42e Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Fri, 19 Sep 2025 16:01:49 +0200 Subject: [PATCH 02/13] feat: compression of prometheus data --- holmes/core/tool_calling_llm.py | 2 +- holmes/core/tools.py | 1 - .../tool_context_window_limiter.py | 1 - .../toolsets/prometheus/data_compression.py | 297 ++++++--- .../plugins/toolsets/prometheus/prometheus.py | 47 +- .../http_traffic_generator.py | 616 ++++++++++++------ .../160_http_404_monitoring/manifest.yaml | 2 +- .../prometheus/test_data_compression.py | 579 ++++++++-------- 8 files changed, 974 insertions(+), 571 deletions(-) diff --git a/holmes/core/tool_calling_llm.py b/holmes/core/tool_calling_llm.py index 3b3bfff35..116d3b9d7 100644 --- a/holmes/core/tool_calling_llm.py +++ b/holmes/core/tool_calling_llm.py @@ -704,7 +704,7 @@ def _log_tool_call_result(tool_span, tool_call_result: ToolCallResult): metadata={ "status": tool_call_result.result.status, "description": tool_call_result.description, - "token_count": tool_call_result.size + "token_count": tool_call_result.size, }, ) diff --git a/holmes/core/tools.py b/holmes/core/tools.py index 1d848e31a..0017dd96d 100644 --- a/holmes/core/tools.py +++ b/holmes/core/tools.py @@ -87,7 +87,6 @@ class StructuredToolResult(BaseModel): params: Optional[Dict] = None icon_url: Optional[str] = None - def get_stringified_data(self) -> str: if self.data is None: return "" diff --git a/holmes/core/tools_utils/tool_context_window_limiter.py b/holmes/core/tools_utils/tool_context_window_limiter.py index 5b520d27f..0d54f8086 100644 --- a/holmes/core/tools_utils/tool_context_window_limiter.py +++ b/holmes/core/tools_utils/tool_context_window_limiter.py @@ -11,7 +11,6 @@ def prevent_overly_big_tool_response(tool_call_result: ToolCallResult, llm: LLM) and 0 < TOOL_MAX_ALLOCATED_CONTEXT_WINDOW_PCT and TOOL_MAX_ALLOCATED_CONTEXT_WINDOW_PCT <= 100 ): - if not tool_call_result.size: message = tool_call_result.as_tool_call_message() messages_token = llm.count_tokens_for_message(messages=[message]) diff --git a/holmes/plugins/toolsets/prometheus/data_compression.py b/holmes/plugins/toolsets/prometheus/data_compression.py index 31d03afef..e5bcf5935 100644 --- a/holmes/plugins/toolsets/prometheus/data_compression.py +++ b/holmes/plugins/toolsets/prometheus/data_compression.py @@ -1,55 +1,62 @@ - - import json import logging -import shlex -from sys import exc_info -from typing import Any, List, Dict, Optional, Set, Union +from typing import Any, Optional, Set, Union -from click import group -from numpy import isin from pydantic import BaseModel -import yaml + class RawMetric(BaseModel): - metric: dict[str, Any] # labels - values: list[list[Any]] # typically list of tuples with timestamp as the first value and whatever value as the second + metric: dict[str, Any] # labels + values: list[ + list[Any] + ] # typically list of tuples with timestamp as the first value and whatever value as the second class CompressedMetric(BaseModel): labels: set[tuple[str, Any]] values: list[list[Any]] - + + class Group(BaseModel): common_labels: set[tuple[str, Any]] metrics: list[Union["Group", CompressedMetric]] -def format_labels(labels: set[tuple[str, Any]], section_name:str, line_prefix: str = '') -> list[str]: + +def format_labels( + labels: set[tuple[str, Any]], section_name: str, line_prefix: str = "" +) -> list[str]: lines = [] if labels: - sorted_labels = sorted(labels, key=lambda t: t[0]) # keep label list stable in the outpout by sorting them by key + sorted_labels = sorted( + labels, key=lambda t: t[0] + ) # keep label list stable in the outpout by sorting them by key if len(sorted_labels) <= 10: labels_dict = {} - for (k, v) in sorted_labels: + for k, v in sorted_labels: labels_dict[k] = v lines.append(f"{line_prefix}{section_name} {json.dumps(labels_dict)}") else: - lines.append(line_prefix+section_name) - for (k, v) in sorted_labels: + lines.append(line_prefix + section_name) + for k, v in sorted_labels: lines.append(f"{line_prefix}{INDENT_SPACES}- {str(k)}: {str(v)}") else: raise Exception("No label") return lines + INDENT_SPACES = " " -def format_data(data: Union[Group, CompressedMetric], line_prefix: str = '') -> str: - lines = [] +def format_data(data: Union[Group, CompressedMetric], line_prefix: str = "") -> str: + lines = [] if isinstance(data, CompressedMetric): if not data.labels: - print(f"{line_prefix}{INDENT_SPACES}- CompressedMetric Data has no labels: labels={data.labels} values={data.values}") - raise ValueError(f"CompressedMetric Data has no labels: labels={data.labels} values={data.values}") + print( + f"{line_prefix}{INDENT_SPACES}- CompressedMetric Data has no labels: labels={data.labels} values={data.values}" + ) + raise ValueError( + f"CompressedMetric Data has no labels: labels={data.labels} values={data.values}" + ) lines.extend(format_labels(labels=data.labels, section_name="labels:")) if data.values: lines.append("values:") @@ -60,40 +67,56 @@ def format_data(data: Union[Group, CompressedMetric], line_prefix: str = '') -> txt = "\n".join([line_prefix + line for line in lines]) print(txt) return txt - + elif data.metrics: if not data.common_labels: - print(f"{line_prefix}{INDENT_SPACES}- Group has no labels: labels={data.common_labels} metrics={len(data.metrics)}") - raise ValueError(f"Group has no labels: labels={data.common_labels} metrics={len(data.metrics)}") - group_labels = format_labels(labels=data.common_labels, section_name="common_labels:", line_prefix=line_prefix) + print( + f"{line_prefix}{INDENT_SPACES}- Group has no labels: labels={data.common_labels} metrics={len(data.metrics)}" + ) + raise ValueError( + f"Group has no labels: labels={data.common_labels} metrics={len(data.metrics)}" + ) + group_labels = format_labels( + labels=data.common_labels, + section_name="common_labels:", + line_prefix=line_prefix, + ) print(group_labels) lines.extend(group_labels) lines.append(f"{line_prefix}metrics:") for metric in data.metrics: - metric_lines = format_data(data=metric, line_prefix=line_prefix + (INDENT_SPACES*2)) + metric_lines = format_data( + data=metric, line_prefix=line_prefix + (INDENT_SPACES * 2) + ) if metric_lines: metric_lines = f"{line_prefix}{INDENT_SPACES}- " + metric_lines.lstrip() lines.append(metric_lines) return "\n".join([line for line in lines]) return "" -def format_zero_values_data(data: Union[Group, CompressedMetric], line_prefix: str = '') -> str: - lines = [] +def format_zero_values_data( + data: Union[Group, CompressedMetric], line_prefix: str = "" +) -> str: + lines = [] try: if isinstance(data, CompressedMetric): lines.extend(format_labels(labels=data.labels, section_name="")) txt = "\n".join([line_prefix + line for line in lines]) # print(txt + "\n\n") return txt - + elif data.metrics: - lines.extend(format_labels(labels=data.common_labels, section_name="", line_prefix=line_prefix)) + lines.extend( + format_labels( + labels=data.common_labels, section_name="", line_prefix=line_prefix + ) + ) compress_labels = True - compressed_label_values:list = [] - compress_key:Optional[str] = None + compressed_label_values: list = [] + compress_key: Optional[str] = None # close to the leaves the data may be a high number of metrics differentiated by a single label # Check if it's the case. for metric in data.metrics: @@ -109,13 +132,18 @@ def format_zero_values_data(data: Union[Group, CompressedMetric], line_prefix: s compress_labels = False break if compress_labels and compress_key: - lines.append(f"{line_prefix}{INDENT_SPACES}- {json.dumps({compress_key:compressed_label_values})}") + lines.append( + f"{line_prefix}{INDENT_SPACES}- {json.dumps({compress_key:compressed_label_values})}" + ) else: - for metric in data.metrics: - metric_lines = format_zero_values_data(data=metric, line_prefix=line_prefix + (INDENT_SPACES*2)) + metric_lines = format_zero_values_data( + data=metric, line_prefix=line_prefix + (INDENT_SPACES * 2) + ) if metric_lines: - metric_lines = f"{line_prefix}{INDENT_SPACES}- " + metric_lines.lstrip() + metric_lines = ( + f"{line_prefix}{INDENT_SPACES}- " + metric_lines.lstrip() + ) lines.append(metric_lines) txt = "\n".join([line for line in lines]) # print(txt + "\n\n") @@ -125,39 +153,48 @@ def format_zero_values_data(data: Union[Group, CompressedMetric], line_prefix: s except Exception: logging.error(f"ERROR: {str(data)}", exc_info=True) raise - + return "" + def format_zero_values_metrics(metrics: list[Union[Group, CompressedMetric]]) -> str: - formatted_string = "# Metrics with the following hierarchised labels have NO DATA:\n" + formatted_string = ( + "# Metrics with the following hierarchised labels have NO DATA:\n" + ) for metric in metrics: - formatted_string += format_zero_values_data(metric, line_prefix=INDENT_SPACES) + "\n" + formatted_string += ( + format_zero_values_data(metric, line_prefix=INDENT_SPACES) + "\n" + ) return formatted_string + def format_compressed_metrics(metrics: list[Union[Group, CompressedMetric]]) -> str: - formatted_string = "# The following metrics have been hierarchically grouped by labels:\n" + formatted_string = ( + "# The following metrics have been hierarchically grouped by labels:\n" + ) for metric in metrics: d = format_data(metric, line_prefix=INDENT_SPACES) formatted_string += d + "\n" return formatted_string -def raw_metric_to_compressed_metric(raw_metric:RawMetric, remove_labels: set[tuple[str, Any]]) -> CompressedMetric: - labels:set[tuple[str, Any]] = set() - if remove_labels: - for label in raw_metric.metric.items(): - if label not in remove_labels: - labels.add(label) - else: - labels = set(raw_metric.metric.items()) - return CompressedMetric( - labels=labels, - values=raw_metric.values - ) - + +def raw_metric_to_compressed_metric( + raw_metric: RawMetric, remove_labels: set[tuple[str, Any]] +) -> CompressedMetric: + labels: set[tuple[str, Any]] = set() + if remove_labels: + for label in raw_metric.metric.items(): + if label not in remove_labels: + labels.add(label) + else: + labels = set(raw_metric.metric.items()) + return CompressedMetric(labels=labels, values=raw_metric.values) + + def remove_labels(metric: CompressedMetric, remove_labels: set[tuple[str, Any]]): - labels:set[tuple[str, Any]] = set() + labels: set[tuple[str, Any]] = set() for label in metric.labels: if label not in remove_labels: labels.add(label) @@ -166,17 +203,19 @@ def remove_labels(metric: CompressedMetric, remove_labels: set[tuple[str, Any]]) idx = 0 + class PreFilteredMetrics(BaseModel): metrics_with_only_zero_values: list[CompressedMetric] other_metrics: list[CompressedMetric] + def pre_filter_metrics(metrics: list[CompressedMetric]) -> PreFilteredMetrics: - """ A prefilter before metrics are merged together. + """A prefilter before metrics are merged together. It helps for high cardinality when a lot of metrics have 0 as values. These metrics are grouped and then summarized as zero values """ - metrics_with_only_zero_values:list[CompressedMetric] = [] - other_metrics:list[CompressedMetric] = [] + metrics_with_only_zero_values: list[CompressedMetric] = [] + other_metrics: list[CompressedMetric] = [] for metric in metrics: metric_has_non_zero_value = False for value in metric.values: @@ -189,24 +228,36 @@ def pre_filter_metrics(metrics: list[CompressedMetric]) -> PreFilteredMetrics: return PreFilteredMetrics( metrics_with_only_zero_values=metrics_with_only_zero_values, - other_metrics=other_metrics + other_metrics=other_metrics, ) -def group_metrics(metrics_to_process: list[CompressedMetric], globally_common_labels:set[tuple[str, Any]] = set(), logging_prefix: str = '') -> list[Union[Group, CompressedMetric]]: +def group_metrics( + metrics_to_process: list[CompressedMetric], + globally_common_labels: set[tuple[str, Any]] = set(), + logging_prefix: str = "", +) -> list[Union[Group, CompressedMetric]]: global idx idx = idx + 1 - most_common_label, match_count = find_most_common_label(metrics=metrics_to_process, ignore_label_set = set()) + most_common_label, match_count = find_most_common_label( + metrics=metrics_to_process, ignore_label_set=set() + ) if not globally_common_labels: while most_common_label and match_count == len(metrics_to_process): globally_common_labels.add(most_common_label) - most_common_label, match_count = find_most_common_label(metrics=metrics_to_process, ignore_label_set = globally_common_labels) + most_common_label, match_count = find_most_common_label( + metrics=metrics_to_process, ignore_label_set=globally_common_labels + ) - print(f"{logging_prefix}** FOUND {len(globally_common_labels)} globally common labels") + print( + f"{logging_prefix}** FOUND {len(globally_common_labels)} globally common labels" + ) else: - print(f"\n\n\n{logging_prefix}NESTED group_metrics {globally_common_labels} with #{len(metrics_to_process)} entities\n\n") - groups:list[Union[Group, CompressedMetric]] = [] - unmatched_metrics:list[CompressedMetric] = [] + print( + f"\n\n\n{logging_prefix}NESTED group_metrics {globally_common_labels} with #{len(metrics_to_process)} entities\n\n" + ) + groups: list[Union[Group, CompressedMetric]] = [] + unmatched_metrics: list[CompressedMetric] = [] # Constantly iterate over all metrics trying to extract the most common label # Once we find a common label that matches more than one metric, we try to find other common labels between these metrics # We group the metrics together once we don't find any more common metrics @@ -214,9 +265,11 @@ def group_metrics(metrics_to_process: list[CompressedMetric], globally_common_la unmatched_metrics = metrics_to_process else: while most_common_label and match_count > 1: - print(f"{logging_prefix}** PROCESSING GROUP based on label {most_common_label} #{match_count}") + print( + f"{logging_prefix}** PROCESSING GROUP based on label {most_common_label} #{match_count}" + ) current_group_labels = set() - current_group:list[CompressedMetric] = [] + current_group: list[CompressedMetric] = [] current_group_labels.add(most_common_label) unmatched_metrics = [] for metric_data in metrics_to_process: @@ -225,17 +278,25 @@ def group_metrics(metrics_to_process: list[CompressedMetric], globally_common_la else: unmatched_metrics.append(metric_data) - print(f"{logging_prefix}** Found {len(current_group)} entities in group with common label={current_group_labels}") + print( + f"{logging_prefix}** Found {len(current_group)} entities in group with common label={current_group_labels}" + ) all_group_labels = current_group_labels.union(globally_common_labels) - most_common_label, match_count = find_most_common_label(metrics=current_group, ignore_label_set = all_group_labels) + most_common_label, match_count = find_most_common_label( + metrics=current_group, ignore_label_set=all_group_labels + ) # Keep aggregating all labels that are common with the current group. while match_count == len(current_group): current_group_labels.add(most_common_label) all_group_labels = current_group_labels.union(globally_common_labels) - most_common_label, match_count = find_most_common_label(metrics=current_group, ignore_label_set = all_group_labels) + most_common_label, match_count = find_most_common_label( + metrics=current_group, ignore_label_set=all_group_labels + ) - print(f"{logging_prefix}** Of the {len(current_group)} entities in the current group, the following labels are common: {current_group_labels}") + print( + f"{logging_prefix}** Of the {len(current_group)} entities in the current group, the following labels are common: {current_group_labels}" + ) # We're done with our group as we found no more common labels. # 1. Remove the common labels from all metrics in this group # 2. Recurse to further group metrics within this group @@ -258,15 +319,18 @@ def group_metrics(metrics_to_process: list[CompressedMetric], globally_common_la # else: # print("** WARNING WARNING WARNING WARNING WARNING WARNING WARNING should not happen as we check match_count > 1 for the group") # print(f"{logging_prefix}** Current group is empty. Aie Aie Aie") - groups.append(Group(common_labels=current_group_labels, metrics=current_group)) + groups.append( + Group(common_labels=current_group_labels, metrics=current_group) + ) # else: # print(f"{logging_prefix}- processed group:\n{format_compressed_metrics(list(sub_groups))}\n\n") - # groups.append(Group(common_labels=current_group_labels, metrics=current_group)) + # groups.append(Group(common_labels=current_group_labels, metrics=current_group)) - most_common_label, match_count = find_most_common_label(metrics=unmatched_metrics, ignore_label_set = globally_common_labels) + most_common_label, match_count = find_most_common_label( + metrics=unmatched_metrics, ignore_label_set=globally_common_labels + ) metrics_to_process = unmatched_metrics - # print(f"********************* GROUPS:\n{[g.model_dump() for g in groups]}\n") # print(f"********************* UMATCHED:\n{[m.model_dump() for m in unmatched_metrics]}\n") @@ -277,27 +341,30 @@ def group_metrics(metrics_to_process: list[CompressedMetric], globally_common_la groups.insert(0, metric) if globally_common_labels and len(groups) > 1: - parent_group = Group( - common_labels=globally_common_labels, - metrics=groups - ) + parent_group = Group(common_labels=globally_common_labels, metrics=groups) return [parent_group] else: return groups + def set_default(obj): if isinstance(obj, set): return list(obj) raise TypeError -def summarize_metrics(metrics_to_process: list[CompressedMetric]) -> str: +def summarize_metrics(metrics_to_process: list[CompressedMetric]) -> str: summarized_text = "" print(f"metrics_to_process={len(metrics_to_process)}") filtered_metrics = pre_filter_metrics(metrics=metrics_to_process) - print(f"filtered_metrics.metrics_with_only_zero_values={len(filtered_metrics.metrics_with_only_zero_values)}") + print( + f"filtered_metrics.metrics_with_only_zero_values={len(filtered_metrics.metrics_with_only_zero_values)}" + ) print(f"filtered_metrics.other_metrics={len(filtered_metrics.other_metrics)}") - if len(filtered_metrics.metrics_with_only_zero_values) >= len(filtered_metrics.other_metrics) * 0.1: + if ( + len(filtered_metrics.metrics_with_only_zero_values) + >= len(filtered_metrics.other_metrics) * 0.1 + ): # print(f"ZERO METRICS:{str(filtered_metrics.metrics_with_only_zero_values)}") zero_metrics = group_metrics(filtered_metrics.metrics_with_only_zero_values) # print(f"ZERO METRICS GROUPED:{str(zero_metrics)}") @@ -307,29 +374,61 @@ def summarize_metrics(metrics_to_process: list[CompressedMetric]) -> str: summarized_text += "\n" if filtered_metrics.other_metrics: - print("*************************************************************************************************************") - print("*************************************************************************************************************") - print("*************************************************************************************************************") - print("*************************************************************************************************************") - print("*************************************************************************************************************") - print("*************************************************************************************************************") + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) metrics = group_metrics(metrics_to_process=filtered_metrics.other_metrics) - print(json.dumps([metric.model_dump() for metric in metrics], indent=2, default=set_default)) - print("*************************************************************************************************************") - print("*************************************************************************************************************") - print("*************************************************************************************************************") - print("*************************************************************************************************************") - print("*************************************************************************************************************") - print("*************************************************************************************************************") - print("*************************************************************************************************************") + print( + json.dumps( + [metric.model_dump() for metric in metrics], + indent=2, + default=set_default, + ) + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) + print( + "*************************************************************************************************************" + ) summarized_text += format_compressed_metrics(metrics) return summarized_text - - -def find_most_common_label(metrics: list[CompressedMetric], ignore_label_set: Set[tuple[str, Any]]) -> tuple[Optional[tuple[str, Any]], int]: +def find_most_common_label( + metrics: list[CompressedMetric], ignore_label_set: Set[tuple[str, Any]] +) -> tuple[Optional[tuple[str, Any]], int]: # print(f"find_most_common_label, metrics#={len(metrics)}, ignore_label_set={ignore_label_set}") """ Find label keys and values that are most common across all label sets. @@ -350,7 +449,7 @@ def find_most_common_label(metrics: list[CompressedMetric], ignore_label_set: Se # First, collect all (key, value) pairs and their counts for metric_data in metrics: labels = metric_data.labels - for (key, value) in labels: + for key, value in labels: if (key, value) not in ignore_label_set: label_key = (key, value) label_counts[label_key] = label_counts.get(label_key, 0) + 1 diff --git a/holmes/plugins/toolsets/prometheus/prometheus.py b/holmes/plugins/toolsets/prometheus/prometheus.py index 7c2c27316..b0fa4f58d 100644 --- a/holmes/plugins/toolsets/prometheus/prometheus.py +++ b/holmes/plugins/toolsets/prometheus/prometheus.py @@ -21,7 +21,11 @@ ToolsetTag, ) from holmes.plugins.toolsets.consts import STANDARD_END_DATETIME_TOOL_PARAM_DESCRIPTION -from holmes.plugins.toolsets.prometheus.data_compression import RawMetric, raw_metric_to_compressed_metric, summarize_metrics +from holmes.plugins.toolsets.prometheus.data_compression import ( + RawMetric, + raw_metric_to_compressed_metric, + summarize_metrics, +) from holmes.plugins.toolsets.prometheus.utils import parse_duration_to_seconds from holmes.plugins.toolsets.service_discovery import PrometheusDiscovery from holmes.plugins.toolsets.utils import ( @@ -317,6 +321,7 @@ def add_prometheus_auth(prometheus_auth_header: Optional[str]) -> Dict[str, Any] results["Authorization"] = prometheus_auth_header return results + def create_data_summary_for_large_result( result_data: Dict, query: str, data_size_chars: int, is_range_query: bool = False ) -> Dict[str, Any]: @@ -1365,24 +1370,32 @@ def _invoke( "output_type": output_type, } - llm_data:Optional[str] = None + llm_data: Optional[str] = None # Check if data should be included based on size if self.toolset.config.tool_calls_return_data: result_data = data.get("data", {}) response_data["data"] = result_data - try: metrics_list_dict = result_data.get("result") - raw_metrics = [RawMetric(**metric) for metric in metrics_list_dict] - metrics = [raw_metric_to_compressed_metric(metric, remove_labels=set()) for metric in raw_metrics] + raw_metrics = [ + RawMetric(**metric) for metric in metrics_list_dict + ] + metrics = [ + raw_metric_to_compressed_metric(metric, remove_labels=set()) + for metric in raw_metrics + ] compressed_data = summarize_metrics(metrics) response_data["raw_data"] = result_data original_size = len(json.dumps(result_data)) compressed_size = len(json.dumps(compressed_data)) - compression_ratio = (1 - compressed_size / original_size) * 100 if original_size > 0 else 0 + compression_ratio = ( + (1 - compressed_size / original_size) * 100 + if original_size > 0 + else 0 + ) if compression_ratio > 20: # below this amount it's likely not worth mutating the response @@ -1397,16 +1410,15 @@ def _invoke( f"({compression_ratio:.1f}% reduction). Original data will be used instead." ) - - response_data["compression_info"] = { "original_size_chars": original_size, "compressed_size_chars": compressed_size, - "compression_ratio_percent": round(compression_ratio, 1) + "compression_ratio_percent": round(compression_ratio, 1), } except Exception as e: - logging.warning(f"Failed to compress data: {e}, the original data will be used") - + logging.warning( + f"Failed to compress data: {e}, the original data will be used" + ) data_str_preview = json.dumps(result_data) if llm_data: @@ -1417,10 +1429,16 @@ def _invoke( # In this case the summary is based on the original data and not the compressed data if ( self.toolset.config.query_response_size_limit - and data_size_chars > self.toolset.config.query_response_size_limit + and data_size_chars + > self.toolset.config.query_response_size_limit ): - response_data["data_summary"] = create_data_summary_for_large_result( - response_data["data"], query, data_size_chars, is_range_query=True + response_data["data_summary"] = ( + create_data_summary_for_large_result( + response_data["data"], + query, + data_size_chars, + is_range_query=True, + ) ) # Remove the large data and keep only summary logging.info( @@ -1434,7 +1452,6 @@ def _invoke( f"Data size: {data_size_chars:,} chars exceeded limit of {self.toolset.config.query_response_size_limit:,} chars" ) - data_str = json.dumps(response_data, indent=2) return StructuredToolResult( diff --git a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/http_traffic_generator.py b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/http_traffic_generator.py index 7a22aa9de..37dae4d1c 100644 --- a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/http_traffic_generator.py +++ b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/http_traffic_generator.py @@ -1,83 +1,147 @@ -import os import time import random import json from datetime import datetime import threading from http.server import HTTPServer, BaseHTTPRequestHandler -from urllib.parse import urlparse import prometheus_client from prometheus_client import Counter, Histogram, Gauge import logging -import asyncio -from concurrent.futures import ThreadPoolExecutor # Configure logging -logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +logging.basicConfig( + level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" +) logger = logging.getLogger(__name__) # Massive amount of Prometheus metrics with high cardinality # HTTP request metrics with many dimensions -http_requests_total = Counter('http_requests_total', 'Total HTTP requests', - ['method', 'status_code', 'endpoint', 'user_agent', 'source_ip', 'region', 'service_version']) -http_request_duration = Histogram('http_request_duration_seconds', 'HTTP request duration', - ['method', 'endpoint', 'status_code', 'region', 'user_type']) -http_request_size_bytes = Histogram('http_request_size_bytes', 'HTTP request size in bytes', - ['method', 'endpoint', 'content_type']) -http_response_size_bytes = Histogram('http_response_size_bytes', 'HTTP response size in bytes', - ['method', 'endpoint', 'status_code']) +http_requests_total = Counter( + "http_requests_total", + "Total HTTP requests", + [ + "method", + "status_code", + "endpoint", + "user_agent", + "source_ip", + "region", + "service_version", + ], +) +http_request_duration = Histogram( + "http_request_duration_seconds", + "HTTP request duration", + ["method", "endpoint", "status_code", "region", "user_type"], +) +http_request_size_bytes = Histogram( + "http_request_size_bytes", + "HTTP request size in bytes", + ["method", "endpoint", "content_type"], +) +http_response_size_bytes = Histogram( + "http_response_size_bytes", + "HTTP response size in bytes", + ["method", "endpoint", "status_code"], +) # Connection metrics -current_connections = Gauge('http_current_connections', 'Current HTTP connections', ['endpoint', 'region']) -connection_duration = Histogram('http_connection_duration_seconds', 'Connection duration', ['region']) +current_connections = Gauge( + "http_current_connections", "Current HTTP connections", ["endpoint", "region"] +) +connection_duration = Histogram( + "http_connection_duration_seconds", "Connection duration", ["region"] +) # Application metrics -app_requests_per_second = Gauge('app_requests_per_second', 'Requests per second', ['endpoint', 'method']) -app_error_rate = Gauge('app_error_rate', 'Error rate percentage', ['endpoint', 'error_type']) -app_latency_p95 = Gauge('app_latency_p95_seconds', 'P95 latency', ['endpoint']) -app_latency_p99 = Gauge('app_latency_p99_seconds', 'P99 latency', ['endpoint']) +app_requests_per_second = Gauge( + "app_requests_per_second", "Requests per second", ["endpoint", "method"] +) +app_error_rate = Gauge( + "app_error_rate", "Error rate percentage", ["endpoint", "error_type"] +) +app_latency_p95 = Gauge("app_latency_p95_seconds", "P95 latency", ["endpoint"]) +app_latency_p99 = Gauge("app_latency_p99_seconds", "P99 latency", ["endpoint"]) # Business metrics -business_revenue_per_request = Gauge('business_revenue_per_request_usd', 'Revenue per request', ['product_category']) -business_conversion_rate = Gauge('business_conversion_rate', 'Conversion rate', ['traffic_source', 'user_segment']) -business_cart_abandonment = Gauge('business_cart_abandonment_rate', 'Cart abandonment rate', ['user_type']) +business_revenue_per_request = Gauge( + "business_revenue_per_request_usd", "Revenue per request", ["product_category"] +) +business_conversion_rate = Gauge( + "business_conversion_rate", "Conversion rate", ["traffic_source", "user_segment"] +) +business_cart_abandonment = Gauge( + "business_cart_abandonment_rate", "Cart abandonment rate", ["user_type"] +) # Infrastructure metrics -infra_cpu_usage = Gauge('infra_cpu_usage_percent', 'CPU usage', ['instance', 'region', 'availability_zone']) -infra_memory_usage = Gauge('infra_memory_usage_percent', 'Memory usage', ['instance', 'region']) -infra_disk_io = Gauge('infra_disk_io_ops_per_sec', 'Disk I/O operations', ['instance', 'disk_type']) -infra_network_bytes = Counter('infra_network_bytes_total', 'Network bytes', ['instance', 'direction', 'interface']) +infra_cpu_usage = Gauge( + "infra_cpu_usage_percent", "CPU usage", ["instance", "region", "availability_zone"] +) +infra_memory_usage = Gauge( + "infra_memory_usage_percent", "Memory usage", ["instance", "region"] +) +infra_disk_io = Gauge( + "infra_disk_io_ops_per_sec", "Disk I/O operations", ["instance", "disk_type"] +) +infra_network_bytes = Counter( + "infra_network_bytes_total", "Network bytes", ["instance", "direction", "interface"] +) # Database metrics -db_query_duration = Histogram('db_query_duration_seconds', 'Database query duration', - ['database', 'table', 'operation', 'index_used']) -db_connections_active = Gauge('db_connections_active', 'Active database connections', ['database', 'user', 'host']) -db_slow_queries = Counter('db_slow_queries_total', 'Slow database queries', ['database', 'table']) +db_query_duration = Histogram( + "db_query_duration_seconds", + "Database query duration", + ["database", "table", "operation", "index_used"], +) +db_connections_active = Gauge( + "db_connections_active", "Active database connections", ["database", "user", "host"] +) +db_slow_queries = Counter( + "db_slow_queries_total", "Slow database queries", ["database", "table"] +) # Cache metrics -cache_hits = Counter('cache_hits_total', 'Cache hits', ['cache_type', 'key_pattern', 'region']) -cache_misses = Counter('cache_misses_total', 'Cache misses', ['cache_type', 'key_pattern', 'region']) -cache_evictions = Counter('cache_evictions_total', 'Cache evictions', ['cache_type', 'reason']) +cache_hits = Counter( + "cache_hits_total", "Cache hits", ["cache_type", "key_pattern", "region"] +) +cache_misses = Counter( + "cache_misses_total", "Cache misses", ["cache_type", "key_pattern", "region"] +) +cache_evictions = Counter( + "cache_evictions_total", "Cache evictions", ["cache_type", "reason"] +) # Security metrics -security_failed_logins = Counter('security_failed_logins_total', 'Failed login attempts', ['source_ip', 'username']) -security_blocked_requests = Counter('security_blocked_requests_total', 'Blocked requests', ['rule_id', 'source_ip', 'endpoint']) -security_suspicious_activity = Counter('security_suspicious_activity_total', 'Suspicious activity', ['activity_type', 'severity']) +security_failed_logins = Counter( + "security_failed_logins_total", "Failed login attempts", ["source_ip", "username"] +) +security_blocked_requests = Counter( + "security_blocked_requests_total", + "Blocked requests", + ["rule_id", "source_ip", "endpoint"], +) +security_suspicious_activity = Counter( + "security_suspicious_activity_total", + "Suspicious activity", + ["activity_type", "severity"], +) + class HTTPMetricsHandler(BaseHTTPRequestHandler): """HTTP request handler that generates realistic traffic patterns""" def do_GET(self): - self.handle_request('GET') + self.handle_request("GET") def do_POST(self): - self.handle_request('POST') + self.handle_request("POST") def do_PUT(self): - self.handle_request('PUT') + self.handle_request("PUT") def do_DELETE(self): - self.handle_request('DELETE') + self.handle_request("DELETE") def handle_request(self, method): start_time = time.time() @@ -89,13 +153,19 @@ def handle_request(self, method): # Generate rich context for metrics region = self.get_region_from_ip(client_ip) user_agent = self.get_user_agent() - service_version = random.choice(['v2.1.0', 'v2.1.1', 'v2.0.9', 'v2.2.0-beta']) + service_version = random.choice( + ["v2.1.0", "v2.1.1", "v2.0.9", "v2.2.0-beta"] + ) user_type = self.get_user_type(client_ip) - current_connections.labels(endpoint=self.get_endpoint_category(path), region=region).inc() + current_connections.labels( + endpoint=self.get_endpoint_category(path), region=region + ).inc() # Determine response based on path and client - status_code, response_data = self.determine_response(path, client_ip, method) + status_code, response_data = self.determine_response( + path, client_ip, method + ) # Add realistic response time variation response_time = self.calculate_response_time(path, status_code) @@ -103,38 +173,60 @@ def handle_request(self, method): # Calculate request/response sizes request_size = random.randint(200, 2000) - response_size = len(json.dumps(response_data).encode()) if response_data else random.randint(100, 500) + response_size = ( + len(json.dumps(response_data).encode()) + if response_data + else random.randint(100, 500) + ) # Send response self.send_response(status_code) - self.send_header('Content-Type', 'application/json' if status_code == 200 else 'text/plain') - self.send_header('Server', f'ProductionAPI/{service_version}') + self.send_header( + "Content-Type", + "application/json" if status_code == 200 else "text/plain", + ) + self.send_header("Server", f"ProductionAPI/{service_version}") self.end_headers() if status_code == 200: self.wfile.write(json.dumps(response_data).encode()) else: - self.wfile.write(b'Not Found' if status_code == 404 else b'Error') + self.wfile.write(b"Not Found" if status_code == 404 else b"Error") # Record extensive metrics with high cardinality endpoint = self.get_endpoint_category(path) - content_type = 'application/json' if status_code == 200 else 'text/plain' + content_type = "application/json" if status_code == 200 else "text/plain" # HTTP metrics http_requests_total.labels( - method=method, status_code=str(status_code), endpoint=endpoint, - user_agent=user_agent, source_ip=client_ip, region=region, service_version=service_version + method=method, + status_code=str(status_code), + endpoint=endpoint, + user_agent=user_agent, + source_ip=client_ip, + region=region, + service_version=service_version, ).inc() http_request_duration.labels( - method=method, endpoint=endpoint, status_code=str(status_code), region=region, user_type=user_type + method=method, + endpoint=endpoint, + status_code=str(status_code), + region=region, + user_type=user_type, ).observe(time.time() - start_time) - http_request_size_bytes.labels(method=method, endpoint=endpoint, content_type=content_type).observe(request_size) - http_response_size_bytes.labels(method=method, endpoint=endpoint, status_code=str(status_code)).observe(response_size) + http_request_size_bytes.labels( + method=method, endpoint=endpoint, content_type=content_type + ).observe(request_size) + http_response_size_bytes.labels( + method=method, endpoint=endpoint, status_code=str(status_code) + ).observe(response_size) # Application metrics - self.record_application_metrics(endpoint, method, status_code, response_time) + self.record_application_metrics( + endpoint, method, status_code, response_time + ) # Business metrics self.record_business_metrics(path, status_code, user_type) @@ -156,174 +248,213 @@ def handle_request(self, method): # Log the request (reduced logging to avoid spam) if random.random() < 0.01: # Log only 1% of requests - logger.info(f"{client_ip} - {method} {path} - {status_code} - {response_time:.3f}s") + logger.info( + f"{client_ip} - {method} {path} - {status_code} - {response_time:.3f}s" + ) except Exception as e: logger.error(f"Error handling request: {e}") finally: - current_connections.labels(endpoint=self.get_endpoint_category(path), region=self.get_region_from_ip(client_ip)).dec() + current_connections.labels( + endpoint=self.get_endpoint_category(path), + region=self.get_region_from_ip(client_ip), + ).dec() def get_region_from_ip(self, ip): """Map IP ranges to regions""" - if ip.startswith('192.168.1.'): - return 'us-east-1' - elif ip.startswith('192.168.2.'): - return 'us-west-2' - elif ip.startswith('10.0.'): - return 'eu-central-1' - elif ip.startswith('172.16.'): - return 'ap-southeast-1' + if ip.startswith("192.168.1."): + return "us-east-1" + elif ip.startswith("192.168.2."): + return "us-west-2" + elif ip.startswith("10.0."): + return "eu-central-1" + elif ip.startswith("172.16."): + return "ap-southeast-1" else: - return 'us-east-1' + return "us-east-1" def get_user_agent(self): """Generate realistic user agents""" agents = [ - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36', - 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36', - 'PostmanRuntime/7.29.0', - 'curl/7.68.0', - 'Go-http-client/1.1', - 'Python/3.9 requests/2.25.1' + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36", + "PostmanRuntime/7.29.0", + "curl/7.68.0", + "Go-http-client/1.1", + "Python/3.9 requests/2.25.1", ] return random.choice(agents) def get_user_type(self, ip): """Determine user type based on IP""" - if ip == '192.168.50.100': - return 'scanner' - elif ip.startswith('192.168.1.'): - return 'premium' - elif ip.startswith('10.0.'): - return 'enterprise' + if ip == "192.168.50.100": + return "scanner" + elif ip.startswith("192.168.1."): + return "premium" + elif ip.startswith("10.0."): + return "enterprise" else: - return 'regular' + return "regular" def record_application_metrics(self, endpoint, method, status_code, response_time): """Record application-level metrics""" - app_requests_per_second.labels(endpoint=endpoint, method=method).set(random.uniform(50, 500)) + app_requests_per_second.labels(endpoint=endpoint, method=method).set( + random.uniform(50, 500) + ) if status_code >= 400: - error_type = 'client_error' if status_code < 500 else 'server_error' - app_error_rate.labels(endpoint=endpoint, error_type=error_type).set(random.uniform(0.5, 5.0)) + error_type = "client_error" if status_code < 500 else "server_error" + app_error_rate.labels(endpoint=endpoint, error_type=error_type).set( + random.uniform(0.5, 5.0) + ) app_latency_p95.labels(endpoint=endpoint).set(response_time * 1.5) app_latency_p99.labels(endpoint=endpoint).set(response_time * 2.0) def record_business_metrics(self, path, status_code, user_type): """Record business-level metrics""" - if '/api/v1/products' in path: - category = random.choice(['electronics', 'clothing', 'books', 'home']) - business_revenue_per_request.labels(product_category=category).set(random.uniform(10, 200)) + if "/api/v1/products" in path: + category = random.choice(["electronics", "clothing", "books", "home"]) + business_revenue_per_request.labels(product_category=category).set( + random.uniform(10, 200) + ) - if status_code == 200 and user_type != 'scanner': - traffic_source = random.choice(['organic', 'paid', 'social', 'direct']) - user_segment = random.choice(['new', 'returning', 'vip']) - business_conversion_rate.labels(traffic_source=traffic_source, user_segment=user_segment).set(random.uniform(0.02, 0.15)) + if status_code == 200 and user_type != "scanner": + traffic_source = random.choice(["organic", "paid", "social", "direct"]) + user_segment = random.choice(["new", "returning", "vip"]) + business_conversion_rate.labels( + traffic_source=traffic_source, user_segment=user_segment + ).set(random.uniform(0.02, 0.15)) - business_cart_abandonment.labels(user_type=user_type).set(random.uniform(0.3, 0.7)) + business_cart_abandonment.labels(user_type=user_type).set( + random.uniform(0.3, 0.7) + ) def record_infrastructure_metrics(self, region): """Record infrastructure metrics for multiple instances""" for i in range(random.randint(3, 8)): # 3-8 instances per region - instance = f'i-{random.randint(100000, 999999):06d}' + instance = f"i-{random.randint(100000, 999999):06d}" az = f'{region}{random.choice(["a", "b", "c"])}' - infra_cpu_usage.labels(instance=instance, region=region, availability_zone=az).set(random.uniform(20, 90)) - infra_memory_usage.labels(instance=instance, region=region).set(random.uniform(40, 85)) + infra_cpu_usage.labels( + instance=instance, region=region, availability_zone=az + ).set(random.uniform(20, 90)) + infra_memory_usage.labels(instance=instance, region=region).set( + random.uniform(40, 85) + ) - disk_type = random.choice(['gp2', 'gp3', 'io1', 'nvme']) - infra_disk_io.labels(instance=instance, disk_type=disk_type).set(random.uniform(100, 2000)) + disk_type = random.choice(["gp2", "gp3", "io1", "nvme"]) + infra_disk_io.labels(instance=instance, disk_type=disk_type).set( + random.uniform(100, 2000) + ) - for direction in ['in', 'out']: - for interface in ['eth0', 'eth1']: - infra_network_bytes.labels(instance=instance, direction=direction, interface=interface).inc( - random.randint(1000, 50000) - ) + for direction in ["in", "out"]: + for interface in ["eth0", "eth1"]: + infra_network_bytes.labels( + instance=instance, direction=direction, interface=interface + ).inc(random.randint(1000, 50000)) def record_database_metrics(self, endpoint): """Record database metrics""" - databases = ['users_db', 'products_db', 'orders_db', 'analytics_db'] - tables = ['users', 'products', 'orders', 'sessions', 'events', 'inventory'] - operations = ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] + databases = ["users_db", "products_db", "orders_db", "analytics_db"] + tables = ["users", "products", "orders", "sessions", "events", "inventory"] + operations = ["SELECT", "INSERT", "UPDATE", "DELETE"] for _ in range(random.randint(1, 3)): # 1-3 queries per request db = random.choice(databases) table = random.choice(tables) operation = random.choice(operations) - index_used = random.choice(['primary', 'idx_timestamp', 'idx_user_id', 'none']) - - db_query_duration.labels(database=db, table=table, operation=operation, index_used=index_used).observe( - random.uniform(0.001, 0.1) + index_used = random.choice( + ["primary", "idx_timestamp", "idx_user_id", "none"] ) + db_query_duration.labels( + database=db, table=table, operation=operation, index_used=index_used + ).observe(random.uniform(0.001, 0.1)) + if random.random() < 0.05: # 5% slow queries db_slow_queries.labels(database=db, table=table).inc() # Connection pools for db in databases: - for user in ['app_user', 'readonly_user', 'admin_user']: - for host in ['db-primary', 'db-replica-1', 'db-replica-2']: - db_connections_active.labels(database=db, user=user, host=host).set(random.randint(5, 50)) + for user in ["app_user", "readonly_user", "admin_user"]: + for host in ["db-primary", "db-replica-1", "db-replica-2"]: + db_connections_active.labels(database=db, user=user, host=host).set( + random.randint(5, 50) + ) def record_cache_metrics(self, endpoint, region): """Record cache metrics""" - cache_types = ['redis', 'memcached', 'local'] - key_patterns = ['user:*', 'product:*', 'session:*', 'config:*', 'temp:*'] + cache_types = ["redis", "memcached", "local"] + key_patterns = ["user:*", "product:*", "session:*", "config:*", "temp:*"] for cache_type in cache_types: for key_pattern in key_patterns: if random.random() < 0.8: # 80% cache hit rate - cache_hits.labels(cache_type=cache_type, key_pattern=key_pattern, region=region).inc() + cache_hits.labels( + cache_type=cache_type, key_pattern=key_pattern, region=region + ).inc() else: - cache_misses.labels(cache_type=cache_type, key_pattern=key_pattern, region=region).inc() + cache_misses.labels( + cache_type=cache_type, key_pattern=key_pattern, region=region + ).inc() if random.random() < 0.02: # 2% eviction rate - reason = random.choice(['memory_pressure', 'ttl_expired', 'manual']) + reason = random.choice(["memory_pressure", "ttl_expired", "manual"]) cache_evictions.labels(cache_type=cache_type, reason=reason).inc() def record_security_metrics(self, client_ip, path, status_code, user_agent): """Record security-related metrics""" # Failed login attempts - if '/api/auth/login' in path and status_code == 401: - username = f'user_{random.randint(1000, 9999)}' + if "/api/auth/login" in path and status_code == 401: + username = f"user_{random.randint(1000, 9999)}" security_failed_logins.labels(source_ip=client_ip, username=username).inc() # Blocked requests (for scanning IPs) - if client_ip == '192.168.50.100' and status_code == 404: - rule_id = random.choice(['WAF_001', 'WAF_002', 'RATE_LIMIT', 'BLACKLIST']) - security_blocked_requests.labels(rule_id=rule_id, source_ip=client_ip, endpoint=path).inc() + if client_ip == "192.168.50.100" and status_code == 404: + rule_id = random.choice(["WAF_001", "WAF_002", "RATE_LIMIT", "BLACKLIST"]) + security_blocked_requests.labels( + rule_id=rule_id, source_ip=client_ip, endpoint=path + ).inc() - activity_type = random.choice(['path_traversal', 'sql_injection', 'xss_attempt', 'scanner']) - severity = 'high' if activity_type in ['sql_injection', 'path_traversal'] else 'medium' - security_suspicious_activity.labels(activity_type=activity_type, severity=severity).inc() + activity_type = random.choice( + ["path_traversal", "sql_injection", "xss_attempt", "scanner"] + ) + severity = ( + "high" + if activity_type in ["sql_injection", "path_traversal"] + else "medium" + ) + security_suspicious_activity.labels( + activity_type=activity_type, severity=severity + ).inc() def determine_response(self, path, client_ip, method): """Determine response based on path and client IP""" # Special handling for the problematic IP (192.168.50.100) - if client_ip == '192.168.50.100': + if client_ip == "192.168.50.100": # Always return 404 for this IP to simulate scanning/probing return 404, None # Valid endpoints that should return 200 valid_endpoints = [ - '/api/v1/users', - '/api/v1/products', - '/api/v1/orders', - '/api/v1/inventory', - '/api/v1/analytics', - '/api/v1/health', - '/api/v2/users', - '/api/v2/products', - '/health', - '/metrics', - '/status', - '/api/auth/login', - '/api/auth/logout', - '/api/dashboard', - '/api/reports' + "/api/v1/users", + "/api/v1/products", + "/api/v1/orders", + "/api/v1/inventory", + "/api/v1/analytics", + "/api/v1/health", + "/api/v2/users", + "/api/v2/products", + "/health", + "/metrics", + "/status", + "/api/auth/login", + "/api/auth/logout", + "/api/dashboard", + "/api/reports", ] # Check if it's a valid endpoint @@ -333,7 +464,10 @@ def determine_response(self, path, client_ip, method): return 200, { "status": "success", "timestamp": datetime.now().isoformat(), - "data": {"id": random.randint(1, 10000), "value": random.randint(1, 100)} + "data": { + "id": random.randint(1, 10000), + "value": random.randint(1, 100), + }, } else: # Background errors - mix of 500 and 404 @@ -350,30 +484,31 @@ def calculate_response_time(self, path, status_code): return base_time + random.uniform(0.001, 0.005) # Fast 404s # Different endpoints have different response time patterns - if '/api/v1/analytics' in path or '/api/reports' in path: + if "/api/v1/analytics" in path or "/api/reports" in path: return base_time + random.uniform(0.1, 0.5) # Slower analytics - elif '/api/v1/products' in path or '/api/v1/inventory' in path: + elif "/api/v1/products" in path or "/api/v1/inventory" in path: return base_time + random.uniform(0.02, 0.1) # Medium database queries else: return base_time + random.uniform(0.005, 0.03) # Fast API calls def get_endpoint_category(self, path): """Categorize endpoint for metrics""" - if path.startswith('/api/v1/'): - return 'api_v1' - elif path.startswith('/api/v2/'): - return 'api_v2' - elif path.startswith('/api/'): - return 'api_other' - elif path in ['/health', '/status', '/metrics']: - return 'system' + if path.startswith("/api/v1/"): + return "api_v1" + elif path.startswith("/api/v2/"): + return "api_v2" + elif path.startswith("/api/"): + return "api_other" + elif path in ["/health", "/status", "/metrics"]: + return "system" else: - return 'unknown' + return "unknown" def log_message(self, format, *args): """Suppress default HTTP server logging""" pass + class TrafficGenerator: """Generates massive volumes of realistic HTTP traffic patterns""" @@ -383,70 +518,157 @@ def __init__(self): self.background_ips = [] # Generate 200+ unique IPs across different subnets - for subnet in ['192.168.1', '192.168.2', '10.0.1', '10.0.2', '10.0.3', '172.16.0', '172.16.1', '172.17.0']: + for subnet in [ + "192.168.1", + "192.168.2", + "10.0.1", + "10.0.2", + "10.0.3", + "172.16.0", + "172.16.1", + "172.17.0", + ]: for i in range(25): - self.background_ips.append(f'{subnet}.{i + 10}') + self.background_ips.append(f"{subnet}.{i + 10}") # Add enterprise ranges for i in range(50): - self.background_ips.append(f'10.100.{random.randint(1,10)}.{i + 100}') + self.background_ips.append(f"10.100.{random.randint(1,10)}.{i + 100}") # Add cloud provider ranges for i in range(30): - self.background_ips.append(f'172.31.{random.randint(1,15)}.{i + 50}') + self.background_ips.append(f"172.31.{random.randint(1,15)}.{i + 50}") - self.problematic_ip = '192.168.50.100' + self.problematic_ip = "192.168.50.100" # Massive number of endpoints to create high cardinality self.endpoints = [] # Core API endpoints - base_endpoints = ['/api/v1/users', '/api/v1/products', '/api/v1/orders', '/api/v1/inventory', - '/api/v1/analytics', '/api/v1/health', '/api/v2/users', '/api/v2/products', - '/health', '/metrics', '/api/auth/login', '/api/auth/logout', '/api/dashboard', - '/api/reports', '/status'] + base_endpoints = [ + "/api/v1/users", + "/api/v1/products", + "/api/v1/orders", + "/api/v1/inventory", + "/api/v1/analytics", + "/api/v1/health", + "/api/v2/users", + "/api/v2/products", + "/health", + "/metrics", + "/api/auth/login", + "/api/auth/logout", + "/api/dashboard", + "/api/reports", + "/status", + ] # Add parameterized versions to create high cardinality for base in base_endpoints: self.endpoints.append(base) # Add ID-based endpoints for i in range(10): - if 'users' in base or 'products' in base or 'orders' in base: - self.endpoints.append(f'{base}/{random.randint(1000, 9999)}') + if "users" in base or "products" in base or "orders" in base: + self.endpoints.append(f"{base}/{random.randint(1000, 9999)}") # Add microservice endpoints - services = ['user-service', 'product-service', 'order-service', 'payment-service', - 'inventory-service', 'notification-service', 'analytics-service', 'auth-service'] + services = [ + "user-service", + "product-service", + "order-service", + "payment-service", + "inventory-service", + "notification-service", + "analytics-service", + "auth-service", + ] for service in services: - for endpoint in ['health', 'metrics', 'status', 'config', 'info']: - self.endpoints.append(f'/api/{service}/{endpoint}') + for endpoint in ["health", "metrics", "status", "config", "info"]: + self.endpoints.append(f"/api/{service}/{endpoint}") # Add versioned endpoints - for version in ['v1', 'v2']: - self.endpoints.append(f'/api/{version}/{service}/{endpoint}') + for version in ["v1", "v2"]: + self.endpoints.append(f"/api/{version}/{service}/{endpoint}") # Add resource-specific endpoints with IDs - resources = ['customers', 'invoices', 'transactions', 'subscriptions', 'campaigns', 'segments'] + resources = [ + "customers", + "invoices", + "transactions", + "subscriptions", + "campaigns", + "segments", + ] for resource in resources: - self.endpoints.append(f'/api/v1/{resource}') + self.endpoints.append(f"/api/v1/{resource}") for i in range(20): # Add individual resource endpoints - self.endpoints.append(f'/api/v1/{resource}/{random.randint(10000, 99999)}') + self.endpoints.append( + f"/api/v1/{resource}/{random.randint(10000, 99999)}" + ) # Scanning endpoints used by the problematic IP (expanded) self.scan_endpoints = [ - '/admin', '/admin.php', '/wp-admin', '/phpmyadmin', '/config', '/backup', '/test', - '/api/v3/admin', '/debug', '/console', '/manager', '/status/internal', '/api/internal', - '/system', '/root', '/.env', '/phpinfo.php', '/wp-config.php', '/database.sql', - '/backup.sql', '/admin/login', '/administrator', '/cpanel', '/webmail', '/ftp', - '/ssh', '/telnet', '/mysql', '/postgres', '/redis', '/mongodb', '/elasticsearch', - '/.git/config', '/.svn', '/cgi-bin', '/scripts', '/includes', '/uploads', - '/tmp', '/temp', '/cache', '/logs', '/private', '/secrets', '/keys', - '/api/admin', '/api/debug', '/api/test', '/api/internal/health', '/admin/dashboard', - '/management', '/monitoring', '/grafana', '/prometheus', '/kibana', '/jenkins' + "/admin", + "/admin.php", + "/wp-admin", + "/phpmyadmin", + "/config", + "/backup", + "/test", + "/api/v3/admin", + "/debug", + "/console", + "/manager", + "/status/internal", + "/api/internal", + "/system", + "/root", + "/.env", + "/phpinfo.php", + "/wp-config.php", + "/database.sql", + "/backup.sql", + "/admin/login", + "/administrator", + "/cpanel", + "/webmail", + "/ftp", + "/ssh", + "/telnet", + "/mysql", + "/postgres", + "/redis", + "/mongodb", + "/elasticsearch", + "/.git/config", + "/.svn", + "/cgi-bin", + "/scripts", + "/includes", + "/uploads", + "/tmp", + "/temp", + "/cache", + "/logs", + "/private", + "/secrets", + "/keys", + "/api/admin", + "/api/debug", + "/api/test", + "/api/internal/health", + "/admin/dashboard", + "/management", + "/monitoring", + "/grafana", + "/prometheus", + "/kibana", + "/jenkins", ] def start_background_traffic(self): """Generate massive continuous background HTTP traffic with multiple threads""" + def generate_requests(thread_id): while self.running: try: @@ -460,7 +682,9 @@ def generate_requests(thread_id): # Select random source IP (background traffic) source_ip = random.choice(self.background_ips) endpoint = random.choice(self.endpoints) - method = random.choice(['GET', 'GET', 'GET', 'GET', 'POST', 'PUT', 'DELETE']) # GET is most common + method = random.choice( + ["GET", "GET", "GET", "GET", "POST", "PUT", "DELETE"] + ) # GET is most common # Simulate the request (we'll let the server handle actual response) self.log_simulated_request(source_ip, method, endpoint) @@ -472,7 +696,9 @@ def generate_requests(thread_id): time.sleep(random.uniform(0.1, 0.5)) except Exception as e: - logger.error(f"Error in background traffic generation thread {thread_id}: {e}") + logger.error( + f"Error in background traffic generation thread {thread_id}: {e}" + ) time.sleep(1) # Start multiple threads to generate massive traffic @@ -487,6 +713,7 @@ def generate_requests(thread_id): def start_periodic_404_traffic(self): """Generate massive periodic 404 traffic from problematic IP every 3 minutes""" + def generate_404_requests(): while self.running: try: @@ -496,26 +723,32 @@ def generate_404_requests(): if not self.running: break - logger.info(f"Starting massive 404 burst from {self.problematic_ip}") + logger.info( + f"Starting massive 404 burst from {self.problematic_ip}" + ) # Generate massive burst of 404 requests (50% spike rate) # With 8 threads * 100-500 requests = 800-4000 requests per batch # So 404 burst should be 400-2000 requests to be 50% - burst_requests = random.randint(1000, 2000) # Large burst to test context limits + burst_requests = random.randint( + 1000, 2000 + ) # Large burst to test context limits for i in range(burst_requests): if not self.running: break endpoint = random.choice(self.scan_endpoints) - method = 'GET' # Scanners typically use GET + method = "GET" # Scanners typically use GET self.send_request(self.problematic_ip, method, endpoint) # Very fast succession of requests to create high volume time.sleep(random.uniform(0.01, 0.05)) - logger.info(f"Completed massive 404 burst: {burst_requests} requests from {self.problematic_ip}") + logger.info( + f"Completed massive 404 burst: {burst_requests} requests from {self.problematic_ip}" + ) except Exception as e: logger.error(f"Error in 404 traffic generation: {e}") @@ -533,6 +766,7 @@ def stop(self): """Stop traffic generation""" self.running = False + def start_prometheus_server(port=8000): """Start Prometheus metrics server""" try: @@ -541,6 +775,7 @@ def start_prometheus_server(port=8000): except Exception as e: logger.error(f"Failed to start Prometheus server: {e}") + def main(): logger.info("Starting HTTP Traffic Generator and Server") @@ -551,13 +786,13 @@ def main(): traffic_gen = TrafficGenerator() # Start background traffic generation - bg_thread = traffic_gen.start_background_traffic() + traffic_gen.start_background_traffic() # Start periodic 404 traffic - scan_thread = traffic_gen.start_periodic_404_traffic() + traffic_gen.start_periodic_404_traffic() # Start HTTP server - server_address = ('0.0.0.0', 8080) + server_address = ("0.0.0.0", 8080) httpd = HTTPServer(server_address, HTTPMetricsHandler) logger.info("HTTP server listening on port 8080") @@ -572,5 +807,6 @@ def main(): httpd.shutdown() httpd.server_close() + if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/manifest.yaml b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/manifest.yaml index 487e32ddc..19e97e663 100644 --- a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/manifest.yaml +++ b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/manifest.yaml @@ -754,4 +754,4 @@ spec: cpu: "100m" limits: memory: "256Mi" - cpu: "500m" \ No newline at end of file + cpu: "500m" diff --git a/tests/plugins/toolsets/prometheus/test_data_compression.py b/tests/plugins/toolsets/prometheus/test_data_compression.py index 96d0cf984..b61b8d669 100644 --- a/tests/plugins/toolsets/prometheus/test_data_compression.py +++ b/tests/plugins/toolsets/prometheus/test_data_compression.py @@ -1,220 +1,272 @@ import json import os -import pytest -from holmes.plugins.toolsets.prometheus.data_compression import CompressedMetric, Group, RawMetric, find_most_common_label, format_compressed_metrics, format_data, group_metrics, raw_metric_to_compressed_metric, summarize_metrics +from holmes.plugins.toolsets.prometheus.data_compression import ( + CompressedMetric, + Group, + RawMetric, + find_most_common_label, + format_compressed_metrics, + format_data, + group_metrics, + raw_metric_to_compressed_metric, + summarize_metrics, +) class TestPrometheusDataCompression: """Test cases for Prometheus range query data compression.""" def test_find_most_common_labels(self): - - metrics = [{ - "metric": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.10" + metrics = [ + { + "metric": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + }, + "values": [], }, - "values": [] - }, - { - "metric": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.11" + { + "metric": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11", + }, + "values": [], }, - "values": [] - }, - { - "metric": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.12" + { + "metric": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + }, + "values": [], }, - "values": [] - }, - { - "metric": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.10", - "source_ip": "192.168.1.30" + { + "metric": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.10", + "source_ip": "192.168.1.30", + }, + "values": [], }, - "values": [] - } ] - assert find_most_common_label(metrics=[CompressedMetric(**metric) for metric in metrics], ignore_label_set=set()) == (("exported_endpoint", "api_v1"), 4) - + assert find_most_common_label( + metrics=[CompressedMetric(**metric) for metric in metrics], + ignore_label_set=set(), + ) == (("exported_endpoint", "api_v1"), 4) def test_find_most_common_labels_none(self): - - metrics = [{ - "labels": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.1", - "source_ip": "192.168.1.10" + metrics = [ + { + "labels": { + "exported_endpoint": "api_v1", + "service_version": "v2.0.1", + "source_ip": "192.168.1.10", + }, + "values": [], }, - "values": [] - }, - { - "labels": { - "exported_endpoint": "api_v2", - "service_version": "v2.0.2", - "source_ip": "192.168.1.11" + { + "labels": { + "exported_endpoint": "api_v2", + "service_version": "v2.0.2", + "source_ip": "192.168.1.11", + }, + "values": [], }, - "values": [] - }, - { - "labels": { - "exported_endpoint": "api_v3", - "service_version": "v2.0.3", - "source_ip": "192.168.1.12" + { + "labels": { + "exported_endpoint": "api_v3", + "service_version": "v2.0.3", + "source_ip": "192.168.1.12", + }, + "values": [], }, - "values": [] - }, - { - "labels": { - "exported_endpoint": "api_v4", - "service_version": "v2.0.4", - "source_ip": "192.168.1.30" + { + "labels": { + "exported_endpoint": "api_v4", + "service_version": "v2.0.4", + "source_ip": "192.168.1.30", + }, + "values": [], }, - "values": [] - } ] - assert find_most_common_label(metrics=[CompressedMetric(**metric) for metric in metrics], ignore_label_set=None) == (None, 0) - + assert find_most_common_label( + metrics=[CompressedMetric(**metric) for metric in metrics], + ignore_label_set=None, + ) == (None, 0) def test_group_metrics(self): - - input_metrics = [{ - "labels": set({ - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.10", - "http_code": 404 - }.items()), - "values": [ - [1758179790, "10.1"], - [1758180000, "10.2"], - ] - }, - { - "labels": set({ - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.11", - "http_code": 404 - }.items()), - "values": [ - [1758180210, "11.1"], - [1758180420, "11.2"], - ] - }, - { - "labels": set({ - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.12", - "http_code": 404 - }.items()), - "values": [ - [1758180630, "12.1"], - [1758183360, "12.2"], - ] - }, - { - "labels": set({ - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.12", - "http_code": 404 - }.items()), - "values": [ - [1758183570, "12.3"], - [1758183780, "12.4"], - ] - }, - { - "labels": set({ - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.30", - "http_code": 404 - }.items()), - "values": [ - [1758183990, "30.1"], - [1758184200, "30.2"], - ] - }, - { - "labels": set({ - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.12", - "http_code": 400 - }.items()), - "values": [ - [1758184410, "12.5"], - [1758184620, "12.6"], - ] - }, - ] - - expected_metrics_raw = [{ - "common_labels": set({ - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "http_code": 404 - }.items()), - "metrics": [{ - "labels": set({ - "source_ip": "192.168.1.10", - }.items()), + input_metrics = [ + { + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + "http_code": 404, + }.items() + ), "values": [ [1758179790, "10.1"], [1758180000, "10.2"], - ] - }, { - "labels": set({ - "source_ip": "192.168.1.11", - }.items()), + ], + }, + { + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11", + "http_code": 404, + }.items() + ), "values": [ [1758180210, "11.1"], [1758180420, "11.2"], - ] - }, { - "common_labels": set({ - "source_ip": "192.168.1.12", - }.items()), - "metrics": [{ - "labels": set(), - "values": [ - [1758180630, "12.1"], - [1758183360, "12.2"], - ] - }, { - "labels": set(), - "values": [ - [1758184410, "12.3"], - [1758184620, "12.4"], - ] - }] - }] - }, { - "labels": set({ - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.12", - "http_code": 400 - }.items()), - "values": [ - [1758184410, "12.5"], - [1758184620, "12.6"], - ] - }] + ], + }, + { + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "http_code": 404, + }.items() + ), + "values": [ + [1758180630, "12.1"], + [1758183360, "12.2"], + ], + }, + { + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "http_code": 404, + }.items() + ), + "values": [ + [1758183570, "12.3"], + [1758183780, "12.4"], + ], + }, + { + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.30", + "http_code": 404, + }.items() + ), + "values": [ + [1758183990, "30.1"], + [1758184200, "30.2"], + ], + }, + { + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "http_code": 400, + }.items() + ), + "values": [ + [1758184410, "12.5"], + [1758184620, "12.6"], + ], + }, + ] - expected_metrics = [Group(**metric) if metric.get("common_labels") else CompressedMetric(**metric) for metric in expected_metrics_raw] + expected_metrics_raw = [ + { + "common_labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "http_code": 404, + }.items() + ), + "metrics": [ + { + "labels": set( + { + "source_ip": "192.168.1.10", + }.items() + ), + "values": [ + [1758179790, "10.1"], + [1758180000, "10.2"], + ], + }, + { + "labels": set( + { + "source_ip": "192.168.1.11", + }.items() + ), + "values": [ + [1758180210, "11.1"], + [1758180420, "11.2"], + ], + }, + { + "common_labels": set( + { + "source_ip": "192.168.1.12", + }.items() + ), + "metrics": [ + { + "labels": set(), + "values": [ + [1758180630, "12.1"], + [1758183360, "12.2"], + ], + }, + { + "labels": set(), + "values": [ + [1758184410, "12.3"], + [1758184620, "12.4"], + ], + }, + ], + }, + ], + }, + { + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + "http_code": 400, + }.items() + ), + "values": [ + [1758184410, "12.5"], + [1758184620, "12.6"], + ], + }, + ] + + expected_metrics = [ + Group(**metric) + if metric.get("common_labels") + else CompressedMetric(**metric) + for metric in expected_metrics_raw + ] - compressed_metrics = group_metrics(metrics_to_process=[CompressedMetric(**metric) for metric in input_metrics]) + compressed_metrics = group_metrics( + metrics_to_process=[CompressedMetric(**metric) for metric in input_metrics] + ) print("**** EXPECTED:") print(format_compressed_metrics(expected_metrics)) print("**** ACTUAL:") @@ -224,114 +276,112 @@ def test_group_metrics(self): def test_format_data_compressed_metric(self): metric = CompressedMetric( - labels=set([ - ("exported_endpoint", "api_v1"), - ("http_code", 400) - ]), + labels=set([("exported_endpoint", "api_v1"), ("http_code", 400)]), values=[ [1758184410, "12.5"], [1758184620, "12.6"], - ] + ], ) actual_str = format_data(metric) - expected_str = "labels:\n" + expected_str = "labels:\n" expected_str += " - exported_endpoint: api_v1\n" expected_str += " - http_code: 400\n" expected_str += "values:\n" expected_str += " - 1758184410: 12.5\n" expected_str += " - 1758184620: 12.6" - assert expected_str == actual_str - -# [ -# { -# "labels": [ -# [ -# "source_ip", -# "192.168.1.48" -# ] -# ], -# "values": [ -# [ -# 1758176010, -# "0.0033761036031960817" -# ], -# [ -# 1758176220, -# "0.003400871250128883" -# ] -# ] -# }, -# { -# "labels": [ -# [ -# "source_ip", -# "192.168.1.48" -# ] -# ], -# "values": [ -# [ -# 1758176010, -# "0.0033761036031960817" -# ], -# [ -# 1758176220, -# "0.003400871250128883" -# ] -# ] -# } -# ] - + # [ + # { + # "labels": [ + # [ + # "source_ip", + # "192.168.1.48" + # ] + # ], + # "values": [ + # [ + # 1758176010, + # "0.0033761036031960817" + # ], + # [ + # 1758176220, + # "0.003400871250128883" + # ] + # ] + # }, + # { + # "labels": [ + # [ + # "source_ip", + # "192.168.1.48" + # ] + # ], + # "values": [ + # [ + # 1758176010, + # "0.0033761036031960817" + # ], + # [ + # 1758176220, + # "0.003400871250128883" + # ] + # ] + # } + # ] def test_format_data_group(self): - group = Group( - common_labels=set([ - ("exported_endpoint", "api_v1"), - ("http_code", 400) - ]), + common_labels=set([("exported_endpoint", "api_v1"), ("http_code", 400)]), metrics=[ Group( - common_labels=set([ - ("service_version", "v2.0.9"), - ]), + common_labels=set( + [ + ("service_version", "v2.0.9"), + ] + ), metrics=[ CompressedMetric( - labels=set([ - ("source_ip", "192.168.1.13"), - ]), + labels=set( + [ + ("source_ip", "192.168.1.13"), + ] + ), values=[ [1758184410, "13.1"], [1758184620, "13.2"], - ] + ], ), CompressedMetric( - labels=set([ - ("source_ip", "192.168.1.14"), - ]), + labels=set( + [ + ("source_ip", "192.168.1.14"), + ] + ), values=[ [1758184410, "14.1"], [1758184620, "14.2"], - ] - ) - ] + ], + ), + ], ), CompressedMetric( - labels=set([ - ("source_ip", "192.168.1.12"), - ]), + labels=set( + [ + ("source_ip", "192.168.1.12"), + ] + ), values=[ [1758184410, "12.1"], [1758184620, "12.2"], - ] - ) - ] + ], + ), + ], ) - expected_str = "common_labels:\n" + expected_str = "common_labels:\n" expected_str += " - exported_endpoint: api_v1\n" expected_str += " - http_code: 400\n" expected_str += "metrics:\n" @@ -354,7 +404,6 @@ def test_format_data_group(self): expected_str += " - 1758184410: 12.1\n" expected_str += " - 1758184620: 12.2" - actual_str = format_compressed_metrics([group]) print("**** EXPECTED:") @@ -365,17 +414,21 @@ def test_format_data_group(self): assert expected_str.strip() == actual_str.strip() def test_format_data_realistic(self): - example_json_file_path = os.path.join(os.path.dirname(__file__), 'raw_prometheus_data.json') + example_json_file_path = os.path.join( + os.path.dirname(__file__), "raw_prometheus_data.json" + ) with open(example_json_file_path) as file: data = json.load(file) metrics_list_dict = data.get("result") raw_metrics = [RawMetric(**metric) for metric in metrics_list_dict] - metrics = [raw_metric_to_compressed_metric(metric, remove_labels=set()) for metric in raw_metrics] + metrics = [ + raw_metric_to_compressed_metric(metric, remove_labels=set()) + for metric in raw_metrics + ] formatted_data = summarize_metrics(metrics) print(formatted_data) assert False - From 2831306cb08ef52a4326a701fde4fd2cb358d923 Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Mon, 22 Sep 2025 10:09:41 +0200 Subject: [PATCH 03/13] chore: code cleanup + fix tests --- .../toolsets/prometheus/data_compression.py | 204 +++---------- .../prometheus/test_data_compression.py | 280 +++++++++--------- 2 files changed, 182 insertions(+), 302 deletions(-) diff --git a/holmes/plugins/toolsets/prometheus/data_compression.py b/holmes/plugins/toolsets/prometheus/data_compression.py index e5bcf5935..afc5bcd4f 100644 --- a/holmes/plugins/toolsets/prometheus/data_compression.py +++ b/holmes/plugins/toolsets/prometheus/data_compression.py @@ -1,6 +1,5 @@ import json -import logging -from typing import Any, Optional, Set, Union +from typing import Any, Optional, Set, Union, Sequence from pydantic import BaseModel @@ -19,7 +18,7 @@ class CompressedMetric(BaseModel): class Group(BaseModel): common_labels: set[tuple[str, Any]] - metrics: list[Union["Group", CompressedMetric]] + metrics: Sequence[Union["Group", CompressedMetric]] def format_labels( @@ -50,14 +49,8 @@ def format_labels( def format_data(data: Union[Group, CompressedMetric], line_prefix: str = "") -> str: lines = [] if isinstance(data, CompressedMetric): - if not data.labels: - print( - f"{line_prefix}{INDENT_SPACES}- CompressedMetric Data has no labels: labels={data.labels} values={data.values}" - ) - raise ValueError( - f"CompressedMetric Data has no labels: labels={data.labels} values={data.values}" - ) - lines.extend(format_labels(labels=data.labels, section_name="labels:")) + if data.labels: + lines.extend(format_labels(labels=data.labels, section_name="labels:")) if data.values: lines.append("values:") for value in data.values: @@ -65,14 +58,10 @@ def format_data(data: Union[Group, CompressedMetric], line_prefix: str = "") -> else: lines.append("values: NO_VALUES") txt = "\n".join([line_prefix + line for line in lines]) - print(txt) return txt elif data.metrics: if not data.common_labels: - print( - f"{line_prefix}{INDENT_SPACES}- Group has no labels: labels={data.common_labels} metrics={len(data.metrics)}" - ) raise ValueError( f"Group has no labels: labels={data.common_labels} metrics={len(data.metrics)}" ) @@ -81,7 +70,6 @@ def format_data(data: Union[Group, CompressedMetric], line_prefix: str = "") -> section_name="common_labels:", line_prefix=line_prefix, ) - print(group_labels) lines.extend(group_labels) lines.append(f"{line_prefix}metrics:") @@ -100,61 +88,53 @@ def format_zero_values_data( data: Union[Group, CompressedMetric], line_prefix: str = "" ) -> str: lines = [] - try: - if isinstance(data, CompressedMetric): - lines.extend(format_labels(labels=data.labels, section_name="")) - txt = "\n".join([line_prefix + line for line in lines]) - # print(txt + "\n\n") - return txt - - elif data.metrics: - lines.extend( - format_labels( - labels=data.common_labels, section_name="", line_prefix=line_prefix - ) + if isinstance(data, CompressedMetric): + lines.extend(format_labels(labels=data.labels, section_name="")) + txt = "\n".join([line_prefix + line for line in lines]) + return txt + + elif data.metrics: + lines.extend( + format_labels( + labels=data.common_labels, section_name="", line_prefix=line_prefix ) + ) - compress_labels = True - compressed_label_values: list = [] - compress_key: Optional[str] = None - # close to the leaves the data may be a high number of metrics differentiated by a single label - # Check if it's the case. - for metric in data.metrics: - if isinstance(metric, CompressedMetric) and len(metric.labels) == 1: - key, value = next(iter(metric.labels)) - if not compress_key: - compress_key = key - elif key != compress_key: - compress_labels = False - break - compressed_label_values.append(value) - else: + compress_labels = True + compressed_label_values: list = [] + compress_key: Optional[str] = None + # close to the leaves the data may be a high number of metrics differentiated by a single label + # Check if it's the case. + for metric in data.metrics: + if isinstance(metric, CompressedMetric) and len(metric.labels) == 1: + key, value = next(iter(metric.labels)) + if not compress_key: + compress_key = key + elif key != compress_key: compress_labels = False break - if compress_labels and compress_key: - lines.append( - f"{line_prefix}{INDENT_SPACES}- {json.dumps({compress_key:compressed_label_values})}" - ) + compressed_label_values.append(value) else: - for metric in data.metrics: - metric_lines = format_zero_values_data( - data=metric, line_prefix=line_prefix + (INDENT_SPACES * 2) - ) - if metric_lines: - metric_lines = ( - f"{line_prefix}{INDENT_SPACES}- " + metric_lines.lstrip() - ) - lines.append(metric_lines) - txt = "\n".join([line for line in lines]) - # print(txt + "\n\n") - return txt + compress_labels = False + break + if compress_labels and compress_key: + lines.append( + f"{line_prefix}{INDENT_SPACES}- {json.dumps({compress_key:compressed_label_values})}" + ) else: - raise Exception("Data has no metrics and is not a CompressedMetric") - except Exception: - logging.error(f"ERROR: {str(data)}", exc_info=True) - raise - - return "" + for metric in data.metrics: + metric_lines = format_zero_values_data( + data=metric, line_prefix=line_prefix + (INDENT_SPACES * 2) + ) + if metric_lines: + metric_lines = ( + f"{line_prefix}{INDENT_SPACES}- " + metric_lines.lstrip() + ) + lines.append(metric_lines) + txt = "\n".join([line for line in lines]) + return txt + else: + raise Exception("Data has no metrics and is not a CompressedMetric") def format_zero_values_metrics(metrics: list[Union[Group, CompressedMetric]]) -> str: @@ -249,13 +229,6 @@ def group_metrics( metrics=metrics_to_process, ignore_label_set=globally_common_labels ) - print( - f"{logging_prefix}** FOUND {len(globally_common_labels)} globally common labels" - ) - else: - print( - f"\n\n\n{logging_prefix}NESTED group_metrics {globally_common_labels} with #{len(metrics_to_process)} entities\n\n" - ) groups: list[Union[Group, CompressedMetric]] = [] unmatched_metrics: list[CompressedMetric] = [] # Constantly iterate over all metrics trying to extract the most common label @@ -265,9 +238,6 @@ def group_metrics( unmatched_metrics = metrics_to_process else: while most_common_label and match_count > 1: - print( - f"{logging_prefix}** PROCESSING GROUP based on label {most_common_label} #{match_count}" - ) current_group_labels = set() current_group: list[CompressedMetric] = [] current_group_labels.add(most_common_label) @@ -278,25 +248,19 @@ def group_metrics( else: unmatched_metrics.append(metric_data) - print( - f"{logging_prefix}** Found {len(current_group)} entities in group with common label={current_group_labels}" - ) all_group_labels = current_group_labels.union(globally_common_labels) most_common_label, match_count = find_most_common_label( metrics=current_group, ignore_label_set=all_group_labels ) # Keep aggregating all labels that are common with the current group. - while match_count == len(current_group): + while match_count == len(current_group) and most_common_label is not None: current_group_labels.add(most_common_label) all_group_labels = current_group_labels.union(globally_common_labels) most_common_label, match_count = find_most_common_label( metrics=current_group, ignore_label_set=all_group_labels ) - print( - f"{logging_prefix}** Of the {len(current_group)} entities in the current group, the following labels are common: {current_group_labels}" - ) # We're done with our group as we found no more common labels. # 1. Remove the common labels from all metrics in this group # 2. Recurse to further group metrics within this group @@ -304,36 +268,15 @@ def group_metrics( all_group_labels = current_group_labels.union(globally_common_labels) remove_labels(metric=metric_in_group, remove_labels=all_group_labels) - # print(f"{logging_prefix}** Entities in the current group, labels have been filtered: {current_group}") - - # print(f"{logging_prefix}- current_group:\n{format_compressed_metrics(list(current_group))}\n\n") - # if idx <= 2: - # if len(current_group)== 1: - # print("** WARNING WARNING WARNING WARNING WARNING WARNING WARNING should not happen as we check match_count > 1 for the group") - # print(f"{logging_prefix}** Current group size is 1. Adding entity as-is to the output list") - # groups.append(current_group[0]) - # elif len(current_group) > 1: - # print(f"{logging_prefix}** Current group size is {len(current_group)}. Recursing...") - # sub_groups = group_metrics(metrics_to_process=current_group, globally_common_labels=set(), logging_prefix=logging_prefix + INDENT_SPACES + f'{idx}- ') - # groups.append(Group(common_labels=current_group_labels, metrics=sub_groups)) - # else: - # print("** WARNING WARNING WARNING WARNING WARNING WARNING WARNING should not happen as we check match_count > 1 for the group") - # print(f"{logging_prefix}** Current group is empty. Aie Aie Aie") groups.append( Group(common_labels=current_group_labels, metrics=current_group) ) - # else: - # print(f"{logging_prefix}- processed group:\n{format_compressed_metrics(list(sub_groups))}\n\n") - # groups.append(Group(common_labels=current_group_labels, metrics=current_group)) most_common_label, match_count = find_most_common_label( metrics=unmatched_metrics, ignore_label_set=globally_common_labels ) metrics_to_process = unmatched_metrics - # print(f"********************* GROUPS:\n{[g.model_dump() for g in groups]}\n") - # print(f"********************* UMATCHED:\n{[m.model_dump() for m in unmatched_metrics]}\n") - for metric in unmatched_metrics: remove_labels(metric=metric, remove_labels=globally_common_labels) # prepend instead of append so that unique metrics are closer to common labels than grouped metrics @@ -355,72 +298,19 @@ def set_default(obj): def summarize_metrics(metrics_to_process: list[CompressedMetric]) -> str: summarized_text = "" - print(f"metrics_to_process={len(metrics_to_process)}") filtered_metrics = pre_filter_metrics(metrics=metrics_to_process) - print( - f"filtered_metrics.metrics_with_only_zero_values={len(filtered_metrics.metrics_with_only_zero_values)}" - ) - print(f"filtered_metrics.other_metrics={len(filtered_metrics.other_metrics)}") if ( len(filtered_metrics.metrics_with_only_zero_values) >= len(filtered_metrics.other_metrics) * 0.1 ): - # print(f"ZERO METRICS:{str(filtered_metrics.metrics_with_only_zero_values)}") zero_metrics = group_metrics(filtered_metrics.metrics_with_only_zero_values) - # print(f"ZERO METRICS GROUPED:{str(zero_metrics)}") summarized_text += format_zero_values_metrics(zero_metrics) if summarized_text and filtered_metrics.other_metrics: summarized_text += "\n" if filtered_metrics.other_metrics: - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) metrics = group_metrics(metrics_to_process=filtered_metrics.other_metrics) - print( - json.dumps( - [metric.model_dump() for metric in metrics], - indent=2, - default=set_default, - ) - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) - print( - "*************************************************************************************************************" - ) summarized_text += format_compressed_metrics(metrics) return summarized_text @@ -429,7 +319,6 @@ def summarize_metrics(metrics_to_process: list[CompressedMetric]) -> str: def find_most_common_label( metrics: list[CompressedMetric], ignore_label_set: Set[tuple[str, Any]] ) -> tuple[Optional[tuple[str, Any]], int]: - # print(f"find_most_common_label, metrics#={len(metrics)}, ignore_label_set={ignore_label_set}") """ Find label keys and values that are most common across all label sets. Returns labels that appear in ALL label sets with the same value. @@ -465,5 +354,4 @@ def find_most_common_label( most_common_label = (key, value) most_common_count_value = count - # print(f"find_most_common_label -> most_common_label={most_common_label}, most_common_count_value={most_common_count_value}") return most_common_label, most_common_count_value diff --git a/tests/plugins/toolsets/prometheus/test_data_compression.py b/tests/plugins/toolsets/prometheus/test_data_compression.py index b61b8d669..39ab4336d 100644 --- a/tests/plugins/toolsets/prometheus/test_data_compression.py +++ b/tests/plugins/toolsets/prometheus/test_data_compression.py @@ -19,35 +19,43 @@ class TestPrometheusDataCompression: def test_find_most_common_labels(self): metrics = [ { - "metric": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.10", - }, + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.10", + }.items() + ), "values": [], }, { - "metric": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.11", - }, + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.11", + }.items() + ), "values": [], }, { - "metric": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.12", - }, + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.9", + "source_ip": "192.168.1.12", + }.items() + ), "values": [], }, { - "metric": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.10", - "source_ip": "192.168.1.30", - }, + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.10", + "source_ip": "192.168.1.30", + }.items() + ), "values": [], }, ] @@ -59,41 +67,49 @@ def test_find_most_common_labels(self): def test_find_most_common_labels_none(self): metrics = [ { - "labels": { - "exported_endpoint": "api_v1", - "service_version": "v2.0.1", - "source_ip": "192.168.1.10", - }, + "labels": set( + { + "exported_endpoint": "api_v1", + "service_version": "v2.0.1", + "source_ip": "192.168.1.10", + }.items() + ), "values": [], }, { - "labels": { - "exported_endpoint": "api_v2", - "service_version": "v2.0.2", - "source_ip": "192.168.1.11", - }, + "labels": set( + { + "exported_endpoint": "api_v2", + "service_version": "v2.0.2", + "source_ip": "192.168.1.11", + }.items() + ), "values": [], }, { - "labels": { - "exported_endpoint": "api_v3", - "service_version": "v2.0.3", - "source_ip": "192.168.1.12", - }, + "labels": set( + { + "exported_endpoint": "api_v3", + "service_version": "v2.0.3", + "source_ip": "192.168.1.12", + }.items() + ), "values": [], }, { - "labels": { - "exported_endpoint": "api_v4", - "service_version": "v2.0.4", - "source_ip": "192.168.1.30", - }, + "labels": set( + { + "exported_endpoint": "api_v4", + "service_version": "v2.0.4", + "source_ip": "192.168.1.30", + }.items() + ), "values": [], }, ] assert find_most_common_label( metrics=[CompressedMetric(**metric) for metric in metrics], - ignore_label_set=None, + ignore_label_set=set(), ) == (None, 0) def test_group_metrics(self): @@ -190,71 +206,87 @@ def test_group_metrics(self): { "exported_endpoint": "api_v1", "service_version": "v2.0.9", - "http_code": 404, }.items() ), "metrics": [ { "labels": set( { - "source_ip": "192.168.1.10", - }.items() - ), - "values": [ - [1758179790, "10.1"], - [1758180000, "10.2"], - ], - }, - { - "labels": set( - { - "source_ip": "192.168.1.11", + "source_ip": "192.168.1.12", + "http_code": 400, }.items() ), "values": [ - [1758180210, "11.1"], - [1758180420, "11.2"], + [1758184410, "12.5"], + [1758184620, "12.6"], ], }, { "common_labels": set( { - "source_ip": "192.168.1.12", + "http_code": 404, }.items() ), "metrics": [ { - "labels": set(), + "labels": set( + { + "source_ip": "192.168.1.10", + }.items() + ), + "values": [ + [1758179790, "10.1"], + [1758180000, "10.2"], + ], + }, + { + "labels": set( + { + "source_ip": "192.168.1.11", + }.items() + ), + "values": [ + [1758180210, "11.1"], + [1758180420, "11.2"], + ], + }, + { + "labels": set( + { + "source_ip": "192.168.1.12", + }.items() + ), "values": [ [1758180630, "12.1"], [1758183360, "12.2"], ], }, { - "labels": set(), + "labels": set( + { + "source_ip": "192.168.1.12", + }.items() + ), "values": [ - [1758184410, "12.3"], - [1758184620, "12.4"], + [1758183570, "12.3"], + [1758183780, "12.4"], + ], + }, + { + "labels": set( + { + "source_ip": "192.168.1.30", + }.items() + ), + "values": [ + [1758183990, "30.1"], + [1758184200, "30.2"], ], }, ], }, ], - }, - { - "labels": set( - { - "exported_endpoint": "api_v1", - "service_version": "v2.0.9", - "source_ip": "192.168.1.12", - "http_code": 400, - }.items() - ), - "values": [ - [1758184410, "12.5"], - [1758184620, "12.6"], - ], - }, + } ] expected_metrics = [ @@ -267,12 +299,12 @@ def test_group_metrics(self): compressed_metrics = group_metrics( metrics_to_process=[CompressedMetric(**metric) for metric in input_metrics] ) + print("**** EXPECTED:") print(format_compressed_metrics(expected_metrics)) print("**** ACTUAL:") print(format_compressed_metrics(compressed_metrics)) assert expected_metrics == compressed_metrics - assert False def test_format_data_compressed_metric(self): metric = CompressedMetric( @@ -284,54 +316,13 @@ def test_format_data_compressed_metric(self): ) actual_str = format_data(metric) - expected_str = "labels:\n" - expected_str += " - exported_endpoint: api_v1\n" - expected_str += " - http_code: 400\n" + expected_str = 'labels: {"exported_endpoint": "api_v1", "http_code": 400}\n' expected_str += "values:\n" expected_str += " - 1758184410: 12.5\n" expected_str += " - 1758184620: 12.6" assert expected_str == actual_str - # [ - # { - # "labels": [ - # [ - # "source_ip", - # "192.168.1.48" - # ] - # ], - # "values": [ - # [ - # 1758176010, - # "0.0033761036031960817" - # ], - # [ - # 1758176220, - # "0.003400871250128883" - # ] - # ] - # }, - # { - # "labels": [ - # [ - # "source_ip", - # "192.168.1.48" - # ] - # ], - # "values": [ - # [ - # 1758176010, - # "0.0033761036031960817" - # ], - # [ - # 1758176220, - # "0.003400871250128883" - # ] - # ] - # } - # ] - def test_format_data_group(self): group = Group( common_labels=set([("exported_endpoint", "api_v1"), ("http_code", 400)]), @@ -381,28 +372,24 @@ def test_format_data_group(self): ], ) - expected_str = "common_labels:\n" - expected_str += " - exported_endpoint: api_v1\n" - expected_str += " - http_code: 400\n" - expected_str += "metrics:\n" - expected_str += " - common_labels:\n" - expected_str += " - service_version: v2.0.9\n" - expected_str += " metrics:\n" - expected_str += " - labels:\n" - expected_str += " - source_ip: 192.168.1.13\n" - expected_str += " values:\n" - expected_str += " - 1758184410: 13.1\n" - expected_str += " - 1758184620: 13.2\n" - expected_str += " - labels:\n" - expected_str += " - source_ip: 192.168.1.14\n" - expected_str += " values:\n" - expected_str += " - 1758184410: 14.1\n" - expected_str += " - 1758184620: 14.2\n" - expected_str += " - labels:\n" - expected_str += " - source_ip: 192.168.1.12\n" - expected_str += " values:\n" - expected_str += " - 1758184410: 12.1\n" - expected_str += " - 1758184620: 12.2" + expected_str = ( + ' common_labels: {"exported_endpoint": "api_v1", "http_code": 400}\n' + ) + expected_str += " metrics:\n" + expected_str += ' - common_labels: {"service_version": "v2.0.9"}\n' + expected_str += " metrics:\n" + expected_str += ' - labels: {"source_ip": "192.168.1.13"}\n' + expected_str += " values:\n" + expected_str += " - 1758184410: 13.1\n" + expected_str += " - 1758184620: 13.2\n" + expected_str += ' - labels: {"source_ip": "192.168.1.14"}\n' + expected_str += " values:\n" + expected_str += " - 1758184410: 14.1\n" + expected_str += " - 1758184620: 14.2\n" + expected_str += ' - labels: {"source_ip": "192.168.1.12"}\n' + expected_str += " values:\n" + expected_str += " - 1758184410: 12.1\n" + expected_str += " - 1758184620: 12.2" actual_str = format_compressed_metrics([group]) @@ -411,9 +398,11 @@ def test_format_data_group(self): print("**** ACTUAL:") print(actual_str) - assert expected_str.strip() == actual_str.strip() + assert expected_str.strip() in actual_str.strip() def test_format_data_realistic(self): + # This test is mostly used to manually analyze the output and make sure there is no error thrown + # The data is from a example_json_file_path = os.path.join( os.path.dirname(__file__), "raw_prometheus_data.json" ) @@ -430,5 +419,8 @@ def test_format_data_realistic(self): formatted_data = summarize_metrics(metrics) - print(formatted_data) - assert False + ratio = len(formatted_data) / len(json.dumps(data, indent=2)) + # print(formatted_data) + + assert ratio < 0.31 + # assert False # Uncomment to see the formatted output From 8247dabb7337d3ea1fa88510d96523a75100100c Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Mon, 22 Sep 2025 14:05:24 +0200 Subject: [PATCH 04/13] feat: integrate metrics compressin with newrelic --- holmes/core/models.py | 2 + holmes/plugins/toolsets/newrelic/newrelic.py | 60 +++++++++++-- .../toolsets/prometheus/data_compression.py | 9 +- .../plugins/toolsets/prometheus/prometheus.py | 84 +++++++++++-------- .../160_http_404_monitoring/test_case.yaml | 10 +-- .../prometheus/test_data_compression.py | 4 +- 6 files changed, 113 insertions(+), 56 deletions(-) diff --git a/holmes/core/models.py b/holmes/core/models.py index 8dd79aa77..ae3644403 100644 --- a/holmes/core/models.py +++ b/holmes/core/models.py @@ -69,6 +69,8 @@ def as_streaming_tool_result_response(self): def format_tool_result_data(tool_result: StructuredToolResult) -> str: tool_response = tool_result.data if tool_result.llm_data: + # Some tools can return data dedicated to the LLM. This can be reformatted or summarized data + # These will end up in the conversation history. tool_response = tool_result.llm_data elif isinstance(tool_result.data, str): tool_response = tool_result.data diff --git a/holmes/plugins/toolsets/newrelic/newrelic.py b/holmes/plugins/toolsets/newrelic/newrelic.py index 4200b1e29..092145cde 100644 --- a/holmes/plugins/toolsets/newrelic/newrelic.py +++ b/holmes/plugins/toolsets/newrelic/newrelic.py @@ -10,6 +10,10 @@ ) from pydantic import BaseModel from holmes.core.tools import StructuredToolResult, StructuredToolResultStatus +from holmes.plugins.toolsets.prometheus.data_compression import ( + raw_metric_to_compressed_metric, + summarize_metrics, +) from holmes.plugins.toolsets.prometheus.model import PromResponse from holmes.plugins.toolsets.utils import toolset_name_for_one_liner from holmes.plugins.toolsets.newrelic.new_relic_api import NewRelicAPI @@ -76,14 +80,49 @@ def __init__(self, toolset: "NewRelicToolset"): ) self._toolset = toolset - def format_metrics( + def compress_metrics_data(self, response: PromResponse) -> Optional[str]: + llm_data: Optional[str] = None + try: + if self._toolset.config and self._toolset.compress_metrics: + metrics = [ + raw_metric_to_compressed_metric(metric, remove_labels=set()) + for metric in response.data.result + ] + + compressed_data = summarize_metrics(metrics) + original_size = len(json.dumps(response.to_json())) + compressed_size = len(json.dumps(compressed_data)) + compression_ratio = ( + (1 - compressed_size / original_size) * 100 + if original_size > 0 + else 0 + ) + + if compression_ratio > self._toolset.compress_metrics_minimum_ratio: + # below this amount it's likely not worth mutating the response + llm_data = compressed_data + logging.info( + f"Compressed Newrelic metrics: {original_size:,} → {compressed_size:,} chars " + f"({compression_ratio:.1f}% reduction)" + ) + else: + logging.info( + f"Compressed Newrelic metrics: {original_size:,} → {compressed_size:,} chars " + f"({compression_ratio:.1f}% reduction). Original data will be used instead." + ) + except Exception: + logging.warning("Failed to compress newrelic data", exc_info=True) + + return llm_data + + def to_new_relic_records( self, records: List[Dict[str, Any]], params: Optional[Dict[str, Any]] = None, begin_key: str = "beginTimeSeconds", end_key: str = "endTimeSeconds", facet_key: str = "facet", - ) -> Dict[str, Any]: + ) -> PromResponse: resp = PromResponse.from_newrelic_records( records=records, tool_name=self.name, @@ -92,7 +131,7 @@ def format_metrics( end_key=end_key, facet_key=facet_key, ) - return resp.to_json() + return resp def _invoke( self, params: dict, user_approved: bool = False @@ -108,7 +147,6 @@ def _invoke( query = params["query"] result: List[Dict[str, Any]] = api.execute_nrql_query(query) - qtype = params.get("query_type", "").lower() if qtype == "traces": @@ -137,12 +175,16 @@ def _invoke( if qtype == "metrics" or "timeseries" in query.lower(): enriched_params = dict(params) enriched_params["query"] = query - return_result = self.format_metrics(result, params=enriched_params) + prom_data = self.to_new_relic_records(result, params=enriched_params) + + return_result = prom_data.to_json() + print(json.dumps(return_result, indent=2)) if len(return_result.get("data", {}).get("results", [])): return_result = result # type: ignore[assignment] return StructuredToolResult( status=StructuredToolResultStatus.SUCCESS, data=json.dumps(return_result, indent=2), + llm_data=self.compress_metrics_data(prom_data), params=params, ) @@ -205,12 +247,16 @@ class NewrelicConfig(BaseModel): nr_api_key: Optional[str] = None nr_account_id: Optional[str] = None is_eu_datacenter: Optional[bool] = False + compress_metrics: bool = True + compress_metrics_minimum_ratio: int = 30 # 20 means 20% size reduction class NewRelicToolset(Toolset): nr_api_key: Optional[str] = None nr_account_id: Optional[str] = None is_eu_datacenter: bool = False + compress_metrics: bool = True + compress_metrics_minimum_ratio: int = 30 def __init__(self): super().__init__( @@ -241,6 +287,10 @@ def prerequisites_callable( self.nr_account_id = nr_config.nr_account_id self.nr_api_key = nr_config.nr_api_key self.is_eu_datacenter = nr_config.is_eu_datacenter or False + self.compress_metrics = nr_config.compress_metrics or True + self.compress_metrics_minimum_ratio = ( + nr_config.compress_metrics_minimum_ratio or 30 + ) if not self.nr_account_id or not self.nr_api_key: return False, "New Relic account ID or API key is missing" diff --git a/holmes/plugins/toolsets/prometheus/data_compression.py b/holmes/plugins/toolsets/prometheus/data_compression.py index afc5bcd4f..9edf4023f 100644 --- a/holmes/plugins/toolsets/prometheus/data_compression.py +++ b/holmes/plugins/toolsets/prometheus/data_compression.py @@ -3,12 +3,7 @@ from pydantic import BaseModel - -class RawMetric(BaseModel): - metric: dict[str, Any] # labels - values: list[ - list[Any] - ] # typically list of tuples with timestamp as the first value and whatever value as the second +from holmes.plugins.toolsets.prometheus.model import PromSeries class CompressedMetric(BaseModel): @@ -161,7 +156,7 @@ def format_compressed_metrics(metrics: list[Union[Group, CompressedMetric]]) -> def raw_metric_to_compressed_metric( - raw_metric: RawMetric, remove_labels: set[tuple[str, Any]] + raw_metric: PromSeries, remove_labels: set[tuple[str, Any]] ) -> CompressedMetric: labels: set[tuple[str, Any]] = set() if remove_labels: diff --git a/holmes/plugins/toolsets/prometheus/prometheus.py b/holmes/plugins/toolsets/prometheus/prometheus.py index b0fa4f58d..48625423c 100644 --- a/holmes/plugins/toolsets/prometheus/prometheus.py +++ b/holmes/plugins/toolsets/prometheus/prometheus.py @@ -22,10 +22,10 @@ ) from holmes.plugins.toolsets.consts import STANDARD_END_DATETIME_TOOL_PARAM_DESCRIPTION from holmes.plugins.toolsets.prometheus.data_compression import ( - RawMetric, raw_metric_to_compressed_metric, summarize_metrics, ) +from holmes.plugins.toolsets.prometheus.model import PromSeries from holmes.plugins.toolsets.prometheus.utils import parse_duration_to_seconds from holmes.plugins.toolsets.service_discovery import PrometheusDiscovery from holmes.plugins.toolsets.utils import ( @@ -100,6 +100,9 @@ class PrometheusConfig(BaseModel): DEFAULT_QUERY_RESPONSE_SIZE_LIMIT # Limit the max number of characters in a query result to proactively prevent token limit issues (roughly 5-6k tokens) ) + compress_range_metrics: bool = True + compress_range_metrics_minimum_ratio: int = 20 # e.g. 20 means 20% smaller + @field_validator("prometheus_url") def ensure_trailing_slash(cls, v: Optional[str]) -> Optional[str]: if v is not None and not v.endswith("/"): @@ -1372,49 +1375,56 @@ def _invoke( llm_data: Optional[str] = None - # Check if data should be included based on size if self.toolset.config.tool_calls_return_data: result_data = data.get("data", {}) response_data["data"] = result_data try: - metrics_list_dict = result_data.get("result") - raw_metrics = [ - RawMetric(**metric) for metric in metrics_list_dict - ] - metrics = [ - raw_metric_to_compressed_metric(metric, remove_labels=set()) - for metric in raw_metrics - ] - - compressed_data = summarize_metrics(metrics) - response_data["raw_data"] = result_data - original_size = len(json.dumps(result_data)) - compressed_size = len(json.dumps(compressed_data)) - compression_ratio = ( - (1 - compressed_size / original_size) * 100 - if original_size > 0 - else 0 - ) - - if compression_ratio > 20: - # below this amount it's likely not worth mutating the response - llm_data = compressed_data - logging.info( - f"Compressed Prometheus data: {original_size:,} → {compressed_size:,} chars " - f"({compression_ratio:.1f}% reduction)" - ) - else: - logging.info( - f"Compressed Prometheus data: {original_size:,} → {compressed_size:,} chars " - f"({compression_ratio:.1f}% reduction). Original data will be used instead." + if self.toolset.config.compress_range_metrics: + metrics_list_dict = result_data.get("result") + raw_metrics = [ + PromSeries(**metric) for metric in metrics_list_dict + ] + metrics = [ + raw_metric_to_compressed_metric( + metric, remove_labels=set() + ) + for metric in raw_metrics + ] + + compressed_data = summarize_metrics(metrics) + response_data["raw_data"] = result_data + original_size = len(json.dumps(result_data)) + compressed_size = len(json.dumps(compressed_data)) + compression_ratio = ( + (1 - compressed_size / original_size) * 100 + if original_size > 0 + else 0 ) - response_data["compression_info"] = { - "original_size_chars": original_size, - "compressed_size_chars": compressed_size, - "compression_ratio_percent": round(compression_ratio, 1), - } + if ( + compression_ratio + > self.toolset.config.compress_range_metrics_minimum_ratio + ): + # below this amount it's likely not worth mutating the response + llm_data = compressed_data + logging.info( + f"Compressed Prometheus data: {original_size:,} → {compressed_size:,} chars " + f"({compression_ratio:.1f}% reduction)" + ) + else: + logging.info( + f"Compressed Prometheus data: {original_size:,} → {compressed_size:,} chars " + f"({compression_ratio:.1f}% reduction). Original data will be used instead." + ) + + response_data["compression_info"] = { + "original_size_chars": original_size, + "compressed_size_chars": compressed_size, + "compression_ratio_percent": round( + compression_ratio, 1 + ), + } except Exception as e: logging.warning( f"Failed to compress data: {e}, the original data will be used" diff --git a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/test_case.yaml b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/test_case.yaml index bf5cbe246..f48c01d9c 100644 --- a/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/test_case.yaml +++ b/tests/llm/fixtures/test_ask_holmes/160_http_404_monitoring/test_case.yaml @@ -17,8 +17,8 @@ before_test: | after_test: | kubectl delete namespace app-160 --force --grace-period=0 -# port_forwards: -# - namespace: default -# service: service/robusta-kube-prometheus-st-prometheus -# local_port: 9160 -# remote_port: 9090 +port_forwards: + - namespace: default + service: service/robusta-kube-prometheus-st-prometheus + local_port: 9160 + remote_port: 9090 diff --git a/tests/plugins/toolsets/prometheus/test_data_compression.py b/tests/plugins/toolsets/prometheus/test_data_compression.py index 39ab4336d..c15dcfa00 100644 --- a/tests/plugins/toolsets/prometheus/test_data_compression.py +++ b/tests/plugins/toolsets/prometheus/test_data_compression.py @@ -3,7 +3,6 @@ from holmes.plugins.toolsets.prometheus.data_compression import ( CompressedMetric, Group, - RawMetric, find_most_common_label, format_compressed_metrics, format_data, @@ -11,6 +10,7 @@ raw_metric_to_compressed_metric, summarize_metrics, ) +from holmes.plugins.toolsets.prometheus.model import PromSeries class TestPrometheusDataCompression: @@ -411,7 +411,7 @@ def test_format_data_realistic(self): data = json.load(file) metrics_list_dict = data.get("result") - raw_metrics = [RawMetric(**metric) for metric in metrics_list_dict] + raw_metrics = [PromSeries(**metric) for metric in metrics_list_dict] metrics = [ raw_metric_to_compressed_metric(metric, remove_labels=set()) for metric in raw_metrics From e1107a25fe70a9c48a582c48449b69b09a99a881 Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Mon, 22 Sep 2025 14:42:26 +0200 Subject: [PATCH 05/13] fix: ui graphs work with compression --- holmes/core/models.py | 19 +++++++++++++++++-- holmes/plugins/toolsets/newrelic/newrelic.py | 1 - 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/holmes/core/models.py b/holmes/core/models.py index ae3644403..b89eeeb35 100644 --- a/holmes/core/models.py +++ b/holmes/core/models.py @@ -71,8 +71,23 @@ def format_tool_result_data(tool_result: StructuredToolResult) -> str: if tool_result.llm_data: # Some tools can return data dedicated to the LLM. This can be reformatted or summarized data # These will end up in the conversation history. - tool_response = tool_result.llm_data - elif isinstance(tool_result.data, str): + # This is a hack to swap the `data` field but maintain the structured output because some models require access to it. For example prometheus graphs require the random_key to generate a usable graph. + try: + if tool_result.data and isinstance(tool_result.data, str): + data_with_random_key = json.loads(tool_result.data) + if ( + data_with_random_key + and data_with_random_key.get("random_key") + and data_with_random_key.get("data") + ): + tool_result = tool_result.model_copy() + data_with_random_key["data"] = tool_result.llm_data + tool_result.data = data_with_random_key + tool_result.llm_data = None + except Exception: + pass + + if isinstance(tool_result.data, str): tool_response = tool_result.data else: try: diff --git a/holmes/plugins/toolsets/newrelic/newrelic.py b/holmes/plugins/toolsets/newrelic/newrelic.py index 092145cde..6fb632633 100644 --- a/holmes/plugins/toolsets/newrelic/newrelic.py +++ b/holmes/plugins/toolsets/newrelic/newrelic.py @@ -178,7 +178,6 @@ def _invoke( prom_data = self.to_new_relic_records(result, params=enriched_params) return_result = prom_data.to_json() - print(json.dumps(return_result, indent=2)) if len(return_result.get("data", {}).get("results", [])): return_result = result # type: ignore[assignment] return StructuredToolResult( From 2b0aae07d99a317c688055298f5ba62322eddcb7 Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Mon, 22 Sep 2025 14:48:03 +0200 Subject: [PATCH 06/13] chore: address PR comments --- holmes/plugins/toolsets/prometheus/data_compression.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/holmes/plugins/toolsets/prometheus/data_compression.py b/holmes/plugins/toolsets/prometheus/data_compression.py index 9edf4023f..3ab467032 100644 --- a/holmes/plugins/toolsets/prometheus/data_compression.py +++ b/holmes/plugins/toolsets/prometheus/data_compression.py @@ -176,9 +176,6 @@ def remove_labels(metric: CompressedMetric, remove_labels: set[tuple[str, Any]]) metric.labels = labels -idx = 0 - - class PreFilteredMetrics(BaseModel): metrics_with_only_zero_values: list[CompressedMetric] other_metrics: list[CompressedMetric] @@ -212,8 +209,6 @@ def group_metrics( globally_common_labels: set[tuple[str, Any]] = set(), logging_prefix: str = "", ) -> list[Union[Group, CompressedMetric]]: - global idx - idx = idx + 1 most_common_label, match_count = find_most_common_label( metrics=metrics_to_process, ignore_label_set=set() ) From 4ec4f080e0c1f0922e7d04ef0b60a3a2b6ce7874 Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Mon, 22 Sep 2025 14:49:51 +0200 Subject: [PATCH 07/13] chore: address PR comments --- holmes/plugins/toolsets/newrelic/newrelic.py | 6 ++---- holmes/plugins/toolsets/prometheus/data_compression.py | 5 +++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/holmes/plugins/toolsets/newrelic/newrelic.py b/holmes/plugins/toolsets/newrelic/newrelic.py index 6fb632633..7adf8292c 100644 --- a/holmes/plugins/toolsets/newrelic/newrelic.py +++ b/holmes/plugins/toolsets/newrelic/newrelic.py @@ -286,10 +286,8 @@ def prerequisites_callable( self.nr_account_id = nr_config.nr_account_id self.nr_api_key = nr_config.nr_api_key self.is_eu_datacenter = nr_config.is_eu_datacenter or False - self.compress_metrics = nr_config.compress_metrics or True - self.compress_metrics_minimum_ratio = ( - nr_config.compress_metrics_minimum_ratio or 30 - ) + self.compress_metrics = nr_config.compress_metrics + self.compress_metrics_minimum_ratio = nr_config.compress_metrics_minimum_ratio if not self.nr_account_id or not self.nr_api_key: return False, "New Relic account ID or API key is missing" diff --git a/holmes/plugins/toolsets/prometheus/data_compression.py b/holmes/plugins/toolsets/prometheus/data_compression.py index 3ab467032..d8487e588 100644 --- a/holmes/plugins/toolsets/prometheus/data_compression.py +++ b/holmes/plugins/toolsets/prometheus/data_compression.py @@ -206,9 +206,10 @@ def pre_filter_metrics(metrics: list[CompressedMetric]) -> PreFilteredMetrics: def group_metrics( metrics_to_process: list[CompressedMetric], - globally_common_labels: set[tuple[str, Any]] = set(), - logging_prefix: str = "", + globally_common_labels: Optional[set[tuple[str, Any]]] = None, ) -> list[Union[Group, CompressedMetric]]: + if not globally_common_labels: + globally_common_labels = set() most_common_label, match_count = find_most_common_label( metrics=metrics_to_process, ignore_label_set=set() ) From b53755024327c608ae9354ef2c14468e8c6be55b Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Mon, 22 Sep 2025 14:51:13 +0200 Subject: [PATCH 08/13] chore: linting --- holmes/plugins/toolsets/newrelic/newrelic.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/holmes/plugins/toolsets/newrelic/newrelic.py b/holmes/plugins/toolsets/newrelic/newrelic.py index 7adf8292c..d8481fc2a 100644 --- a/holmes/plugins/toolsets/newrelic/newrelic.py +++ b/holmes/plugins/toolsets/newrelic/newrelic.py @@ -287,7 +287,9 @@ def prerequisites_callable( self.nr_api_key = nr_config.nr_api_key self.is_eu_datacenter = nr_config.is_eu_datacenter or False self.compress_metrics = nr_config.compress_metrics - self.compress_metrics_minimum_ratio = nr_config.compress_metrics_minimum_ratio + self.compress_metrics_minimum_ratio = ( + nr_config.compress_metrics_minimum_ratio + ) if not self.nr_account_id or not self.nr_api_key: return False, "New Relic account ID or API key is missing" From 9efedb4ebdf9ab39a86789fe1fc72b6fcc63dd36 Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Tue, 23 Sep 2025 08:52:43 +0200 Subject: [PATCH 09/13] chore: address PR comments --- holmes/plugins/toolsets/newrelic/newrelic.py | 77 +++++++++---------- .../toolsets/prometheus/data_compression.py | 17 ++-- .../plugins/toolsets/prometheus/prometheus.py | 8 +- .../prometheus/test_data_compression.py | 8 +- 4 files changed, 51 insertions(+), 59 deletions(-) diff --git a/holmes/plugins/toolsets/newrelic/newrelic.py b/holmes/plugins/toolsets/newrelic/newrelic.py index 2ca168e54..065651352 100644 --- a/holmes/plugins/toolsets/newrelic/newrelic.py +++ b/holmes/plugins/toolsets/newrelic/newrelic.py @@ -11,8 +11,8 @@ from pydantic import BaseModel from holmes.core.tools import StructuredToolResult, StructuredToolResultStatus from holmes.plugins.toolsets.prometheus.data_compression import ( - raw_metric_to_compressed_metric, - summarize_metrics, + simplify_prometheus_metric_object, + compact_metrics, ) from holmes.plugins.toolsets.prometheus.model import PromResponse from holmes.plugins.toolsets.utils import toolset_name_for_one_liner @@ -80,42 +80,39 @@ def __init__(self, toolset: "NewRelicToolset"): ) self._toolset = toolset - def compress_metrics_data(self, response: PromResponse) -> Optional[str]: + def compact_metrics_data(self, response: PromResponse) -> Optional[str]: llm_data: Optional[str] = None try: - if self._toolset.config and self._toolset.compress_metrics: - metrics = [ - raw_metric_to_compressed_metric(metric, remove_labels=set()) - for metric in response.data.result - ] - - compressed_data = summarize_metrics(metrics) - original_size = len(json.dumps(response.to_json())) - compressed_size = len(json.dumps(compressed_data)) - compression_ratio = ( - (1 - compressed_size / original_size) * 100 - if original_size > 0 - else 0 - ) + metrics = [ + simplify_prometheus_metric_object(metric, remove_labels=set()) + for metric in response.data.result + ] + + compacted_data = compact_metrics(metrics) + original_size = len(json.dumps(response.to_json())) + compacted_size = len(json.dumps(compacted_data)) + compaction_ratio = ( + (1 - compacted_size / original_size) * 100 if original_size > 0 else 0 + ) - if compression_ratio > self._toolset.compress_metrics_minimum_ratio: - # below this amount it's likely not worth mutating the response - llm_data = compressed_data - logging.info( - f"Compressed Newrelic metrics: {original_size:,} → {compressed_size:,} chars " - f"({compression_ratio:.1f}% reduction)" - ) - else: - logging.info( - f"Compressed Newrelic metrics: {original_size:,} → {compressed_size:,} chars " - f"({compression_ratio:.1f}% reduction). Original data will be used instead." - ) + if compaction_ratio > self._toolset.compact_metrics_minimum_ratio: + # below this amount it's likely not worth mutating the response + llm_data = compacted_data + logging.debug( + f"Compressed Newrelic metrics: {original_size:,} → {compacted_size:,} chars " + f"({compaction_ratio:.1f}% reduction)" + ) + else: + logging.debug( + f"Compressed Newrelic metrics: {original_size:,} → {compacted_size:,} chars " + f"({compaction_ratio:.1f}% reduction). Original data will be used instead." + ) except Exception: logging.warning("Failed to compress newrelic data", exc_info=True) return llm_data - def to_new_relic_records( + def to_prometheus_records( self, records: List[Dict[str, Any]], params: Optional[Dict[str, Any]] = None, @@ -175,15 +172,13 @@ def _invoke( if qtype == "metrics" or "timeseries" in query.lower(): enriched_params = dict(params) enriched_params["query"] = query - prom_data = self.to_new_relic_records(result, params=enriched_params) + prom_data = self.to_prometheus_records(result, params=enriched_params) return_result = prom_data.to_json() - if len(return_result.get("data", {}).get("results", [])): - return_result = result # type: ignore[assignment] return StructuredToolResult( status=StructuredToolResultStatus.SUCCESS, data=json.dumps(return_result, indent=2), - llm_data=self.compress_metrics_data(prom_data), + llm_data=self.compact_metrics_data(prom_data), params=params, ) @@ -246,16 +241,16 @@ class NewrelicConfig(BaseModel): nr_api_key: Optional[str] = None nr_account_id: Optional[str] = None is_eu_datacenter: Optional[bool] = False - compress_metrics: bool = True - compress_metrics_minimum_ratio: int = 30 # 20 means 20% size reduction + compact_metrics: bool = True + compact_metrics_minimum_ratio: int = 30 # 20 means 20% size reduction class NewRelicToolset(Toolset): nr_api_key: Optional[str] = None nr_account_id: Optional[str] = None is_eu_datacenter: bool = False - compress_metrics: bool = True - compress_metrics_minimum_ratio: int = 30 + compact_metrics: bool = True + compact_metrics_minimum_ratio: int = 30 def __init__(self): super().__init__( @@ -286,10 +281,8 @@ def prerequisites_callable( self.nr_account_id = nr_config.nr_account_id self.nr_api_key = nr_config.nr_api_key self.is_eu_datacenter = nr_config.is_eu_datacenter or False - self.compress_metrics = nr_config.compress_metrics - self.compress_metrics_minimum_ratio = ( - nr_config.compress_metrics_minimum_ratio - ) + self.compact_metrics = nr_config.compact_metrics + self.compact_metrics_minimum_ratio = nr_config.compact_metrics_minimum_ratio if not self.nr_account_id or not self.nr_api_key: return False, "New Relic account ID or API key is missing" diff --git a/holmes/plugins/toolsets/prometheus/data_compression.py b/holmes/plugins/toolsets/prometheus/data_compression.py index d8487e588..c07309720 100644 --- a/holmes/plugins/toolsets/prometheus/data_compression.py +++ b/holmes/plugins/toolsets/prometheus/data_compression.py @@ -16,6 +16,9 @@ class Group(BaseModel): metrics: Sequence[Union["Group", CompressedMetric]] +INDENT_SPACES = " " + + def format_labels( labels: set[tuple[str, Any]], section_name: str, line_prefix: str = "" ) -> list[str]: @@ -38,9 +41,6 @@ def format_labels( return lines -INDENT_SPACES = " " - - def format_data(data: Union[Group, CompressedMetric], line_prefix: str = "") -> str: lines = [] if isinstance(data, CompressedMetric): @@ -84,7 +84,8 @@ def format_zero_values_data( ) -> str: lines = [] if isinstance(data, CompressedMetric): - lines.extend(format_labels(labels=data.labels, section_name="")) + if data.labels: + lines.extend(format_labels(labels=data.labels, section_name="")) txt = "\n".join([line_prefix + line for line in lines]) return txt @@ -133,9 +134,7 @@ def format_zero_values_data( def format_zero_values_metrics(metrics: list[Union[Group, CompressedMetric]]) -> str: - formatted_string = ( - "# Metrics with the following hierarchised labels have NO DATA:\n" - ) + formatted_string = "# Metrics with the following hierarchised labels have all values set to ZERO:\n" for metric in metrics: formatted_string += ( format_zero_values_data(metric, line_prefix=INDENT_SPACES) + "\n" @@ -155,7 +154,7 @@ def format_compressed_metrics(metrics: list[Union[Group, CompressedMetric]]) -> return formatted_string -def raw_metric_to_compressed_metric( +def simplify_prometheus_metric_object( raw_metric: PromSeries, remove_labels: set[tuple[str, Any]] ) -> CompressedMetric: labels: set[tuple[str, Any]] = set() @@ -287,7 +286,7 @@ def set_default(obj): raise TypeError -def summarize_metrics(metrics_to_process: list[CompressedMetric]) -> str: +def compact_metrics(metrics_to_process: list[CompressedMetric]) -> str: summarized_text = "" filtered_metrics = pre_filter_metrics(metrics=metrics_to_process) if ( diff --git a/holmes/plugins/toolsets/prometheus/prometheus.py b/holmes/plugins/toolsets/prometheus/prometheus.py index 48625423c..ec4334799 100644 --- a/holmes/plugins/toolsets/prometheus/prometheus.py +++ b/holmes/plugins/toolsets/prometheus/prometheus.py @@ -22,8 +22,8 @@ ) from holmes.plugins.toolsets.consts import STANDARD_END_DATETIME_TOOL_PARAM_DESCRIPTION from holmes.plugins.toolsets.prometheus.data_compression import ( - raw_metric_to_compressed_metric, - summarize_metrics, + simplify_prometheus_metric_object, + compact_metrics, ) from holmes.plugins.toolsets.prometheus.model import PromSeries from holmes.plugins.toolsets.prometheus.utils import parse_duration_to_seconds @@ -1386,13 +1386,13 @@ def _invoke( PromSeries(**metric) for metric in metrics_list_dict ] metrics = [ - raw_metric_to_compressed_metric( + simplify_prometheus_metric_object( metric, remove_labels=set() ) for metric in raw_metrics ] - compressed_data = summarize_metrics(metrics) + compressed_data = compact_metrics(metrics) response_data["raw_data"] = result_data original_size = len(json.dumps(result_data)) compressed_size = len(json.dumps(compressed_data)) diff --git a/tests/plugins/toolsets/prometheus/test_data_compression.py b/tests/plugins/toolsets/prometheus/test_data_compression.py index c15dcfa00..edf8c1f95 100644 --- a/tests/plugins/toolsets/prometheus/test_data_compression.py +++ b/tests/plugins/toolsets/prometheus/test_data_compression.py @@ -7,8 +7,8 @@ format_compressed_metrics, format_data, group_metrics, - raw_metric_to_compressed_metric, - summarize_metrics, + simplify_prometheus_metric_object, + compact_metrics, ) from holmes.plugins.toolsets.prometheus.model import PromSeries @@ -413,11 +413,11 @@ def test_format_data_realistic(self): raw_metrics = [PromSeries(**metric) for metric in metrics_list_dict] metrics = [ - raw_metric_to_compressed_metric(metric, remove_labels=set()) + simplify_prometheus_metric_object(metric, remove_labels=set()) for metric in raw_metrics ] - formatted_data = summarize_metrics(metrics) + formatted_data = compact_metrics(metrics) ratio = len(formatted_data) / len(json.dumps(data, indent=2)) # print(formatted_data) From b0223ad11eae238eb94af9207a5ae477971a17ac Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Tue, 23 Sep 2025 09:31:29 +0200 Subject: [PATCH 10/13] chore: address PR comments --- .../toolsets/prometheus/data_compression.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/holmes/plugins/toolsets/prometheus/data_compression.py b/holmes/plugins/toolsets/prometheus/data_compression.py index c07309720..d6bcf4875 100644 --- a/holmes/plugins/toolsets/prometheus/data_compression.py +++ b/holmes/plugins/toolsets/prometheus/data_compression.py @@ -289,10 +289,7 @@ def set_default(obj): def compact_metrics(metrics_to_process: list[CompressedMetric]) -> str: summarized_text = "" filtered_metrics = pre_filter_metrics(metrics=metrics_to_process) - if ( - len(filtered_metrics.metrics_with_only_zero_values) - >= len(filtered_metrics.other_metrics) * 0.1 - ): + if len(filtered_metrics.metrics_with_only_zero_values): zero_metrics = group_metrics(filtered_metrics.metrics_with_only_zero_values) summarized_text += format_zero_values_metrics(zero_metrics) @@ -310,14 +307,14 @@ def find_most_common_label( metrics: list[CompressedMetric], ignore_label_set: Set[tuple[str, Any]] ) -> tuple[Optional[tuple[str, Any]], int]: """ - Find label keys and values that are most common across all label sets. - Returns labels that appear in ALL label sets with the same value. + Find the most common label key/value across all metrics. Args: - label_sets: List of label dictionaries + metrics: List of metrics + ignore_label_set: labels to ignore (e.g. they are already known to be common across all metrics) Returns: - Dictionary of common labels (key -> most common value) + The most common label and its occurence count across all metrics: ((key, value), count) """ if len(metrics) <= 1: return None, 0 @@ -333,7 +330,7 @@ def find_most_common_label( label_key = (key, value) label_counts[label_key] = label_counts.get(label_key, 0) + 1 - # Find labels that appear in ALL sets (100% frequency) + # Find the label that is the most frequent most_common_label: Optional[tuple[str, Any]] = None most_common_count_value = 0 for (key, value), count in label_counts.items(): From d03a0a1e0a6182b73c16d2f5a725e3eb7beb7f6a Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Wed, 24 Sep 2025 09:03:59 +0200 Subject: [PATCH 11/13] chore: address PR comments0 --- holmes/plugins/toolsets/newrelic/newrelic.py | 2 +- .../toolsets/prometheus/data_compression.py | 26 +++++++------------ .../plugins/toolsets/prometheus/prometheus.py | 2 +- .../prometheus/test_data_compression.py | 2 +- 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/holmes/plugins/toolsets/newrelic/newrelic.py b/holmes/plugins/toolsets/newrelic/newrelic.py index 065651352..a2710b34a 100644 --- a/holmes/plugins/toolsets/newrelic/newrelic.py +++ b/holmes/plugins/toolsets/newrelic/newrelic.py @@ -84,7 +84,7 @@ def compact_metrics_data(self, response: PromResponse) -> Optional[str]: llm_data: Optional[str] = None try: metrics = [ - simplify_prometheus_metric_object(metric, remove_labels=set()) + simplify_prometheus_metric_object(metric, labels_to_remove=set()) for metric in response.data.result ] diff --git a/holmes/plugins/toolsets/prometheus/data_compression.py b/holmes/plugins/toolsets/prometheus/data_compression.py index d6bcf4875..bed31e964 100644 --- a/holmes/plugins/toolsets/prometheus/data_compression.py +++ b/holmes/plugins/toolsets/prometheus/data_compression.py @@ -89,7 +89,7 @@ def format_zero_values_data( txt = "\n".join([line_prefix + line for line in lines]) return txt - elif data.metrics: + elif isinstance(data, Group): lines.extend( format_labels( labels=data.common_labels, section_name="", line_prefix=line_prefix @@ -129,8 +129,6 @@ def format_zero_values_data( lines.append(metric_lines) txt = "\n".join([line for line in lines]) return txt - else: - raise Exception("Data has no metrics and is not a CompressedMetric") def format_zero_values_metrics(metrics: list[Union[Group, CompressedMetric]]) -> str: @@ -155,22 +153,24 @@ def format_compressed_metrics(metrics: list[Union[Group, CompressedMetric]]) -> def simplify_prometheus_metric_object( - raw_metric: PromSeries, remove_labels: set[tuple[str, Any]] + raw_metric: PromSeries, labels_to_remove: set[tuple[str, Any]] ) -> CompressedMetric: labels: set[tuple[str, Any]] = set() - if remove_labels: + if labels_to_remove: for label in raw_metric.metric.items(): - if label not in remove_labels: + if label not in labels_to_remove: labels.add(label) else: labels = set(raw_metric.metric.items()) return CompressedMetric(labels=labels, values=raw_metric.values) -def remove_labels(metric: CompressedMetric, remove_labels: set[tuple[str, Any]]): +def remove_labels( + metric: CompressedMetric, labels_to_remove: set[tuple[str, Any]] +) -> None: labels: set[tuple[str, Any]] = set() for label in metric.labels: - if label not in remove_labels: + if label not in labels_to_remove: labels.add(label) metric.labels = labels @@ -256,7 +256,7 @@ def group_metrics( # 2. Recurse to further group metrics within this group for metric_in_group in current_group: all_group_labels = current_group_labels.union(globally_common_labels) - remove_labels(metric=metric_in_group, remove_labels=all_group_labels) + remove_labels(metric=metric_in_group, labels_to_remove=all_group_labels) groups.append( Group(common_labels=current_group_labels, metrics=current_group) @@ -268,7 +268,7 @@ def group_metrics( metrics_to_process = unmatched_metrics for metric in unmatched_metrics: - remove_labels(metric=metric, remove_labels=globally_common_labels) + remove_labels(metric=metric, labels_to_remove=globally_common_labels) # prepend instead of append so that unique metrics are closer to common labels than grouped metrics # I 'guess' it may help the LLM in making sense of the hierarchy groups.insert(0, metric) @@ -280,12 +280,6 @@ def group_metrics( return groups -def set_default(obj): - if isinstance(obj, set): - return list(obj) - raise TypeError - - def compact_metrics(metrics_to_process: list[CompressedMetric]) -> str: summarized_text = "" filtered_metrics = pre_filter_metrics(metrics=metrics_to_process) diff --git a/holmes/plugins/toolsets/prometheus/prometheus.py b/holmes/plugins/toolsets/prometheus/prometheus.py index ec4334799..4efc5ef73 100644 --- a/holmes/plugins/toolsets/prometheus/prometheus.py +++ b/holmes/plugins/toolsets/prometheus/prometheus.py @@ -1387,7 +1387,7 @@ def _invoke( ] metrics = [ simplify_prometheus_metric_object( - metric, remove_labels=set() + metric, labels_to_remove=set() ) for metric in raw_metrics ] diff --git a/tests/plugins/toolsets/prometheus/test_data_compression.py b/tests/plugins/toolsets/prometheus/test_data_compression.py index edf8c1f95..1b0b8d5ee 100644 --- a/tests/plugins/toolsets/prometheus/test_data_compression.py +++ b/tests/plugins/toolsets/prometheus/test_data_compression.py @@ -413,7 +413,7 @@ def test_format_data_realistic(self): raw_metrics = [PromSeries(**metric) for metric in metrics_list_dict] metrics = [ - simplify_prometheus_metric_object(metric, remove_labels=set()) + simplify_prometheus_metric_object(metric, labels_to_remove=set()) for metric in raw_metrics ] From 95027b86b3c88301951a263dc79bb9215f2fc31c Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Thu, 25 Sep 2025 09:57:46 +0200 Subject: [PATCH 12/13] set tool result size to none after it has been invalidated due to context window --- holmes/core/tools_utils/tool_context_window_limiter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/holmes/core/tools_utils/tool_context_window_limiter.py b/holmes/core/tools_utils/tool_context_window_limiter.py index 0d54f8086..5b4e3bfce 100644 --- a/holmes/core/tools_utils/tool_context_window_limiter.py +++ b/holmes/core/tools_utils/tool_context_window_limiter.py @@ -28,6 +28,7 @@ def prevent_overly_big_tool_response(tool_call_result: ToolCallResult, llm: LLM) tool_call_result.result.status = StructuredToolResultStatus.ERROR tool_call_result.result.data = None tool_call_result.result.error = error_message + tool_call_result.size = None sentry_helper.capture_toolcall_contains_too_many_tokens( tool_call_result, tool_call_result.size, max_tokens_allowed From 303bf6d8cc1c9ca8538179808d77ad1e4d6edbc3 Mon Sep 17 00:00:00 2001 From: Nicolas Herment Date: Thu, 25 Sep 2025 10:00:07 +0200 Subject: [PATCH 13/13] chore: linting --- holmes/core/tools_utils/tool_context_window_limiter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holmes/core/tools_utils/tool_context_window_limiter.py b/holmes/core/tools_utils/tool_context_window_limiter.py index 5b4e3bfce..b51422547 100644 --- a/holmes/core/tools_utils/tool_context_window_limiter.py +++ b/holmes/core/tools_utils/tool_context_window_limiter.py @@ -28,8 +28,8 @@ def prevent_overly_big_tool_response(tool_call_result: ToolCallResult, llm: LLM) tool_call_result.result.status = StructuredToolResultStatus.ERROR tool_call_result.result.data = None tool_call_result.result.error = error_message - tool_call_result.size = None sentry_helper.capture_toolcall_contains_too_many_tokens( tool_call_result, tool_call_result.size, max_tokens_allowed ) + tool_call_result.size = None