diff --git a/config/config.go b/config/config.go index 664ff4d..0850c14 100644 --- a/config/config.go +++ b/config/config.go @@ -1,12 +1,7 @@ // Package config provides the influxdb-sqlserver specific configuration options. package config -import ( -// "fmt" -// "net" -// "strconv" -// "strings" -) +import () // Defaults for config variables which are not set const ( @@ -22,7 +17,7 @@ const ( DefaultDailyRotate bool = true DefaultMaxDays int = 7 - DefaultSqlScriptPath string = "sqlscripts/" + DefaultSqlScriptPath string = "/usr/local/influxdb-sqlserver/sqlscripts/" DefaultPollingInterval int = 15 DefaultPollingIntervalIfError int = 60 @@ -30,7 +25,7 @@ const ( DefaultInfluxDBUrl string = "http://localhost:8086/" DefaultInfluxDBTimeOut int = 0 DefaultInfluxDBDatabase string = "SQLSERVER" - DefaultInfluxDBPrecision string = "s" + DefaultInfluxDBPrecision string = "ms" ) type TOMLConfig struct { diff --git a/influxdb-sqlserver b/influxdb-sqlserver new file mode 100755 index 0000000..a4eff71 Binary files /dev/null and b/influxdb-sqlserver differ diff --git a/influxdb-sqlserver.conf b/influxdb-sqlserver.conf index 1a99ca7..e006c21 100644 --- a/influxdb-sqlserver.conf +++ b/influxdb-sqlserver.conf @@ -18,7 +18,7 @@ # database="SQLSERVER" ## Precision of writes, valid values are n, u, ms, s, m, and h - # precision= "s" + # precision= "ms" ## Connection timeout (in seconds). If not provided, will default to 0 (no timeout) # timeout=5 @@ -42,14 +42,14 @@ [servers.win8-dev1] ip = "192.168.1.30" port = 1433 - username="linuxuser" - password="linuxuser" + username="telegraf" + password="T$l$gr@f69*" [servers.win8-dev2] ip = "192.168.1.30" port = 2222 - username="linuxuser" - password="linuxuser" + username="telegraf" + password="T$l$gr@f69*" ### ### Scripts diff --git a/scripts/package.sh b/scripts/package.sh index fa304e1..a4d2986 100755 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -20,6 +20,7 @@ INSTALL_ROOT_DIR=/opt/influxdb-sqlserver CONFIG_ROOT_DIR=/etc/influxdb-sqlserver CONFIG_FILE=influxdb-sqlserver.conf PROG_LOG_DIR=/var/log/influxdb-sqlserver +SQLSCRIPTS_DIR_SOURCE=sqlscripts/ SQLSCRIPTS_DIR=/usr/local/influxdb-sqlserver/sqlscripts/ LOGROTATE_DIR=/etc/logrotate.d/ @@ -38,7 +39,7 @@ MAINTAINER=sqlzen@hotmail.com VENDOR=sqlzenmonitor DESCRIPTION="Collect Microsoft SQL Server metrics for reporting into InfluxDB" PKG_DEPS=(coreutils) -GO_VERSION="go1.5" +GO_VERSION="go1.8" GOPATH_INSTALL= BINS=( influxdb-sqlserver @@ -138,7 +139,7 @@ do_build() { echo "Copying configuration file..." cp ././$CONFIG_FILE $GOPATH_INSTALL/bin if [ $? -ne 0 ]; then - echo "Build failed, unable to Copying configuration file -- aborting" + echo "Build failed, unable to copy configuration file -- aborting" cleanup_exit 1 fi @@ -148,18 +149,6 @@ do_build() { echo "Build failed, unable to update configuration file -- aborting" cleanup_exit 1 fi - - sed -i 's|sqlscriptspath="sqlscripts/"|sqlscriptspath="/usr/local/influxdb-sqlserver/sqlscripts/"|g' $GOPATH_INSTALL/bin/$CONFIG_FILE - if [ $? -ne 0 ]; then - echo "Build failed, unable to update configuration file -- aborting" - cleanup_exit 1 - fi - - sed -i 's|sqlscriptsresultpath="sqlscripts/tmp/"|sqlscriptsresultpath="/usr/local/influxdb-sqlserver/sqlscripts/tmp/"|g' $GOPATH_INSTALL/bin/$CONFIG_FILE - if [ $? -ne 0 ]; then - echo "Build failed, unable to update configuration file -- aborting" - cleanup_exit 1 - fi echo "Build completed successfully." } @@ -257,7 +246,7 @@ if [ $? -ne 0 ]; then fi echo "$CONFIG_FILE copied to $TMP_WORK_DIR$CONFIG_ROOT_DIR" -cp sqlscripts/* $TMP_WORK_DIR/$SQLSCRIPTS_DIR 2>&1 | grep 'omitting directory' +cp -R $SQLSCRIPTS_DIR_SOURCE/* $TMP_WORK_DIR/$SQLSCRIPTS_DIR if [ $? -ne 0 ]; then echo "Failed to copy T-SQL scripts to packaging directory -- aborting." cleanup_exit 1 @@ -316,7 +305,8 @@ fi COMMON_FPM_ARGS="-C $TMP_WORK_DIR --vendor $VENDOR --url $URL --license $LICENSE \ --maintainer $MAINTAINER --after-install $POST_INSTALL_PATH \ --name influxdb-sqlserver --provides influxdb-sqlserver --version $VERSION \ - --config-files $CONFIG_ROOT_DIR --package ./packages" + --config-files $CONFIG_ROOT_DIR --package ./$rpm_package" + $rpm_args fpm -s dir -t rpm --description "$DESCRIPTION" $COMMON_FPM_ARGS if [ $? -ne 0 ]; then echo "Failed to create RPM package -- aborting." @@ -324,6 +314,11 @@ if [ $? -ne 0 ]; then fi echo "RPM package created successfully." +COMMON_FPM_ARGS="-C $TMP_WORK_DIR --vendor $VENDOR --url $URL --license $LICENSE \ + --maintainer $MAINTAINER --after-install $POST_INSTALL_PATH \ + --name influxdb-zabbix --provides influxdb-zabbix --version $VERSION \ + --config-files $CONFIG_ROOT_DIR --deb-no-default-config-files --package ./$debian_package" + fpm -s dir -t deb $deb_args --description "$DESCRIPTION" $COMMON_FPM_ARGS if [ $? -ne 0 ]; then echo "Failed to create Debian package -- aborting." diff --git a/sqlscripts/getmemoryclerksplit.sql b/sqlscripts/getmemoryclerksplit.sql index a18ae29..2b5f251 100644 --- a/sqlscripts/getmemoryclerksplit.sql +++ b/sqlscripts/getmemoryclerksplit.sql @@ -1,29 +1,68 @@ SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; - -DECLARE @w TABLE (ClerkCategory nvarchar(64) NOT NULL, UsedPercent decimal(9,2), UsedBytes bigint) -INSERT @w (ClerkCategory, UsedPercent, UsedBytes) -SELECT ClerkCategory -, UsedPercent = SUM(UsedPercent) -, UsedBytes = SUM(UsedBytes) -FROM -( -SELECT ClerkCategory = CASE MC.[type] - WHEN 'MEMORYCLERK_SQLBUFFERPOOL' THEN 'Buffer Pool' - WHEN 'CACHESTORE_SQLCP' THEN 'Cache (sql plans)' - WHEN 'CACHESTORE_OBJCP' THEN 'Cache (objects)' - ELSE 'Other' END -, SUM(pages_kb * 1024) AS UsedBytes -, Cast(100 * Sum(pages_kb)*1.0/(Select Sum(pages_kb) From sys.dm_os_memory_clerks) as Decimal(7, 4)) UsedPercent -FROM sys.dm_os_memory_clerks MC -WHERE pages_kb > 0 -GROUP BY CASE MC.[type] - WHEN 'MEMORYCLERK_SQLBUFFERPOOL' THEN 'Buffer Pool' - WHEN 'CACHESTORE_SQLCP' THEN 'Cache (sql plans)' - WHEN 'CACHESTORE_OBJCP' THEN 'Cache (objects)' - ELSE 'Other' END -) as T -GROUP BY ClerkCategory +DECLARE @sqlVers numeric(4,2) +SELECT @sqlVers = LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 4) +IF OBJECT_ID('tempdb..#MemoryClerk') IS NOT NULL + DROP TABLE #MemoryClerk; +CREATE TABLE #MemoryClerk ( + ClerkCategory nvarchar(64) NOT NULL, + UsedPercent decimal(9,2) NOT NULL, + UsedBytes bigint NOT NULL +); +DECLARE @DynamicClerkQuery AS NVARCHAR(MAX) +IF @sqlVers < 11 +BEGIN + SET @DynamicClerkQuery = N' + INSERT #MemoryClerk (ClerkCategory, UsedPercent, UsedBytes) + SELECT ClerkCategory + , UsedPercent = SUM(UsedPercent) + , UsedBytes = SUM(UsedBytes) + FROM + ( + SELECT ClerkCategory = CASE MC.[type] + WHEN ''MEMORYCLERK_SQLBUFFERPOOL'' THEN ''Buffer pool'' + WHEN ''CACHESTORE_SQLCP'' THEN ''Cache (sql plans)'' + WHEN ''CACHESTORE_OBJCP'' THEN ''Cache (objects)'' + ELSE ''Other'' END + , SUM((single_pages_kb + multi_pages_kb) * 1024) AS UsedBytes + , Cast(100 * Sum((single_pages_kb + multi_pages_kb))*1.0/(Select Sum((single_pages_kb + multi_pages_kb)) From sys.dm_os_memory_clerks) as Decimal(7, 4)) UsedPercent + FROM sys.dm_os_memory_clerks MC + WHERE (single_pages_kb + multi_pages_kb) > 0 + GROUP BY CASE MC.[type] + WHEN ''MEMORYCLERK_SQLBUFFERPOOL'' THEN ''Buffer pool'' + WHEN ''CACHESTORE_SQLCP'' THEN ''Cache (sql plans)'' + WHEN ''CACHESTORE_OBJCP'' THEN ''Cache (objects)'' + ELSE ''Other'' END + ) as T + GROUP BY ClerkCategory;' +END +ELSE +BEGIN + SET @DynamicClerkQuery = N' + INSERT #MemoryClerk (ClerkCategory, UsedPercent, UsedBytes) + SELECT ClerkCategory + , UsedPercent = SUM(UsedPercent) + , UsedBytes = SUM(UsedBytes) + FROM + ( + SELECT ClerkCategory = CASE MC.[type] + WHEN ''MEMORYCLERK_SQLBUFFERPOOL'' THEN ''Buffer pool'' + WHEN ''CACHESTORE_SQLCP'' THEN ''Cache (sql plans)'' + WHEN ''CACHESTORE_OBJCP'' THEN ''Cache (objects)'' + ELSE ''Other'' END + , SUM(pages_kb * 1024) AS UsedBytes + , Cast(100 * Sum(pages_kb)*1.0/(Select Sum(pages_kb) From sys.dm_os_memory_clerks) as Decimal(7, 4)) UsedPercent + FROM sys.dm_os_memory_clerks MC + WHERE pages_kb > 0 + GROUP BY CASE MC.[type] + WHEN ''MEMORYCLERK_SQLBUFFERPOOL'' THEN ''Buffer pool'' + WHEN ''CACHESTORE_SQLCP'' THEN ''Cache (sql plans)'' + WHEN ''CACHESTORE_OBJCP'' THEN ''Cache (objects)'' + ELSE ''Other'' END + ) as T + GROUP BY ClerkCategory;' +END +EXEC sp_executesql @DynamicClerkQuery; SELECT -- measurement @@ -43,7 +82,7 @@ SELECT Measurement = 'UsedPercent' , [Cache (objects)] = CAST(ISNULL(ROUND([Cache (objects)], 1), 0) as varchar(16)) , [Cache (sql plans)] = CAST(ISNULL(ROUND([Cache (sql plans)], 1), 0) as varchar(16)) , [Other] = CAST(ISNULL(ROUND([Other], 1), 0) as varchar(16)) -FROM (SELECT ClerkCategory, UsedPercent FROM @w) as G1 +FROM (SELECT ClerkCategory, UsedPercent FROM #MemoryClerk) as G1 PIVOT ( SUM(UsedPercent) @@ -57,10 +96,14 @@ SELECT 'UsedBytes' , [Cache (objects)] = CAST(ISNULL(ROUND([Cache (objects)], 1), 0) as varchar(16)) , [Cache (sql plans)] = CAST(ISNULL(ROUND([Cache (sql plans)], 1), 0) as varchar(16)) , [Other] = CAST(ISNULL(ROUND([Other], 1), 0) as varchar(16)) -FROM (SELECT ClerkCategory, UsedBytes FROM @w) as G2 +FROM (SELECT ClerkCategory, UsedBytes FROM #MemoryClerk) as G2 PIVOT ( SUM(UsedBytes) FOR ClerkCategory IN ([Buffer Pool], [Cache (objects)], [Cache (sql plans)], [Other]) ) AS PivotTable -) as T; +) as T + +IF OBJECT_ID('tempdb..#MemoryClerk') IS NOT NULL + DROP TABLE #MemoryClerk; + \ No newline at end of file diff --git a/sqlscripts/getperfcounters.sql b/sqlscripts/getperfcounters.sql index 743c3ee..ffed2d0 100644 --- a/sqlscripts/getperfcounters.sql +++ b/sqlscripts/getperfcounters.sql @@ -60,7 +60,7 @@ result = REPLACE(cc.counter_name + CASE WHEN LEN(cc.instance_name) > 0 THEN ' | When 272696576 Then cc.cntr_value - pc.cntr_value -- Per Second When 1073874176 Then IsNull(Cast(cc.cntr_value - pc.cntr_value as Money) / NullIf(cbc.cntr_value - pbc.cntr_value, 0), 0) -- Avg When 1073939712 Then cc.cntr_value - pc.cntr_value -- Base - Else cc.cntr_value End as int) as varchar(16)) + Else cc.cntr_value End as bigint) as varchar(19)) --+ ' ' + CAST(DATEDIFF(SECOND,{d '1970-01-01'}, GETDATE()) as varchar(32)) + '000000000' FROM #CCounters cc INNER JOIN #PCounters pc On cc.object_name = pc.object_name