开源酷炫的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
相关推荐
苍狗T14 小时前
LVS相关知识总结
linux·运维·服务器·lvs
haishikeji696_14 小时前
多部门协同无人机管理系统架构设计|飞控管理平台、无人机巡检平台标准化开发方案
开源·无人机·低空经济·无人机管理系统·无人机飞控平台·一网统飞
lightqjx14 小时前
【Linux系统】基础 IO
linux·c语言·重定向·缓冲区·文件io·文件的系统调用
我星期八休息14 小时前
扩展— TCP 全连接队列与 tcpdump 抓包
linux·服务器·开发语言·前端·网络·tcp/ip·tcpdump
各类产品分享14 小时前
什么是AR智慧运维系统,主要能解决什么问题
运维·ar·ar智慧运维解决方案
RisunJan15 小时前
Linux命令-skill(发送信号给进程)
linux·运维·服务器
潘正翔15 小时前
k8s基础_kubeadm搭建k8s集群
linux·运维·docker·云原生·容器·kubernetes
Echo flower15 小时前
Docker 容器中 Puppeteer 僵尸进程排查与修复
运维·docker·容器·puppeteer
骊城英雄15 小时前
彩笔运维勇闯机器学习--逻辑回归
运维·机器学习·逻辑回归
孪生质数-15 小时前
AI 应用实践篇——让大模型真正开始工作
linux·运维·服务器·人工智能·深度学习·语言模型·llama