搜尋
首頁系統教程Linuxsql查詢的監視在Slack上發生

sql查詢的監視在Slack上發生

Jan 17, 2024 pm 07:45 PM
linuxlinux教程紅帽linux系統linux指令linux認證紅帽linuxlinux視頻

sql查詢的監視在Slack上發生

一個獲得關於慢查詢、意外錯誤和其它重要日誌通知的簡單 Go 秘訣。

我的 Slack 機器人提示我一個運行了很長時間 SQL 查詢。我應該盡快解決它。

我們不能管理我們無法去測量的東西。每個後台應用程式都需要我們監視它在資料庫上的效能。如果一個特定的查詢隨著資料量增長變慢,你必須在它變得太慢之前去優化它。

由於 Slack 已經成為我們工作的中心,它也在改變我們監視系統的方式。雖然我們已經有非常好的監視工具,如果在系統中任何東西有正在惡化的趨勢,讓 Slack 機器人告訴我們,也是一個非常棒的主意。例如,一個太長時間才完成的 SQL 查詢,或者,在一個特定的 Go 套件中發生一個致命的錯誤。

在這篇部落格文章中,我們將告訴你,透過使用已經支援這些特性的一個簡單的日誌系統 和 一個已存在的資料庫庫(database library) 怎麼去設定來達到這個目的。

使用記錄器

logger 是一個為 Go 函式庫和應用程式使用設計的小型函式庫。在這個例子中我們使用了它的三個重要的特性:

它為測量性能提供了一個簡單的定時器。
支援複雜的輸出過濾器,因此,你可以從指定的套件中選擇日誌。例如,你可以告訴記錄器僅從資料庫包中輸出,並且僅輸出超過 500 ms 的定時器日誌。
它有一個 Slack 鉤子,因此,你可以過濾並將日誌輸入到 Slack。
讓我們來看看在這個例子中,怎麼去使用定時器,稍後我們也會去使用過濾器:

package main
import (
    "github.com/azer/logger"
    "time"
)
var (
  users = logger.New("users")
  database = logger.New("database")
)
func main () {
  users.Info("Hi!")
  timer := database.Timer()
  time.Sleep(time.Millisecond * 250) // sleep 250ms
  timer.End("Connected to database")
  users.Error("Failed to create a new user.", logger.Attrs{
    "e-mail": "[email protected]",
  })
  database.Info("Just a random log.")
  fmt.Println("Bye.")
}

執行這個程式沒有輸出:

記錄器是缺省靜默的,因此,它可以在庫的內部使用。我們簡單地透過一個環境變數去查看日誌: 例如:

$ LOG=database@timer go run example-01.go
01:08:54.997 database(250.095587ms): Connected to database.
Bye

上面的範例我們使用了 database@timer 過濾器去查看 database 套件中輸出的計時器日誌。你也可以試試其它的過濾器,例如:

LOG=*: 所有日誌
LOG=users@error,database: 所有來自 users 的錯誤日誌,所有來自 database 的所有日誌
LOG=*@timer,database@info: 來自所有套件的計時器日誌和錯誤日誌,以及來自 database 的所有日誌
LOG=*,users@mute: 除了 users 之外的所有日誌

發送日誌到 Slack

控制台日誌是用來開發環境的,但是我們需要產品提供一個友善的介面。感謝 slack-hook, 我們可以輕鬆地在上面的範例中,使用 Slack 去整合它:

import (
  "github.com/azer/logger"
  "github.com/azer/logger-slack-hook"
)
func init () {
  logger.Hook(&slackhook.Writer{
    WebHookURL: "https://hooks.slack.com/services/...",
    Channel: "slow-queries",
    Username: "Query Person",
    Filter: func (log *logger.Log) bool {
      return log.Package == "database" && log.Level == "TIMER" && log.Elapsed >= 200
    }
  })
}

我們來解釋一下,在上面的範例中我們做了什麼:

行 #5: 設定入站 webhook url。這個 URL 連結在這裡。
行 #6: 選擇流日誌的入口通道。
行 #7: 顯示的發送者的使用者名稱。
行 #11: 使用流過濾器,僅輸出時間超過 200 ms 的定時器日誌。
希望這個範例能給你一個大概的思路。如果你有更多的問題,去看這個 記錄器的文件。

一個真實的範例: CRUD

crud 是一個用於 Go 的資料庫的 ORM 式的類別庫,它有一個隱藏特性是內部日誌系統使用 logger 。這可以讓我們很容易地監視正在執行的 SQL 查詢。

查詢

這有一個透過給定的 e-mail 去傳回使用者名稱的簡單查詢:

func GetUserNameByEmail (email string) (string, error) {
  var name string
  if err := DB.Read(&name, "SELECT name FROM user WHERE email=?", email); err != nil {
    return "", err
  }
  return name, nil
}

好吧,這個太短了, 感覺好像缺少了什麼,讓我們增加全部的上下文:

import (
  "github.com/azer/crud"
  _ "github.com/go-sql-driver/mysql"
  "os"
)
var db *crud.DB
func main () {
  var err error
  DB, err = crud.Connect("mysql", os.Getenv("DATABASE_URL"))
  if err != nil {
    panic(err)
  }
  username, err := GetUserNameByEmail("[email protected]")
  if err != nil {
    panic(err)
  }
  fmt.Println("Your username is: ", username)
}

