<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      用 Go 打造一個服務器資源指標采集器:結合 Prometheus Exporter 實戰

      在生產環境中,運維和開發同學都離不開 系統資源監控

      • 什么時候 CPU 快跑滿了?
      • 內存是不是泄漏了?
      • 磁盤剩余空間還能撐多久?

      要做到這一點,最常見的方案是:
      ?? 采集系統資源指標 → 暴露給 Prometheus → 在 Grafana 里可視化

      今天我們就用 Go + go-commons/systemutils 來做一個 輕量級的 Prometheus Exporter

      在這里插入圖片描述

      @


      一、為什么選擇 Prometheus Exporter?

      Prometheus 本身是一個 拉取型監控系統,它會定期訪問 Exporter(通常是 HTTP 服務),獲取指標數據。

      常見的 Exporter 有:

      • node_exporter(系統級指標)
      • mysqld_exporter(數據庫指標)
      • 自研業務指標 Exporter

      而我們今天要寫的,就是一個 自研的系統資源 Exporter,用 Go 來采集 CPU、內存、磁盤指標,并提供給 Prometheus。


      二、環境準備

      • Go 1.20+
      • Prometheus 已安裝(可選)
      • Grafana 已安裝(可選)

      依賴庫:

      go get github.com/prometheus/client_golang/prometheus
      go get github.com/prometheus/client_golang/prometheus/promhttp
      go get github.com/Rodert/go-commons
      

      三、代碼實現

      創建 main.go

      package main
      
      import (
      	"fmt"
      	"net/http"
      
      	"github.com/prometheus/client_golang/prometheus"
      	"github.com/prometheus/client_golang/prometheus/promhttp"
      
      	"github.com/Rodert/go-commons/systemutils/diskutils"
      )
      
      // 定義指標
      var (
      	diskTotal = prometheus.NewGauge(prometheus.GaugeOpts{
      		Name: "server_disk_total_bytes",
      		Help: "Total disk size in bytes",
      	})
      	diskUsed = prometheus.NewGauge(prometheus.GaugeOpts{
      		Name: "server_disk_used_bytes",
      		Help: "Used disk size in bytes",
      	})
      	diskFree = prometheus.NewGauge(prometheus.GaugeOpts{
      		Name: "server_disk_free_bytes",
      		Help: "Free disk size in bytes",
      	})
      )
      
      func recordMetrics() {
      	go func() {
      		for {
      			// 獲取根目錄的磁盤信息
      			info, err := diskutils.GetDiskInfo("/")
      			if err != nil {
      				fmt.Println("采集磁盤信息失敗:", err)
      				continue
      			}
      
      			// 設置指標
      			diskTotal.Set(float64(info.Total))
      			diskUsed.Set(float64(info.Used))
      			diskFree.Set(float64(info.Free))
      
      			// 每 10 秒采集一次
      			<-time.After(10 * time.Second)
      		}
      	}()
      }
      
      func main() {
      	// 注冊指標
      	prometheus.MustRegister(diskTotal, diskUsed, diskFree)
      
      	// 啟動采集
      	recordMetrics()
      
      	// 暴露 HTTP 接口給 Prometheus
      	http.Handle("/metrics", promhttp.Handler())
      	fmt.Println("Exporter 已啟動,監聽 :8080/metrics")
      	http.ListenAndServe(":8080", nil)
      }
      

      四、運行效果

      運行:

      go run main.go
      

      訪問:

      http://localhost:8080/metrics
      

      你會看到類似輸出:

      # HELP server_disk_free_bytes Free disk size in bytes
      # TYPE server_disk_free_bytes gauge
      server_disk_free_bytes 5.9e+10
      
      # HELP server_disk_total_bytes Total disk size in bytes
      # TYPE server_disk_total_bytes gauge
      server_disk_total_bytes 1.0e+11
      
      # HELP server_disk_used_bytes Used disk size in bytes
      # TYPE server_disk_used_bytes gauge
      server_disk_used_bytes 4.1e+10
      

      Prometheus 就能定期拉取這些數據。


      五、Prometheus 配置

      prometheus.yml 里增加一個 job:

      scrape_configs:
        - job_name: 'go_commons_exporter'
          static_configs:
            - targets: ['localhost:8080']
      

      重啟 Prometheus,訪問 http://localhost:9090,就能在控制臺查詢這些指標。


      六、Grafana 可視化(可選)

      在 Grafana 里添加 Prometheus 數據源,然后新建 Dashboard,輸入查詢:

      • 磁盤已用空間(GB):
      server_disk_used_bytes / 1024 / 1024 / 1024
      
      • 磁盤使用率:
      (server_disk_used_bytes / server_disk_total_bytes) * 100
      

      就能得到一個漂亮的磁盤使用趨勢圖。


      七、擴展思路

      1. 采集更多指標

        • CPU 使用率:cpuutils.GetCPUUsage()
        • 內存占用:memutils.GetMemInfo()
        • 網絡流量:后續擴展
      2. 多節點部署
        把這個 Exporter 部署到多臺機器,Prometheus 統一拉取。

      3. 告警配置
        比如磁盤剩余 < 10%,通過 Alertmanager 發通知到釘釘/Slack。


      八、總結

      本文我們用 Go 寫了一個 輕量級服務器資源 Exporter,結合 Prometheus 和 Grafana,就能快速搭建一套可視化監控:

      • go-commons 負責封裝系統指標采集邏輯
      • Prometheus 負責拉取和存儲指標
      • Grafana 負責展示和報警

      一句話總結:
      ?? 只需幾十行 Go 代碼,你就能擁有自己的系統監控 Exporter。

      posted @ 2025-09-13 19:53  JavaPub  閱讀(15)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲蜜臀av乱码久久| 国产色婷婷亚洲99精品小说| 国产在线国偷精品免费看| 成人性生交片无码免费看| 人妻av无码系列一区二区三区| 国产精品国产三级在线专区| 国产精品一二区在线观看| 久久综合亚洲色一区二区三区| 亚洲一区久久蜜臀av| 成人福利一区二区视频在线| 丰满无码人妻热妇无码区| 天天干天天日| 里番全彩爆乳女教师| 国产成人午夜福利在线播放| 日韩AV高清在线看片| 成人3d动漫一区二区三区| 精品国产一区二区三区av色诱 | 日本精品一区二区不卡| 波多野结衣乳喷高潮视频| 香蕉亚洲欧洲在线一区| 中文字幕久久波多野结衣av| 国产农村老太xxxxhdxx| 日本一区二区不卡精品| 一区二区不卡99精品日韩| 亚洲va久久久噜噜噜久久狠狠 | 日韩精品区一区二区三vr| 国产精品高清一区二区三区| 国产在线精品一区二区夜色| 贵定县| 中文字幕日韩精品有码| 久久综合老鸭窝色综合久久| 日本亚洲一区二区精品久久| www亚洲精品| 网友偷拍视频一区二区三区| 乱女乱妇熟女熟妇综合网| 日本韩国一区二区精品| 中文字幕网红自拍偷拍视频| 在线免费不卡视频| 大宁县| 天天干天天日| 国产精品无码a∨麻豆|