Remove deprecated files and enhance documentation - Deleted `coverage.sh`, `docker-compose.yaml`, `Dockerfile`, and simulator-related files to streamline the project structure. - Updated `README.md` to provide a comprehensive overview of the OPC Ingestor, including features, architecture, installation, usage, and troubleshooting. - Enhanced docstrings across various classes and methods in the `ingestor` module for better clarity and maintainability. - Improved Prometheus metrics documentation in `metrics.py` to ensure proper monitoring and observability of the system.
174 lines
5.0 KiB
Python
174 lines
5.0 KiB
Python
"""
|
|
Prometheus metrics configuration for the OPC Ingestor application.
|
|
|
|
This module defines all the metrics used for monitoring and observability
|
|
of the OPC Ingestor system. It includes metrics for:
|
|
|
|
- Application health and performance
|
|
- OPC server connections and subscriptions
|
|
- Data processing and storage operations
|
|
- Resource management and load balancing
|
|
- Error tracking and notification systems
|
|
|
|
All metrics follow Prometheus naming conventions and include appropriate
|
|
labels for multi-dimensional analysis and alerting.
|
|
"""
|
|
|
|
from prometheus_client import Counter, Gauge, Histogram
|
|
|
|
# Metric label definitions for consistent labeling across all metrics
|
|
POD_ID_LABEL = ["pod_id"]
|
|
SERVER_LABELS = ["pod_id", "server_name", "server_url"]
|
|
KAFKA_LABELS = ["pod_id", "topic"]
|
|
REDIS_LABELS = ["pod_id", "operation"]
|
|
NOTIFICATION_LABELS = ["pod_id", "level", "block"]
|
|
|
|
MAIN_LABELS = ["pod_id"]
|
|
|
|
# --- Reliability Metrics ---
|
|
TAG_WRITTEN_COUNT = Counter(
|
|
"ingestor_tag_written_count",
|
|
"Number of writing process to the collection",
|
|
[*MAIN_LABELS, "tag_name", "collection_name"],
|
|
)
|
|
|
|
# --- General Application Metrics ---
|
|
APP_LOOP_COUNT = Counter(
|
|
"app_main_loop_total",
|
|
"Total number of times the application main loop has run",
|
|
POD_ID_LABEL,
|
|
)
|
|
APP_LOOP_DURATION = Histogram(
|
|
"app_main_loop_duration_seconds",
|
|
"Duration of the application main loop in seconds",
|
|
POD_ID_LABEL,
|
|
)
|
|
APP_ERRORS_TOTAL = Counter(
|
|
"app_errors_total",
|
|
"Total number of unhandled errors in the main loop",
|
|
POD_ID_LABEL,
|
|
)
|
|
APP_UP = Gauge(
|
|
"app_up",
|
|
"Indicates if the application is running (1) or shutting down (0)",
|
|
POD_ID_LABEL,
|
|
)
|
|
|
|
# --- Ingestor Manager Metrics ---
|
|
ACTIVE_INGESTORS = Gauge(
|
|
"ingestor_active_total",
|
|
"Number of active ingestors reported by Redis",
|
|
)
|
|
SLOTS_TOTAL = Gauge(
|
|
"ingestor_slots_total",
|
|
"Total number of slots configured in Redis",
|
|
)
|
|
LEASES_TOTAL = Gauge(
|
|
"ingestor_leases_total",
|
|
"Total number of leases (allocated slots) in Redis",
|
|
)
|
|
SLOTS_MANAGED = Gauge(
|
|
"ingestor_slots_managed_current",
|
|
"Number of slots currently managed by this ingestor instance",
|
|
POD_ID_LABEL,
|
|
)
|
|
SLOTS_ACQUIRED = Counter(
|
|
"ingestor_slots_acquired_total",
|
|
"Total number of slots acquired by this instance",
|
|
POD_ID_LABEL,
|
|
)
|
|
SLOTS_RELEASED = Counter(
|
|
"ingestor_slots_released_total",
|
|
"Total number of slots released by this instance",
|
|
POD_ID_LABEL,
|
|
)
|
|
OPC_MANAGERS_ACTIVE = Gauge(
|
|
"ingestor_opc_managers_active",
|
|
"Number of active OPC Managers in this instance",
|
|
POD_ID_LABEL,
|
|
)
|
|
OPC_SUBSCRIPTION_ERRORS = Counter(
|
|
"ingestor_opc_subscription_errors_total",
|
|
"Errors when trying to subscribe to OPC tags",
|
|
["pod_id", "server", "slot"],
|
|
)
|
|
|
|
# --- OPC Manager Metrics ---
|
|
OPC_CONNECTIONS_TOTAL = Counter(
|
|
"opc_connections_initiated_total",
|
|
"Total connection attempts to OPC servers",
|
|
["pod_id", "server_name"],
|
|
)
|
|
OPC_CONNECTIONS_FAILED = Counter(
|
|
"opc_connections_failed_total",
|
|
"Total failed connection attempts to OPC servers",
|
|
["pod_id", "server_name"],
|
|
)
|
|
OPC_CONNECTION_STATUS = Gauge(
|
|
"opc_connection_status",
|
|
"Connection status with the OPC server (1=connected, 0=disconnected)",
|
|
SERVER_LABELS,
|
|
)
|
|
OPC_SUBSCRIPTIONS_CREATED = Counter(
|
|
"opc_subscriptions_created_total",
|
|
"Total OPC subscriptions created",
|
|
["pod_id", "server_name", "slot_name"],
|
|
)
|
|
OPC_TAGS_SUBSCRIBED = Gauge(
|
|
"opc_tags_subscribed_current",
|
|
"Current number of OPC tags subscribed on a server",
|
|
["pod_id", "server_name"],
|
|
)
|
|
OPC_CYCLES_WITHOUT_DATA = Gauge(
|
|
"opc_cycles_without_data",
|
|
"Current number of cycles without receiving data from a server",
|
|
["pod_id", "server_name"],
|
|
)
|
|
OPC_RECONNECTIONS_TOTAL = Counter(
|
|
"opc_reconnections_tried_total",
|
|
"Reconnection attempts to an OPC server after a loss",
|
|
["pod_id", "server_name"],
|
|
)
|
|
|
|
# --- Data Manager (Kafka) Metrics ---
|
|
KAFKA_MESSAGES_SENT = Counter(
|
|
"kafka_messages_sent_total", "Total messages sent to Kafka", KAFKA_LABELS
|
|
)
|
|
KAFKA_MESSAGES_ERRORS = Counter(
|
|
"kafka_messages_errors_total",
|
|
"Total errors sending messages to Kafka",
|
|
KAFKA_LABELS,
|
|
)
|
|
KAFKA_CONNECTION_STATUS = Gauge(
|
|
"kafka_connection_status",
|
|
"Connection status with Kafka (1=connected, 0=disconnected)",
|
|
POD_ID_LABEL,
|
|
)
|
|
|
|
# --- Resource Manager (Redis) Metrics ---
|
|
REDIS_OPERATIONS_TOTAL = Counter(
|
|
"redis_operations_total", "Total number of Redis operations performed", REDIS_LABELS
|
|
)
|
|
REDIS_OPERATIONS_ERRORS = Counter(
|
|
"redis_operations_errors_total",
|
|
"Total number of errors in Redis operations",
|
|
REDIS_LABELS,
|
|
)
|
|
REDIS_OPERATIONS_DURATION = Histogram(
|
|
"redis_operations_duration_seconds",
|
|
"Duration of Redis operations in seconds",
|
|
REDIS_LABELS,
|
|
)
|
|
REDIS_CONNECTION_STATUS = Gauge(
|
|
"redis_connection_status",
|
|
"Connection status with Redis (1=connected, 0=disconnected)",
|
|
POD_ID_LABEL,
|
|
)
|
|
|
|
# --- Notification Metrics ---
|
|
NOTIFICATIONS_SENT = Counter(
|
|
"notifications_sent_total",
|
|
"Total number of notifications sent",
|
|
NOTIFICATION_LABELS,
|
|
)
|