Count Log Entries Stored Procedure and check by Nagios
We created a stored procedure that returns the count of log entries in a table within the last time period. The resultant count is monitored by Nagios. When the value is less than "X", an alert is triggered. I know there will be at least X number of entries in a given time frame because I have other Nagios alerts checking the "front end" of the application. The alert would signal an issue with the front end not logging data to the backend correctly, eg. an Application Problem.
Below is the stored procedure that accepts TWO variables...
- The "identifier" of the application which helps determine the table name (eg. log_appID)
- The integer value of minutes back in time, eg. "the last 10" minutes.
USE [PRD_00101]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetLogCountForLastNumberOfMinutes]
( @PortalID int,
@NumberOfMinutesBack int -- Number of minutes before the current time
)
AS
DECLARE @TableRowCount int, @TableName nvarchar(50),
@SQLStatement nvarchar(4000), @SQLParameterList nvarchar(500),
@Suffix nvarchar(6);
SET @TableRowCount = -1;
SELECT @Suffix = CAST(@PortalID AS nvarchar(6))
SELECT @TableName = 'Analysis_Log_' + @Suffix
-- PRINT @PortalID
-- PRINT @NumberOfMinutesBack
-- PRINT GETDATE()
-- PRINT DATEADD(mi,-@NumberOfMinutesBack,GETDATE())
SELECT @SQLStatement = 'IF EXISTS (SELECT * FROM sys.indexes
WHERE object_id = OBJECT_ID(N''[dbo].[' + @TableName + ']''))'
SELECT @SQLStatement = @SQLStatement + 'SELECT @TableRowCount = COUNT(*)
FROM ' + @TableName + ' WITH (READPAST) WHERE PortalID = @PortalID
AND hitdatetime > DATEADD(mi,-@NumberOfMinutesBack,GETDATE())'
SET @SQLParameterList = '@TableRowCount INT OUTPUT, @PortalID INT,
@NumberOfMinutesBack INT';
-- PRINT @SQLStatement
-- Get The Current Row Count For The Log_XXX table ...
EXECUTE sp_executesql @SQLStatement, @SQLParameterList, @TableRowCount OUTPUT,
@PortalID, @NumberOfMinutesBack;
-- PRINT @TableRowCount
SELECT @TableRowCountHere's an example of the Nagios Command Line Check using the check_mssql plugin.
./check_mssql -H mssqlclus -p 1433 -U username -P password \ -D database -w 2.0 -c 3.0 -q \ "exec database.dbo.GetVisitLogCountForLastNumberOfMinutes \ appID, 10" -W30: -C10: -s
If there are less than 30 entries in the last 10 minutes, a WARNING will be triggered. A CRITICAL alert will be triggered if there are less than 10 entries in the last 10 minutes.
- MWalker's blog
- Login to post comments
-

Recent comments
28 weeks 6 days ago
33 weeks 23 hours ago
50 weeks 3 days ago
1 year 1 week ago
1 year 11 weeks ago
1 year 18 weeks ago
1 year 19 weeks ago
1 year 23 weeks ago
1 year 27 weeks ago