Telegraf和Grafana監控多平臺上的SQL Server-自定義監控數據收集

来源:https://www.cnblogs.com/Joe-T/archive/2020/06/11/13026494.html
-Advertisement-
Play Games

問題 在上一篇文章中,我們使用Telegraf自帶的Plugin配置好了的監控,但是自帶的Plugin並不能完全覆蓋我們想要的監控指標,就需要收集額外的自定義的監控數據,實現的方法有: 開發自己的Telegraf Plugin 使用可以執行自定義腳本的inputs plugin 此處收集的監控項不多 ...


問題

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

  • 本文內容僅代表個人觀點,與任何公司和組織無關


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文件壓縮與打包 壓縮文件的指令介紹: 壓縮文件通常分為: 常用尾碼名 壓縮命令 備註 .zip zip 不常用,用gzip取代 .gz gzip 常用.可以解開zip,gzip,可用zcat命令讀出 .bz2 bzip2 花費時間要久,但壓縮效率更高 .xz xz xz壓縮比很高,但花費時間大約為g ...
  • 故障描述 解決方法 win+r,輸入regedit,進入註冊表 依次打開HKEY_CURRENT_USER->Software->Baidu->BaiDuYunGuanJia 右鍵BaiDuYunGuanJia,刪除 ...
  • Redis 發佈訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息,它的發佈與訂閱功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令組成。 通過執行SUBSCRIBE命令,客戶端可以訂閱一個或多個頻道,從而成為這些頻道的訂閱者:每當有其他客 ...
  • select * from a where id in (select id from b) 等價於: for select id from b for select 8 from a where a.id = b.id 當b表數據必須小於a表數據時,in優於exists select * from ...
  • 紙上得來終覺淺,絕知此事要躬行。 概述 複製是指將主資料庫的DDL 和 DML 操作通過二進位日誌傳到從庫伺服器中,然後在從庫上對這些日誌重新執行(也叫重做),從而使得從庫和主庫的數據保持同步。 MySQL支持一臺主庫同時向多台從庫進行複製, 從庫同時也可以作為其他從伺服器的主庫,實現鏈狀複製。 優 ...
  • 參考文章: MySQL百萬級數據量分頁查詢方法及其優化 MySQL分頁查詢優化 重點提一下: 在優化分頁語句過程中,一定註意查詢的語句添加排序欄位,一定自己建表實踐,有的可能不一定有效果哦 比如下麵這兩個語句,返回的結果就不是一樣的。具體什麼原因可以看看我另一篇博客 MySQL 預設排序是什麼 SE ...
  • 紙上得來終覺淺,絕知此事要躬行。 InnoDB行鎖 開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。 InnoDB 實現了以下兩種類型的行鎖。 共用鎖(S):又稱為讀鎖,簡稱S鎖,共用鎖就是多個事務對於同一數據可以共用一把鎖,都能訪問到數據,但是只能讀不能修改。 排他鎖 ...
  • 紙上得來終覺淺,絕知此事要躬行。 鎖的分類 從對數據操作的粒度分 : 表鎖:操作時,會鎖定整個表。 行鎖:操作時,會鎖定當前操作行。 從對數據操作的類型分: 讀鎖(共用鎖):針對同一份數據,多個讀操作可以同時進行而不會互相影響。 寫鎖(排它鎖):當前操作沒有完成之前,它會阻斷其他寫鎖和讀鎖。 MyS ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...