开源酷炫的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
相关推荐
齐齐大魔王6 小时前
linux-僵死进程处理
linux·运维·服务器
wuminyu9 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
万粉变现经纪人9 小时前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
.小小陈.9 小时前
Linux 线程概念与控制:从底层原理到实战应用
linux·运维·jvm
网络工程小王9 小时前
【LangChain 大模型6大调用指南】调用大模型篇
linux·运维·服务器·人工智能·学习
wangbing11259 小时前
各linux版本的包管理命令
linux·运维·服务器
Joseph Cooper10 小时前
Linux/Android 跟踪技术:ftrace、TRACE_EVENT、atrace、systrace 与 perfetto 入门
android·linux·运维
挖AI金矿10 小时前
(十五)MCP协议与插件生态 — 扩展无限可能
开源·个人开发·ai编程·hermes agent·爱马仕agent
比昨天多敲两行11 小时前
Linux基础开发工具(下)
linux·运维·服务器
feng145612 小时前
OpenSREClaw - 故障复盘和变更评审双 Agent 案例
运维·人工智能