开源酷炫的Linux监控工具:sampler

sampler是一个开源的监控工具,来自GitHub用户sqshq(Alexander Lukyanchikov)的匠心之作。

简单来说,sampler能干这些事儿:

  • 实时监控:CPU、内存、磁盘、网络,甚至应用程序的状态,它都能盯着。
  • 可视化展示:支持多种组件,比如折线图、条形图、仪表盘,界面清爽又好看。
  • 警报提醒:当数据达到某个条件时,可以响铃、弹窗,甚至跑个脚本提醒你。
  • 高度自定义:通过YAML配置文件,想怎么玩就怎么玩。

比如,你可以用它监控CPU使用率、观察数据库的QPS,甚至盯着消息队列的消息堆积情况。

macOS安装

bash 复制代码
# 使用 HomeBrew 安装
brew install sampler

# 或直接下载安装
sudo curl -Lo /usr/local/bin/sampler https://github.com/sqshq/sampler/releases/download/v1.1.0/sampler-1.1.0-darwin-amd64
sudo chmod +x /usr/local/bin/sampler

Linux安装

bash 复制代码
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

Windows安装

bash 复制代码
# 通过 Chocolatey 安装
choco install sampler

Docker安装

bash 复制代码
# Create a configuration file
vim config.yml

# Build the container image
docker build --tag sampler .

# Run a container
docker run --interactive --tty --volume $(pwd)/config.yml:/root/config.yml sampler --config /root/config.yml

基本用法

1.创建 YAML 配置文件:定义你的监控命令。

2.运行命令:

复制代码
sampler -c config.yml

3.动态调整界面,实时查看你的监控指标。

配置文件内容参考

bash 复制代码
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: tencent
        color: 178
        sample: curl -o /dev/null -s -w '%{time_total}'  https://www.tencent.com
      - label: Bilibili
        sample: curl -o /dev/null -s -w '%{time_total}'  https://www.bilibili.com
      - label: Juejin
        sample: curl -o /dev/null -s -w '%{time_total}'  https://juejin.cn
barcharts:
  - title: Local network activity
    position: [[45, 20], [35, 8]]
    rate-ms: 500
    scale: 0
    items:
      - label: UDP bytes in
        sample: nstat -z | grep UdpInDatagrams | awk '{print $2}'
      - label: UDP bytes out
        sample: nstat -z | grep UdpOutDatagrams | awk '{print $2}'
      - label: TCP bytes in
        sample: nstat -z | grep TcpInSegs | awk '{print $2}'
      - label: TCP bytes out
        sample: nstat -z | grep TcpOutSegs | awk '{print $2}'
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: Free memory pages
    position: [[22, 20], [23, 8]]
    rate-ms: 200
    scale: 0
    sample: memory_pressure | grep 'Pages free' | awk '{print $3}'
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: UTC time
    position: [[45, 12], [35, 7]]
    rate-ms: 500
    sample: env TZ=UTC date +%r
    border: false
    font: 3d
相关推荐
zym大哥大4 小时前
网络层IP协议
linux·服务器·网络
长天一色4 小时前
Docker 镜像调试最佳实践
运维·docker·容器
五花肉村长4 小时前
Linux-读者写著问题和读写锁
linux·运维·服务器·开发语言·数据库·visualstudio
凯雀安全4 小时前
在kali中搞个jdk1.8.,又不破坏环境
linux·运维·服务器
christine-rr4 小时前
【25软考网工】第七章(4)DHCP、DNS
运维·服务器·网络·软考
2302_799525745 小时前
【Linux】第二十一章 管理存储堆栈
linux·运维
Strugglingler5 小时前
编译器ar命令参数
linux·ar·gcc
zhang187021121635 小时前
变电站综合自动化系统
运维·自动化
卡戎-caryon5 小时前
【MySQL】07.表内容的操作
linux·网络·数据库·mysql·存储引擎
GUIQU.6 小时前
【Node.js】部署与运维
运维·node.js