Telegraf和Grafana监控多平台上的SQL Server-自定义监控数据收集

问题

上一篇文章中,我们使用Telegraf自带的Plugin设置好了的监控,然则自带的Plugin并不能完全笼罩我们想要的监控指标,就需要网络分外的自定义的监控数据,实现的方式有:

  • 开发自己的Telegraf Plugin

  • 使用可以执行自定义剧本的inputs plugin

此处网络的监控项不多,网络距离也不是很频仍,以是我选择Telegraf预置的Inputs.exec plugin实现。它异常天真,可以执行随便下令和剧本。在剧本中实现获取监控数据的逻辑,然后使用inputs.exec执行。获取数据之后,需要按InfluxDB Line Protocol 花样组织数据,才气写入到Influxdb。这种花样的组织方式:

[measurement],[tags] [fields] [timestamp]

  • measurement,类似于SQL中表的观点,数据存放的容器

  • tags,K-V花样用于符号数据纪录,一样平常它们的值不经常转变,如主机名。同时tags上会确立索引,查询效率会好一些.

  • fields,K-V花样,示意真正网络的差别时间点的数据项,如CPU Load

  • timestamp,UNIX 时间戳,Influxdb是时序数据库,所有数据都要与时间关联起来。

  • measurement和tag之间用逗号分开,fields 与它们用空格(whitespace)分开

不管是运行在Linux照样Windows上的SQL,通常使用T-SQL查询实例内部的数据和使用操作系统剧本查询实例外部的数据以实现监控。接下来,以执行T-SQL获取自定义监控数据为例,看看在Windos和Linux上划分若何实现。

解决方案

首先在被监控的实例上把响应的逻辑写成存储历程,然后通过inputs.exec挪用之。

例如我在目的实例的influx库中创建了一个存储历程influx.usp_getInstanceInfo获取一些实例的设置信息。然后需要在telegraf设置文件中启用inputs.exec挪用这个存储历程。存储历程的输出数据如下:

sqlserver_property,host=SQL19N1,sql_instance=SQL19N1 host_platform="Linux",host_distribution="CentOS Linux",host_release=7,edition="Developer Edition (64-bit)",product_version="15.0.4033.1",collation="SQL_Latin1_General_CP1_CI_AS",is_clustered=f,is_hadr=t,cpu_count=2,scheduler_count=2,physical_memory_kb=6523904,max_workers_count=512,max_dop=0,max_memmory=2147483647 1590915136000000000

数据写入到sqlserver_property,tags包罗host,sql_instance,后面的全是fields。

  • SQL On Linux

使用SQLCMD挪用存储历程,把SQLCMD下令写到一个bash文件中/telegraf/get_sqlproperty.sh

shell编程(一):功能、执行、基础

#!/bin/bash

/opt/mssql-tools/bin/sqlcmd -S SQL19N1 -U telegraf -P <yourpassword> -d influx -y 0 -Q "EXEC influx.usp_getInstanceInfo"

修改telegraf.conf中的inputs.exec, 然后重启telegraf生效:

由于网络的是实例属性信息,网络距离设置的比较长。

 [[inputs.exec]]
#   ## Commands array
   commands = [
        "/telegraf/get_sqlproperty.sh"
        ]
        
   timeout = "5s"
   interval="24h"
   data_format = "influx"
  • SQL On Windows

Windows上首选使用PowerShell实现,把执行SQL的下令写到C:\Monitoring\scripts\get_sqlproperty.ps1。col_res是存储历程输出的列名。

(Invoke-Sqlcmd -ServerInstance SQL17N1 -Username telegraf -Password "<yourpassword>" -Database influx -Query "exec influx.usp_getInstanceInfo" ).col_res

修改telegraf.conf中的inputs.exec, 然后重启telegraf生效.

需要稀奇注意的问题:

  • 指定文件路径时,要使用Linux路径表达的forward slash(/), 而不是Windows中的 back slash(\)

  • ps1文件路径使用单引号(single quote)

  • 制止文件路径中有空格(whitespace)

 [[inputs.exec]]
#   ## Commands array
   commands = [
        "powershell 'C:/Monitoring/scripts/get_sqlproperty.ps1' "
        ]
        
   timeout = "5s"
   interval="24h"
   data_format = "influx"

设置完成后,看看measurement和数据:

Telegraf和Grafana监控多平台上的SQL Server-自定义监控数据收集

总结

  • 在inputs.exec中最好是挪用剧本,而不是下令。这样当你需要调换数据网络逻辑,直接修改剧本即可,而不需要修改Telegraf的设置文件,制止重启服务和设置滋扰

  • 被挪用的剧本的输出,要是stdout,才气被准确写入influxdb

  • Windows 上文件路径和符号escape要稀奇注意

  • 若是对网络性能稀奇敏感或者网络频率稀奇高时,使用Go自定义Plugin

  • 本文内容仅代表个人观点,与任何公司和组织无关

原创文章,作者:28qn新闻网,如若转载,请注明出处:http://www.28qn.com/archives/15388.html