還在用命令列監控伺服器?試試這款監控工具吧,直觀又易用!

macrozheng發表於2024-12-10
我們在檢視伺服器執行狀態時,除了使用命令列還是命令列。那麼有什麼辦法可以不用命令列,直觀地檢視伺服器的CPU、記憶體、網路、容器執行狀態等資訊呢?今天給大家分享一款好用的伺服器監控工具Sampler,使用它能快速方便地檢視這些資訊,希望對大家有所幫助!

Sampler簡介

Sampler是一款基於shell命令的視覺化監控工具,透過簡單的YAML檔案來進行配置即可實現監控,目前在Github上已有12k+Star

下面是使用Sampler來進行伺服器狀態監控的效果圖,看起來還是挺炫酷的!

安裝

  • Sampler的安裝非常簡單,這裡以Linux系統為例,使用如下命令下載Sampler的安裝包;
# 下載sampler的安裝包儲存到/usr/local/bin目錄下
sudo wget https://github.com/sqshq/sampler/releases/download/v1.1.0/sampler-1.1.0-linux-amd64 -O /usr/local/bin/sampler
# 給安裝包新增執行許可權
sudo chmod +x /usr/local/bin/sampler
  • 安裝完成後在/usr/local/bin目錄下,就有一個可執行的sampler檔案了。

這或許是一個對你有用的開源專案,mall專案是一套基於SpringBoot3 + Vue 的電商系統(Github標星60K),後端支援多模組和2024最新微服務架構,採用Docker和K8S部署。包括前臺商城專案和後臺管理系統,能支援完整的訂單流程!涵蓋商品、訂單、購物車、許可權、優惠券、會員、支付等功能!

  • Boot專案:https://github.com/macrozheng/mall
  • Cloud專案:https://github.com/macrozheng/mall-swarm
  • 教程網站:https://www.macrozheng.com

專案演示:

使用

  • Sampler的使用非常簡單,只要在yaml檔案中配置好監控指令碼,然後使用如下命令執行即可;
# 配置檔案需要新增可執行許可權
chmod +x config.yml
# 然後透過配置檔案啟動Sampler
sampler -c config.yml
  • 如果你想檢視伺服器CPU和可用記憶體情況,可以在config.yml檔案中新增如下指令碼,然後使用上面的命令來執行;
sparklines:
  - title: CPU usage(%)
    rate-ms: 200
    scale: 0
    sample: ps -A -o %cpu | awk '{s+=$1} END {print s}'
  - title: RAM free(MB)
    rate-ms: 200
    scale: 0
    sample: free -m| grep "Mem:" | awk '{print $4}'
  • 執行命令後,顯示效果如下:

  • 如果你想檢視伺服器上Docker容器的執行狀態,可以新增如下指令碼;
textboxes:
  - title: Docker containers stats
    rate-ms: 500
    sample: docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}"
  • 執行命令後,顯示效果如下:

  • 如果你想檢視伺服器的網路狀態,例如UDP和TCP的收發情況,可以新增如下指令碼;
barcharts:
  - title: Local network activity
    rate-ms: 500
    scale: 0
    items:
      - label: UDP bytes in
        sample: netstat -anu | awk '{sum += $2} END {print sum}'
      - label: UDP bytes out
        sample: netstat -anu | awk '{sum += $3} END {print sum}'
      - label: TCP bytes in
        sample: netstat -ant | awk '{sum += $2} END {print sum}'
      - label: TCP bytes out
        sample: netstat -ant | awk '{sum += $3} END {print sum}'
  • 執行命令後,顯示效果如下:

  • 如果你想檢視伺服器的時間,可以新增如下指令碼;
asciiboxes:
  - title: CST time
    rate-ms: 500
    font: 2d
    border: false   
    color: 43
    sample: env TZ=Asia/Shanghai date +%r
  • 執行命令後,顯示效果如下:

  • 我們再把上面這些監控資訊組合起來,製作一個皮膚來看下效果,還是挺炫酷的;

  • 這裡使用的指令碼如下,感興趣的小夥伴可以嘗試下!
