How to Use Alert History Tools for Monitoring Ambari Clusters
The get_alerts_history tool in the mcp-ambari-api repository provides a unified interface for querying both real-time and historical alert data from Apache Ambari clusters through the Model Context Protocol (MCP).
Alert history tools for monitoring are essential for maintaining cluster health and investigating past incidents. The call518/mcp-ambari-api project exposes these capabilities as MCP tools, allowing you to retrieve current alerts or deep-dive into historical records without writing custom REST clients. This guide explains how to leverage the get_alerts_history tool to monitor your Ambari-managed clusters effectively.
Understanding the Alert History Architecture
The alert history functionality is implemented across two primary files in the repository, working together to handle API communication, data transformation, and output formatting.
Core Components and File Locations
The implementation spans the following key files:
src/mcp_ambari_api/mcp_main.py(line 2028): Contains theget_alerts_historytool definition, argument parsing, endpoint selection, and fallback logic for timestamp filtering.src/mcp_ambari_api/functions.py(line 1456): Housesformat_alerts_output, which dispatches to specific formatters includingformat_alerts_compact(line 1559),format_alerts_summary, andformat_alerts_detailed.src/mcp_ambari_api/functions.py(line 1150): Provides utility functions includingformat_timestamp,safe_timestamp_compare, andget_current_time_contextfor handling date conversions and time-based filtering.
Two Operational Modes: Current vs. History
The tool operates in two distinct modes, selected via the mode parameter:
| Mode | Ambari Endpoint | Use Case |
|---|---|---|
current |
/clusters/<cluster>/alerts |
Real-time health checks and active alert monitoring |
history |
/clusters/<cluster>/alert_history |
Trend analysis, incident investigation, and historical reporting |
When using mode="history", the tool automatically applies sorting by state and timestamp in descending order, and supports pagination through the page_size and start_page parameters.
Querying Alert History with get_alerts_history
The get_alerts_history tool accepts comprehensive filtering parameters to narrow down results to specific services, hosts, time ranges, and severity states.
Basic Parameters and Filtering
The tool supports the following key parameters for refining your queries:
cluster_name: The target Ambari cluster (required).service_name: Filter to a specific service (e.g., "HDFS", "YARN").host_name: Filter to alerts from a specific host.state_filter: Filter by alert state ("CRITICAL", "WARNING", "OK", "UNKNOWN").definition_name: Filter by specific alert definition.maintenance_state: Filter by maintenance state.
Handling Timestamps and Pagination
For historical queries, timestamp parameters accept either integer milliseconds since epoch or numeric strings:
from_timestamp: Start of the time range (inclusive).to_timestamp: End of the time range (inclusive).page_size: Number of records per request (default varies).start_page: Page offset for pagination (0-based).
If Ambari rejects timestamp predicates due to type mismatches, the implementation automatically falls back to fetching without time predicates and applies client-side filtering using safe_timestamp_compare.
import asyncio
from mcp_ambari_api.mcp_main import get_alerts_history
async def fetch_critical_history():
"""Retrieve critical HDFS alerts from the past 24 hours."""
import time
now_ms = int(time.time() * 1000)
day_ago_ms = now_ms - (24 * 60 * 60 * 1000)
result = await get_alerts_history(
mode="history",
cluster_name="production_cluster",
service_name="HDFS",
state_filter="CRITICAL",
from_timestamp=day_ago_ms,
to_timestamp=now_ms,
format="compact",
limit=50,
include_time_context=True
)
return result
# Run the async function
history = asyncio.run(fetch_critical_history())
print(history)
Formatting and Output Options
The tool provides three distinct output formats to suit different monitoring workflows, controlled by the format parameter.
Compact, Summary, and Detailed Views
The format_alerts_output dispatcher in functions.py routes to specific formatters based on the format parameter:
compact(default): Produces a column-based table with one line per alert, showing timestamp, state, service, host, and definition name. Implemented informat_alerts_compactat line 1559.summary: Aggregates alerts by state and service, providing high-level counts suitable for dashboards. Implemented informat_alerts_summary.detailed: Returns full alert objects with all available fields, including alert text, component names, and metadata. Implemented informat_alerts_detailed.
# Example: Comparing output formats
async def compare_formats():
base_params = {
"mode": "current",
"cluster_name": "dev_cluster",
"service_name": "YARN",
"limit": 5
}
# Compact view for quick scanning
compact = await get_alerts_history(**base_params, format="compact")
# Detailed view for investigation
detailed = await get_alerts_history(**base_params, format="detailed")
return compact, detailed
compact_view, detailed_view = asyncio.run(compare_formats())
print("=== COMPACT ===")
print(compact_view)
print("\n=== DETAILED ===")
print(detailed_view)
Practical Examples for Monitoring Workflows
These real-world patterns demonstrate how to integrate alert history tools for monitoring into your operational procedures.
Retrieving Critical Alerts from the Last 24 Hours
This pattern is essential for daily health checks and incident response:
import asyncio
import time
from mcp_ambari_api.mcp_main import get_alerts_history
async def daily_critical_check(cluster_name: str):
"""Fetch all critical alerts from the last 24 hours across all services."""
now_ms = int(time.time() * 1000)
day_ago_ms = now_ms - (24 * 60 * 60 * 1000)
result = await get_alerts_history(
mode="history",
cluster_name=cluster_name,
state_filter="CRITICAL",
from_timestamp=day_ago_ms,
to_timestamp=now_ms,
format="compact",
limit=100,
include_time_context=True
)
return result
# Execute for production cluster
alerts = asyncio.run(daily_critical_check("production_hdp"))
print(alerts)
Paginating Through Large Historical Datasets
When investigating incidents that occurred weeks ago or analyzing long-term trends, you'll encounter large result sets. Use pagination to retrieve data in manageable chunks:
async def fetch_monthly_trend(cluster_name: str, service: str):
"""Retrieve all alerts for a service over a month using pagination."""
# January 2024 example timestamps (milliseconds)
start_ts = 1704067200000 # Jan 1, 2024
end_ts = 1706745600000 # Feb 1, 2024
all_alerts = []
page_size = 200
start_page = 0
while True:
batch = await get_alerts_history(
mode="history",
cluster_name=cluster_name,
service_name=service,
from_timestamp=start_ts,
to_timestamp=end_ts,
page_size=page_size,
start_page=start_page,
format="summary" # Use summary for aggregation
)
if not batch or "No alerts" in batch:
break
all_alerts.append(batch)
start_page += 1
# Safety limit to prevent infinite loops
if start_page > 50:
break
return all_alerts
# Fetch YARN history for analysis
yarn_history = asyncio.run(fetch_monthly_trend("analytics_cluster", "YARN"))
Summary
The alert history tools for monitoring in the mcp-ambari-api repository provide a robust interface for querying Ambari cluster health data through the Model Context Protocol. Key takeaways include:
- Dual-mode operation: Use
mode="current"for real-time alerts via/clusters/<cluster>/alertsormode="history"for historical analysis via/clusters/<cluster>/alert_history. - Flexible filtering: Narrow results by service, host, state (CRITICAL, WARNING), and precise time ranges using millisecond timestamps.
- Robust fallback: The implementation automatically handles Ambari timestamp predicate failures by falling back to client-side filtering via
safe_timestamp_compare. - Multiple output formats: Choose
compactfor quick scanning,summaryfor dashboards, ordetailedfor incident investigation. - Pagination support: Handle large historical datasets efficiently using
page_sizeandstart_pageparameters.
Frequently Asked Questions
How do I convert human-readable dates to the timestamps required by get_alerts_history?
The tool expects timestamps in milliseconds since epoch (Unix timestamp × 1000). In Python, convert datetime objects using int(datetime.timestamp() * 1000) or use time.time() * 1000 for the current time. The implementation in mcp_main.py automatically coerces string inputs to integers using _coerce_ts, but providing integers directly is recommended for precision.
What is the difference between the compact, summary, and detailed output formats?
The compact format (default) displays one alert per line in a columnar layout showing timestamp, state, service, host, and definition name—ideal for quick terminal scanning. The summary format aggregates alerts by state and service, providing high-level counts suitable for dashboard widgets or executive summaries. The detailed format returns complete alert objects with all metadata fields, including full alert text and component details, making it optimal for incident root-cause analysis.
How does the tool handle large historical datasets that span thousands of alerts?
For large result sets, the tool implements pagination through the page_size and start_page parameters. When mode="history" is specified, the implementation automatically adds from and page_size parameters to the Ambari REST query. If Ambari returns more data than expected or if you need to traverse large windows, increment start_page (0-based) to retrieve subsequent batches. The tool also includes a fallback mechanism that filters timestamps client-side if the Ambari server rejects timestamp predicates, ensuring robust data retrieval even with complex queries.
Can I filter alerts by specific services or hosts when querying history?
Yes, the get_alerts_history tool supports granular filtering through the service_name and host_name parameters. When provided, these parameters scope the query to specific Ambari services (e.g., "HDFS", "YARN") or individual hosts. Additionally, you can filter by state_filter (CRITICAL, WARNING, OK, UNKNOWN) and definition_name to target specific alert types. These filters work in both current and history modes, though they are particularly valuable in history mode for investigating past issues affecting specific cluster components.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →