Apache SkyWalking 監控 MySQL Server 實戰解析
目錄
- 正文
- 監控 MySQL Server
- 安裝過程
- docker compose 部署
正文
Apache SkyWalking 在本月初發布了 SkyWalking Backend、UI 的 9.2.0 版本 以及 SkyWalking Java Agent 8.12.0 版本,其中就有筆者貢獻的 hutool-http client 5.x 插件,以后大家通過 hutool 工具發送的 http 請求也可以出現在分布式鏈路中了。
另外,社區宣布計劃在 2022 年 11 月 30 日結束所有 v8 版本,v9 可以在生產環境中提供穩定和更高性能的 APM,具體聲明見 SkyWalking 官網。
了解 SkyWalking 的朋友都知道,它可以監控我們的應用程序中執行的 SQL語句,監控到的 SQL 大概像下圖這樣,看起來是不是很酷!
監控 MySQL Server
上面展示的是在 MySQL 客戶端層面的監控,那如果想要監控 MySQL Server 該怎么做呢,SkyWalking 發布的 9.2.0 版本升級了許多內容,其中一項就是開始支持 MySQL Server Monitoring。
SkyWalking 是如何監控 MySQL Server 程序的呢,SkyWalking 社區并沒有重復造輪子,而是利用了已有的開源實現來采集 MySQL Server 的 metrics 數據,并將 metrics 發送到 SkyWalking OAP,由 MAL 引擎去分析、計算、聚合和存儲,具體流程如下:
1)mysqld_exporter 從 MySQL Server 收集 metrics 數據;
2)OpenTelemetry Collector 通過 Prometheus Receiver 從 mysqld_exporter 抓取 metrics 數據;
3)OpenTelemetry Collector 通過 OpenCensus gRPC Exporter 或 OpenTelemetry gRPC exporter 將 metrics 數據 發送給 SkyWalking OAP Server;
4)SkyWalking OAP Server 使用 MAL引擎解析表達式,并對 metrics 數據進行過濾、計算、聚合并存儲結果。
其中,mysqld_exporter 是 Prometheus 提供的用于收集 MySQL Server 的metrics 數據,OpenTelemetry Collector 是 OpenTelemetry 提供的用于收集 telemetry 數據,它提供了與廠商無關的實現,用于接收、處理與導出 telemetry 數據。
安裝過程
這里假設我們已經部署了 MySQL Server 以及 SkyWalking,現在想要在 SkyWalking 中監控 MySQL Server,我們這里準備一臺機器(192.168.56.102),這臺機器筆者已經提前安裝好了 Docker,接下來我們就在這臺機器上安裝 mysqld_exporter 和 OpenTelemetry Collector 。
首先我們需要創建一個 MySQL 用戶并授權,用于 mysqld_exporter 收集 metrics 使用,操作如下:
create user "mysql_exporter"@"%" identified by "mysql_exporter";GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO "mysql_exporter"@"%" WITH MAX_USER_CONNECTIONS 3;flush privileges;
準備 OpenTelemetry Collector 組件的配置文件 otel-collector-config.yaml
receivers: prometheus: config: scrape_configs: - job_name: "mysql-monitoring" scrape_interval: 5s static_configs: - targets: ["mysqld-exporter:9104"] labels: host_name: showcaseprocessors: batch:exporters: otlp: endpoint: SkyWalking OAP 地址:11800 tls: insecure: trueservice: pipelines: metrics: receivers: - prometheus processors: - batch exporters: - otlp
對以上配置做個簡要說明:
1)receivers 用于配置 Collector 的數據來源,這里是從 prometheus 的 mysqld_exporter 抓取數據;
2)exporters 用于配置要將接收到的數據發送到哪里,這里是發送到 SkyWalking OAP ;
3)processors 指定如何處理接收到的數據;
4)service 配置將整個 pipelines 串起來。
docker compose 部署
我們這里使用 docker compose 部署,docker-compose.yml 完整配置如下:
version: "3.8"services: mysqld-exporter: image: prom/mysqld-exporter:v0.14.0 container_name: mysqld-exporter ports: - 9104:9104 environment: - DATA_SOURCE_NAME=mysql_exporter:mysql_exporter@(mysql地址:3306)/ - TZ=Asia/Shanghai otel-collector: image: otel/opentelemetry-collector:0.50.0 container_name: otel-collector command: [ "--config=/etc/otel-collector-config.yaml" ] volumes: - /opt/data/otel-collector-config.yaml:/etc/otel-collector-config.yaml expose: - 55678
將 docker-compose.yml 和otel-collector-config.yaml 配置文件上傳到服務器并放到 /data/opt/ 目錄下,執行 docker compose up -d 即可啟動 mysqld-exporter 和 otel-collector 服務。
啟動完成之后,我們可以通過訪問 mysqld-exporter 服務http://192.168.56.102:9104/metrics 查看 mysqld-exporter 采集了 MySQL 的哪些 metrics 數據,比如下圖中的 mysql_global_status_uptime 指標表示 MySQL Server 啟動了多長時間,單位是秒。
mysqld-exporter 和 otel-collector 服務能正常采集數據之后,我們可以訪問 SkyWalking UI,可以查看到 MySQL Sever 端的監控信息了。
圖中每一項指標的具體含義大家可以訪問官網查看,這里就不一一贅述了 skywalking.apache.org/docs/main/v…
剛剛演示的 SkyWalking 中 MySQL Server 的監控功能是一名大三學生貢獻的!,具體貢獻過程可以看下issue 鏈接 github.com/apache/skyw… 。之前看到過一句話,對技術有追求的開發者都應該去參與開源項目。
相關鏈接
- github.com/prometheus/…
- opentelemetry.io/docs/concep…
- skywalking.apache.org/docs/main/v…
以上就是Apache SkyWalking 監控 MySQL Server 實戰解析的詳細內容,更多關于Apache SkyWalking監控MySQL的資料請關注其它相關文章!