因此,我們有一個透過環境變數 DATABASE_URL 連接到 MySQL 資料庫的 crud 實例。如果我們運行這個程序,將看到有一行輸出:

$ DATABASE_URL=root:123456@/testdb go run example.go
Your username is: azer

如我前面提到的,日誌是 預設靜默的。讓我們看一下 crud 的內部日誌:

$ LOG=crud go run example.go
22:56:29.691 crud(0): SQL Query Executed: SELECT username FROM user WHERE email='[email protected]'
Your username is: azer

這很簡單,而且足夠我們去查看在我們的開發環境中查詢是怎麼執行的。

CRUD 和 Slack 整合

記錄器是為配置管理應用程式層級的「內部日誌系統」而設計的。這意味著,你可以透過在你的應用程式層級配置記錄器,讓 crud 的日誌流入 Slack :

import (
  "github.com/azer/logger"
  "github.com/azer/logger-slack-hook"
)
func init () {
  logger.Hook(&slackhook.Writer{
    WebHookURL: "https://hooks.slack.com/services/...",
    Channel: "slow-queries",
    Username: "Query Person",
    Filter: func (log *logger.Log) bool {
      return log.Package == "mysql" && log.Level == "TIMER" && log.Elapsed >= 250
    }
  })
}

在上面的程式碼中:

我們匯入了 logger 和 logger-slack-hook 函式庫。
我們配置記錄器日誌流入 Slack。這個配置覆蓋了程式碼庫中 記錄器 所有的用法, 包括第三方依賴。
我們使用了流過濾器,僅輸出 MySQL 套件中超過 250 ms 的定時器日誌。
這種使用方法可以被擴展,而不僅僅是慢查詢報告。我個人使用它來追蹤指定包中的重要錯誤, 也用於統計一些類似新用戶登錄或產生付款的日誌。

在這篇文章中提到的套件

crud

logger

logger-slack-hook

告訴我們 如果你有任何的問題或建議

以上是sql查詢的監視在Slack上發生的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:Linux就该这么学。如有侵權,請聯絡admin@php.cn刪除
Linux管理員的薪水是多少?Linux管理員的薪水是多少?Apr 17, 2025 am 12:24 AM

Linux管理員的平均年薪在美國為75,000至95,000美元,歐洲為40,000至60,000歐元。提升薪資可以通過:1.持續學習新技術,如雲計算和容器技術;2.積累項目經驗並建立Portfolio;3.建立職業網絡,拓展人脈。

Linux的主要目的是什麼?Linux的主要目的是什麼?Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

互聯網在Linux上運行嗎?互聯網在Linux上運行嗎?Apr 14, 2025 am 12:03 AM

互聯網運行不依賴單一操作系統,但Linux在其中扮演重要角色。 Linux廣泛應用於服務器和網絡設備,因其穩定性、安全性和可擴展性受歡迎。

Linux操作是什麼?Linux操作是什麼?Apr 13, 2025 am 12:20 AM

Linux操作系統的核心是其命令行界面,通過命令行可以執行各種操作。 1.文件和目錄操作使用ls、cd、mkdir、rm等命令管理文件和目錄。 2.用戶和權限管理通過useradd、passwd、chmod等命令確保系統安全和資源分配。 3.進程管理使用ps、kill等命令監控和控制系統進程。 4.網絡操作包括ping、ifconfig、ssh等命令配置和管理網絡連接。 5.系統監控和維護通過top、df、du等命令了解系統運行狀態和資源使用情況。

使用Linux別名提高自定義命令快捷方式的生產率使用Linux別名提高自定義命令快捷方式的生產率Apr 12, 2025 am 11:43 AM

介紹 Linux是一個強大的操作系統,由於其靈活性和效率,開發人員,系統管理員和電源用戶都喜歡。但是,經常使用長而復雜的命令可能是乏味的

Linux實際上有什麼好處?Linux實際上有什麼好處?Apr 12, 2025 am 12:20 AM

Linux適用於服務器、開發環境和嵌入式系統。 1.作為服務器操作系統,Linux穩定高效,常用於部署高並發應用。 2.作為開發環境,Linux提供高效的命令行工具和包管理系統,提升開發效率。 3.在嵌入式系統中,Linux輕量且可定制,適合資源有限的環境。

在Linux上掌握道德黑客的基本工具和框架在Linux上掌握道德黑客的基本工具和框架Apr 11, 2025 am 09:11 AM

簡介:通過基於Linux的道德黑客攻擊數字邊界 在我們越來越相互聯繫的世界中,網絡安全至關重要。 道德黑客入侵和滲透測試對於主動識別和減輕脆弱性至關重要

如何學習Linux基礎知識?如何學習Linux基礎知識?Apr 10, 2025 am 09:32 AM

Linux基礎學習從零開始的方法包括:1.了解文件系統和命令行界面,2.掌握基本命令如ls、cd、mkdir,3.學習文件操作,如創建和編輯文件,4.探索高級用法如管道和grep命令,5.掌握調試技巧和性能優化,6.通過實踐和探索不斷提陞技能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具