Skip to main content
Glama
0xteamhq

Grafana MCP Server

by 0xteamhq

query_loki_stats

Retrieve statistics about log streams matching a LogQL selector from a Loki datasource within specified time ranges to analyze log volume and stream metrics.

Instructions

Retrieves statistics about log streams matching a given LogQL selector within a Loki datasource

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
datasourceUidYesThe UID of the datasource to query
endRfc3339NoThe end time of the query in RFC3339 format
logqlYesThe LogQL matcher expression to execute
startRfc3339NoThe start time of the query in RFC3339 format

Implementation Reference

  • The handler function that defines and implements the core logic of the 'query_loki_stats' tool, using LokiClient to fetch stats.
    export const queryLokiStats: ToolDefinition = { name: 'query_loki_stats', description: 'Retrieves statistics about log streams matching a given LogQL selector within a Loki datasource', inputSchema: QueryLokiStatsSchema, handler: async (params, context: ToolContext) => { try { const client = new LokiClient(context.config.grafanaConfig, params.datasourceUid); const timeRange: TimeRange = params.startRfc3339 || params.endRfc3339 ? { start: '', end: '' } : getDefaultTimeRange(); const stats = await client.queryStats( params.logql, params.startRfc3339 || timeRange.start, params.endRfc3339 || timeRange.end ); return createToolResult(stats); } catch (error: any) { return createErrorResult(error.message); } }, };
  • Zod schema defining the input parameters for the query_loki_stats tool.
    const QueryLokiStatsSchema = z.object({ datasourceUid: z.string().describe('The UID of the datasource to query'), logql: z.string().describe('The LogQL matcher expression to execute'), startRfc3339: z.string().optional().describe('The start time of the query in RFC3339 format'), endRfc3339: z.string().optional().describe('The end time of the query in RFC3339 format'), });
  • Function that registers the query_loki_stats tool (and other Loki tools) with the MCP server.
    export function registerLokiTools(server: any) { server.registerTool(listLokiLabelNames); server.registerTool(listLokiLabelValues); server.registerTool(queryLokiLogs); server.registerTool(queryLokiStats); server.registerTool(findErrorPatternLogs); }
  • The LokiClient.queryStats method that performs the HTTP request to Loki's /index/stats endpoint to retrieve log statistics.
    async queryStats(query: string, start?: string, end?: string): Promise<LokiStats> { try { const params: any = { query }; if (start) params.start = start; if (end) params.end = end; const response = await this.client.get('/loki/api/v1/index/stats', { params }); if (response.data.status !== 'success') { throw new Error(`Loki stats query failed: ${response.data.error || 'Unknown error'}`); } return response.data.data; } catch (error) { this.handleError(error); } }
  • Helper function to provide default time range (last hour) if not specified in tool parameters.
    function getDefaultTimeRange(): { start: string; end: string } { const now = Math.floor(Date.now() / 1000); const oneHourAgo = now - 3600; return { start: oneHourAgo.toString(), end: now.toString(), }; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/0xteamhq/mcp-grafana'

If you have feedback or need assistance with the MCP directory API, please join our Discord server