runcharts:
  - title: Search engine response time
    position: [[0, 0], [45, 19]]
    rate-ms: 500
    triggers:
      - title: Latency threshold exceeded
        condition: echo "$prev < 0.8 && $cur > 0.8" |bc -l
        actions:
            terminal-bell: true
            sound: true
            visual: true
            script: 'say alert: ${label} latency exceeded ${cur} second'
    legend:
        enabled: true
        details: false
    scale: 2
    items:
      - label: BAIDU
        color: 178
        sample: curl -o /dev/null -s -w '%{time_total}'  https://www.baidu.com
      - label: BING
        sample: curl -o /dev/null -s -w '%{time_total}'  https://www.bing.com
barcharts:
  - title: Local network activity
    position: [[45, 20], [35, 8]]
    rate-ms: 500
    scale: 0
    items:
      - label: UDP bytes in
        sample: netstat -anu | awk '{sum += $2} END {print sum}'
      - label: UDP bytes out
        sample: netstat -anu | awk '{sum += $3} END {print sum}'
      - label: TCP bytes in
        sample: netstat -ant | awk '{sum += $2} END {print sum}'
      - label: TCP bytes out
        sample: netstat -ant | awk '{sum += $3} END {print sum}'
gauges:
  - title: YEAR PROGRESS
    position: [[45, 0], [35, 2]]
    cur:
        sample: date +%j
    max:
        sample: echo 365
    min:
        sample: echo 0
  - title: DAY PROGRESS
    position: [[45, 3], [35, 2]]
    cur:
        sample: date +%H
    max:
        sample: echo 24
    min:
        sample: echo 0
  - title: HOUR PROGRESS
    position: [[45, 6], [35, 2]]
    cur:
        sample: date +%M
    max:
        sample: echo 60
    min:
        sample: echo 0
  - title: MINUTE PROGRESS
    position: [[45, 9], [35, 2]]
    triggers:
      - title: CLOCK BELL EVERY MINUTE
        condition: '[ $label == "cur" ] && [ $cur -eq 0 ] && echo 1 || echo 0'
        actions:
            sound: true
            script: say -v samantha `date +%I:%M%p`
    cur:
        sample: date +%S
    max:
        sample: echo 60
    min:
        sample: echo 0
sparklines:
  - title: CPU usage
    position: [[0, 20], [22, 8]]
    rate-ms: 200
    scale: 0
    sample: ps -A -o %cpu | awk '{s+=$1} END {print s}'
  - title: RAM free(MB)
    position: [[22, 20], [23, 8]]
    rate-ms: 200
    scale: 0
    sample: free -m | grep "Mem:" | awk '{print $4}'
textboxes:
  - title: Docker containers stats
    position: [[0, 29], [45, 10]]
    rate-ms: 500
    sample: docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}"
  - title: Local weather
    position: [[69, 31], [13, 7]]
    rate-ms: 10000
    sample: curl wttr.in?0ATQF
    border: false
  - title: New York weather
    position: [[45, 31], [13, 7]]
    rate-ms: 10000
    sample: curl wttr.in/newyork?0ATQF
    transform: echo 1
    border: false
  - title: San Francisco weather
    position: [[56, 31], [13, 7]]
    rate-ms: 10000
    sample: curl wttr.in/sanfrancisco?0ATQF
    border: false
asciiboxes:
  - title: CST time
    position: [[45, 12], [35, 7]]
    rate-ms: 500
    sample: env TZ=Asia/Shanghai date +%r
    border: false
    font: 2d

總結

今天給大家介紹了一款直觀易用的伺服器監控工具Sampler,使用它來檢視伺服器執行狀態真的是一目瞭然。其實Sampler的功能不止於此,它還能用於監控MySQL、MongoDB、Kafka這類中介軟體的資訊,該興趣的小夥伴可以嘗試下!

專案地址

https://github.com/sqshq/sampler

相關文章