在信息系統(tǒng)項(xiàng)目中,UI、業(yè)務(wù)邏輯、數(shù)據(jù)庫操作、文件操作、網(wǎng)絡(luò)、API調(diào)用等許多環(huán)節(jié)都有可能產(chǎn)生性能問題,其中,數(shù)據(jù)庫讀寫是最為常見的操作,我們也發(fā)現(xiàn)其實(shí)許多項(xiàng)目中的大部分瓶頸多來自于數(shù)據(jù)庫操作。因此,在做性能優(yōu)化的過程中,我們總是特別關(guān)注持久層的代碼、數(shù)據(jù)庫的設(shè)計(jì)和數(shù)據(jù)庫的物理環(huán)境。
除了架構(gòu)設(shè)計(jì)和代碼質(zhì)量的優(yōu)劣以外,數(shù)據(jù)庫的監(jiān)控對(duì)于確保數(shù)據(jù)庫的最佳性能和健康至關(guān)重要。以下是讓必須重視數(shù)據(jù)庫的幾個(gè)原因:
- 有助于性能優(yōu)化:數(shù)據(jù)庫監(jiān)控有助于識(shí)別性能瓶頸。通過監(jiān)控關(guān)鍵指標(biāo),管理員和開發(fā)人員可以優(yōu)化查詢語句,找出效率低下的原因,并提高數(shù)據(jù)庫的整體性能。
- 有助于問題檢測(cè)和診斷:實(shí)時(shí)監(jiān)控能夠?yàn)楫惓!㈠e(cuò)誤或潛在問題提供警報(bào)和通知,使管理員能夠采取主動(dòng)措施并在影響數(shù)據(jù)庫功能之前解決問題。
- 有助于規(guī)劃存儲(chǔ)容量:數(shù)據(jù)庫監(jiān)控通過提供對(duì)資源利用率(如:CPU、內(nèi)存和存儲(chǔ))的深入了解來幫助DBA進(jìn)行容量規(guī)劃、分析趨勢(shì)、預(yù)測(cè)未來需求,并就可擴(kuò)展性和基礎(chǔ)架構(gòu)改進(jìn)要求做出決策。
- 有助于數(shù)據(jù)安全合規(guī):監(jiān)控有助于確保數(shù)據(jù)庫的安全性和合規(guī)性。通過跟蹤監(jiān)控?cái)?shù)據(jù)庫訪問、檢測(cè)未經(jīng)授權(quán)的活動(dòng)、審計(jì)數(shù)據(jù)庫操作。有助于保持?jǐn)?shù)據(jù)完整性并滿足安全、法規(guī)要求。
俗話說“無監(jiān)控、不運(yùn)維”,尤其是現(xiàn)代DevOps團(tuán)隊(duì)的工作,更需要用監(jiān)控工具來武裝自己,避免成為“瞎子”,也能確保系統(tǒng)穩(wěn)定高效運(yùn)行。數(shù)據(jù)庫的監(jiān)控更是重中之重。
本文收集了一些適合用于MySQL、Postgres、Oracle或MSSQL等數(shù)據(jù)庫的開源免費(fèi)數(shù)據(jù)庫監(jiān)控工具,供參考。
1.NETdata
Github(65.9K):https://github.com/netdata/netdata
Netdata是一個(gè)開源的數(shù)據(jù)庫、系統(tǒng)、容器和應(yīng)用程序監(jiān)控項(xiàng)目,能夠收集指標(biāo),并將信息美觀地呈現(xiàn)在儀表盤中。它可以運(yùn)行在物理機(jī)、虛擬服務(wù)器、云平臺(tái)、Kubernetes集群或者邊緣設(shè)備上。它支持多種數(shù)據(jù)庫引擎、虛擬機(jī)、應(yīng)用程序指標(biāo)。
2.Prometheus
GitHub(50.6K):https://github.com/prometheus/prometheus
Prometheus能夠按時(shí)間序列捕獲數(shù)據(jù)。可以使用Prometheus捕獲MySQL的查詢性能的指標(biāo)和有關(guān)MySQL的統(tǒng)計(jì)數(shù)據(jù)。
使用Prometheus監(jiān)控MySql,需要安裝一個(gè)MySQL exporter,用于從MySQL實(shí)例中收集指標(biāo),并匯聚到Prometheus服務(wù)器。
Prometheus只提供了一個(gè)非常基本的可視化層。因此,它通常需要與Grafana一起使用,Grafana是一種用于創(chuàng)建圖表和指標(biāo)的可視化工具。
3.signoz
GitHub(15.2K):https://github.com/signoz/signoz
SignNoz是一個(gè)開源的APM工具,可以用于監(jiān)控MySQL數(shù)據(jù)庫。可以監(jiān)控整個(gè)軟件系統(tǒng),跟蹤應(yīng)用程序指標(biāo)以及基礎(chǔ)架構(gòu)指標(biāo)。SignNoz特別適合監(jiān)控基于微服務(wù)和無服務(wù)器架構(gòu)的現(xiàn)代云原生應(yīng)用程序。
在分布式系統(tǒng)上,使用多個(gè)數(shù)據(jù)庫實(shí)例為不同微服務(wù)提供數(shù)據(jù)層支撐。作為一個(gè)監(jiān)控所有服務(wù)的APM工具,SignNoz可以監(jiān)控來自每個(gè)服務(wù)的數(shù)據(jù)庫調(diào)用的性能。SigNoz提供了一個(gè)指標(biāo)構(gòu)建器,可以使用它來創(chuàng)建自定義的儀表盤,用于監(jiān)控MySQL數(shù)據(jù)庫。監(jiān)控MySQL數(shù)據(jù)庫的主機(jī)的運(yùn)行狀況和性能。
4.MySQLTuner-perl
GitHub(8.3K):https://github.com/major/MySQLTuner-perl
MySQLTuner是一個(gè)用Perl編寫的腳本庫,支持速查看MySQL安裝過程,并進(jìn)行調(diào)整以提高性能和穩(wěn)定性。檢索當(dāng)前配置變量和狀態(tài)數(shù)據(jù),并以簡(jiǎn)短的格式提供一些基本性能優(yōu)化建議。
5.Anemometer
慢SQL查詢監(jiān)控
GitHub(1.4K):https://github.com/box/Anemometer
Anemometer是一個(gè)用于可視化慢Sql監(jiān)控工具,支持用于MySQL數(shù)據(jù)庫的慢查詢分析。SQL查詢有時(shí)難以捉摸。Anemometer能夠分析數(shù)據(jù)庫的查詢語句,識(shí)別可優(yōu)化的機(jī)會(huì),跟蹤性能趨勢(shì)。
Anemometer依靠Percona Toolkit進(jìn)行高效地收集慢速查詢?nèi)罩尽2⒗胮t-query-digest來解析慢查詢?nèi)罩荆⑺鼈儫o縫地記錄到數(shù)據(jù)庫中,以形成全面的報(bào)告。
使用Anemometer,可以生成跨越各種時(shí)間段的圖形和統(tǒng)計(jì)數(shù)據(jù),支持查看時(shí)間段范圍內(nèi)的查詢過程。此外,它提供了直觀的界面以及實(shí)時(shí)動(dòng)態(tài)信息,可通過點(diǎn)擊或者拖動(dòng)輕松地查看感興趣內(nèi)容。
6.Swiple
GitHub:https://github.com/Swiple/swiple
Swiple是一個(gè)自動(dòng)化數(shù)據(jù)監(jiān)控平臺(tái),可幫助數(shù)據(jù)團(tuán)隊(duì)無縫監(jiān)控?cái)?shù)據(jù)質(zhì)量。通過自動(dòng)化的數(shù)據(jù)分析和分析、調(diào)度和警報(bào),團(tuán)隊(duì)可以在數(shù)據(jù)質(zhì)量問題影響關(guān)鍵任務(wù)資源之前解決這些問題。
發(fā)現(xiàn)問題之后,Swiple可以通過電子郵件、Slack、Microsoft Teams、OpsGenie、PagerDuty等系統(tǒng)通知管理員。
功能特征:
- 評(píng)估SQL查詢、表或視圖的數(shù)據(jù)質(zhì)量。
- 使用自動(dòng)數(shù)據(jù)分析生成數(shù)據(jù)預(yù)期。
- 以任意重復(fù)間隔運(yùn)行驗(yàn)證計(jì)劃。
- 數(shù)據(jù)文檔自動(dòng)化。
- 為數(shù)據(jù)添加SLA。
- 當(dāng)數(shù)據(jù)質(zhì)量發(fā)生變化時(shí),發(fā)送通知。
支持的數(shù)據(jù)庫:
- MySQL
- Athena
- PostgreSQL
- Trino
- Snowflake
- BigQuery
- Redshift
7.DBA Dash、SQL Server監(jiān)控工具
GitHub:https://github.com/trimble-oss/dba-dash
DBA Dash是一款面向SQL Server DBA的工具,可進(jìn)行日常檢查、性能監(jiān)控和變更跟蹤。它提供的功能包括:每日DBA檢查、操作系統(tǒng)性能監(jiān)控、自定義指標(biāo)性能監(jiān)控、跟蹤配置、代理作業(yè)監(jiān)控,還可通過S3存儲(chǔ)桶監(jiān)控隔離環(huán)境中的實(shí)例。
8.Dolphie
MySQL監(jiān)控工具
GitHub:https://github.com/charles-001/dolphie
Dolphie是一個(gè)強(qiáng)大的終端應(yīng)用程序,能夠?qū)崟r(shí)監(jiān)控MySQL數(shù)據(jù)庫。提供直觀的用戶界面和豐富的功能,能夠毫不費(fèi)力地跟蹤、分析MySQL數(shù)據(jù)庫的性能。不論是監(jiān)控查詢執(zhí)行、分析服務(wù)器指標(biāo)還是識(shí)別潛在的瓶頸,對(duì)它來說都不在話下。通過Dolphie提供的全面監(jiān)控功能,可隨時(shí)了解MySQL環(huán)境。
9.pgDoctor
GitHub:https://github.com/thumbtack/pgdoctor
pgDoctor是一個(gè)免費(fèi)的開源的輕量級(jí)Web服務(wù),用于對(duì)PostgreSQL實(shí)例執(zhí)行運(yùn)行狀況檢查。
10.pg_Insights
GitHub:
https://github.com/lob/pg_insights
pg_insights是一個(gè)方便的SQL工具,用于監(jiān)視Postgres數(shù)據(jù)庫的健康狀況。這個(gè)倉庫的靈感來自Heroku的pg_extras倉庫。它提供了一個(gè)SQL查詢集合,用于監(jiān)視Postgres數(shù)據(jù)庫的健康狀況。
11.Blip MySQL Monitor
GitHub:https://github.com/cashApp/blip
Blip是一個(gè)強(qiáng)大的MySQL監(jiān)控器,可以無縫地收集MySQL的基本指標(biāo),并準(zhǔn)確地報(bào)告給其他監(jiān)控平臺(tái)(如:Datadog)。它完全兼容MySQL 5.7和8.0的所有發(fā)行版。其靈活的插件架構(gòu)允許與任何監(jiān)控平臺(tái)輕松集成,如:Datadog、Splunk和Chronosphere等流行平臺(tái)。
12.Soda Core
GitHub:https://github.com/sodadata/soda-core
Soda Core是一個(gè)開源Python/ target=_blank class=infotextkey>Python庫,主要用于SQL、Spark和Pandas中的數(shù)據(jù)質(zhì)量檢測(cè)。它允許在工作流中進(jìn)行數(shù)據(jù)質(zhì)量測(cè)試,并執(zhí)行檢查以識(shí)別無效或異常數(shù)據(jù)。
13.oracle-db-appdev-monitoring
GitHub:https://github.com/oracle/oracle-db-appdev-monitoring
oracle-db-appdev-monitoring項(xiàng)目用于監(jiān)控Oracle數(shù)據(jù)庫指標(biāo)和問題診斷,支持與Spring Boot等框架集成。該項(xiàng)目支持云平臺(tái)和本地?cái)?shù)據(jù)庫,也包括Kubernetes和容器中的數(shù)據(jù)庫。
14.pg-Index-Health-SQL
GitHub:https://github.com/mfvanek/pg-index-health-sql
pg-index-health-sql是一個(gè)SQL集合,用于分析和維護(hù)PostgreSQL數(shù)據(jù)庫中索引和表的健康狀況。它可以幫助檢測(cè)各種問題,如:無效、重復(fù)、未使用的索引、沒有關(guān)聯(lián)索引的外鍵、具有空值的索引、缺少索引、沒有主鍵的表、索引和表膨脹、沒有描述的表和列、JSON類型的列、以及序列類型的非主鍵列等。