问题

上一篇文章中,我们使用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

#!/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和数据:

总结

  • 在inputs.exec中最好是调用脚本,而不是命令。这样当你需要变更数据收集逻辑,直接修改脚本即可,而不需要修改Telegraf的配置文件,避免重启服务和配置干扰

  • 被调用的脚本的输出,要是stdout,才能被正确写入influxdb

  • Windows 上文件路径和符号escape要特别注意

  • 如果对收集性能特别敏感或者收集频率特别高时,使用Go自定义Plugin

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

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

  1. Telegraf和Grafana监控多平台上的SQL Server

    问题 SQL Server在很多企业中部署在多个平台上(Windows,Linux和Container),需要一种能支持多平台的解决方案用于收集和展示相关的监控指标. 我选择企业中比较流行的监控展示工 ...

  2. 1. SQL Server服务器监控实现方法

    对于服务器的监控,和对数据库的监控,很少有合二为一的工具,如果有的话,一般是付费软件,或者自行开发的工具.所以如果不想购买软件,也不想花精力去开发的话,可以结合一些免费/开源的工具.自定义脚本,来完成 ...

  3. SQL Server Profiler监控执行语句

    SQL Server Profiler监控执行语句,这个功能主要用在实时的监控对数据库执行了什么操作,从而及时有效的跟踪系统的运行. 常规配置选项,名称.模板.保存到文件(可以复用). 事件选择,可以 ...

  4. SQL Server Profiler监控SQL Server性能

    全面掌握SQL Server Profiler 1.       原理与相关概念介绍 SQL Server Profiler,大家已经非常熟悉.常常在性能优化中使用,本文档详细介绍SQL Server ...

  5. SQL Server 作业监控

    原文:SQL Server 作业监控 在讲解SQLServer Agent Jobs之前,先要讲解msdb. Msdb是SQLServer的系统数据库之一,用于存储SQLServer的配置.元数据等信 ...

  6. 6. SQL Server数据库监控 - 如何告警

    原文:6. SQL Server数据库监控 - 如何告警 常用的告警方式大致有:短信.邮件.应用程序 (beep提示,图标提示,升窗提示等),可是不能一直坐在电脑前看着应用程序,或者用脚本部署监控,根 ...

  7. SQL Server Audit监控触发器状态

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 注意事项(Attention) 疑问(Questions) 参 ...

  8. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  9. SQL Server自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

随机推荐

  1. 浅析Block闭包

    浅析Block闭包 简单来说,block就是将函数及其上下文封装起来的对象,从功能上可以把它看作是C++中的匿名函数,也可称之为块. Block类型写法: 返回值+(^块名)+(参数)= ^(参数){ ...

  2. 利用Python科学计算处理物理问题(和物理告个别)

    背景: 2019年初由于尚未学习量子力学相关知识,所以处于自学阶段.浅显的学习了曾谨言的量子力学一卷和格里菲斯编写的量子力学教材.注重将量子力学的一些基本概念了解并理解.同时老师向我们推荐了Quant ...

  3. Spring JSR-250 注释

    Spring还使用基于 JSR-250 注释,它包括 @PostConstruct 注释 @PreDestroy 注释 @Resource 注释 @PostConstruct 和 @PreDestro ...

  4. PHP持久配置容器Yaconf

    PHP持久配置容器Yaconf的安装及使用 Yaconf介绍:Yaconf是一个配置容器,它解析ini文件,在PHP启动时将结果存储在PHP中,配置存在于整个PHP生命周期中,这使得它非常快. 要求: ...

  5. Unity实现精灵资源动态加载

    private Sprite LoadSourceSprite(string relativePath) {         //把资源加载到内存中         UnityEngine.Objec ...

  6. Python中对文件的读写

    读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘. 读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系 ...

  7. mysql排序,同样的语句 查询结果不一样的问题

    一个项目,某段数据顺序出现异常导致运行异常.早期没有问题,用开发版本也没有问题,同样的查询排序语句在mysql客户端执行也没有问题. 这个排序不一致问题,这里记录下. 如下查询语句,根据‘order’ ...

  8. idea 开发 webpack项目时,只要已加入SVN 版本控制 一直 updating 问题解决

    场景描述,这是一个困扰我很久的一个问题,一直百度,都解决不了,今天自己通过设置终于解决了,慢慢的都是辛酸泪,赶快写个笔记记录一下. 对于idea 开发 vue-cli+webpack 项目,idea  ...

  9. 低功耗SRAM主要三部分功耗来源

    随着SOC 技术的迅猛发展,由电池供电的便携式电子产品得到了广泛应用,如智能手机.运动手环.ipad.部分汽车电子等.近年来半导体工艺已进入深亚微米甚至纳米阶段,工艺尺寸不断缩小,但是由于电池技术的缓 ...

  10. Chisel3 - 基本数据类型

    https://mp.weixin.qq.com/s/bSrM-wLRn7O_75xYKeoaEQ   Chisel中的基本数据类型,不是Verilog中的Wire和Reg.Wire和Register ...