开源酷炫的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
相关推荐
冬奇Lab1 小时前
每日一个开源项目(第116篇):FreeDomain - 让每个人都拥有属于自己的数字身份
开源
运维栈记2 小时前
API Error: 400 Request body format invalid
linux·ai
志栋智能2 小时前
小步快跑:从单一场景开启超自动化巡检之旅
运维·网络·人工智能·自动化
lauo2 小时前
从FunloomAI到ibbot:当你的手机不再是“手机”,而是你的AI副脑和生产节点
人工智能·智能手机·架构·开源·github
AugustRed2 小时前
Linux 运维常用命令大全(超全速查表)
运维·网络·php
小白兔奶糖ovo2 小时前
【Leetcode】231. 2的幂
linux·算法·leetcode
Plastic garden2 小时前
Docker(1)
运维·docker·容器
s_w.h2 小时前
【 linux 】动静态库的制作
linux·运维·服务器·算法·bash
songjxin3 小时前
Nginx 日志分析可视化面板
运维·nginx
专注VB编程开发20年3 小时前
安卓APP与服务器通讯技术,文件传输和文字消息收发
运维·服务器