Sampler:通过YAML轻松实现终端监控可视化的开源神器

242 阅读3分钟

Sampler:通过YAML轻松实现终端监控可视化的开源神器


一、核心功能:当命令行遇见可视化

作为运维工程师,我们经常需要在终端执行各种监控命令。传统方式下,我们需要手动解析topvmstat等命令的输出,而Sampler通过YAML配置文件将这些枯燥的文本转换为动态可视化图表,包括[1][4]:

  • 实时折线图:展示CPU、内存等指标变化趋势
  • 仪表盘:直观显示磁盘使用率等阈值类数据
  • 进度条:呈现任务完成度或资源占用比例
  • 文本面板:显示日志关键信息或脚本输出

特别亮点是支持智能告警功能,当指标超过阈值时可触发声音提醒、颜色高亮或执行自定义脚本(如发送邮件/Slack通知)[1][3]。

示例:监控CPU使用率并设置80%告警阈值

runcharts:
  - title: CPU Usage
    command: "top -bn1 | grep '%Cpu' | awk '{print 100 - $8}'"
    interval: 1s
    visualizer: line
    triggers:
      - condition: "$cur > 80"
        actions:
          sound: true
          script: "echo 'CPU overload!' | mail -s Alert admin@example.com"

二、极简安装:各平台一键部署

Sampler是Go语言开发的单文件二进制工具,支持主流操作系统[1][2][3]:

Linux/macOS

# 下载二进制文件
wget https://github.com/sqshq/sampler/releases/download/v1.1.0/sampler-1.1.0-linux-amd64 -O /usr/local/bin/sampler
chmod +x /usr/local/bin/sampler

# 音频告警依赖(可选)
apt install libasound2-dev  # Debian/Ubuntu

Windows

choco install sampler  # 通过Chocolatey安装

Docker方式

docker run -v $(pwd)/config.yml:/config.yml sqshq/sampler -c /config.yml

三、配置实战:YAML文件详解

配置文件分为三大模块[2][3]:

1. 数据采集配置

variables:
  PG_CONN: "psql -U user dbname"  # 定义复用变量

commands:
  - name: "CPU Load"
    command: "awk '{print $1}' /proc/loadavg"  # 采集命令
    interval: 5s  # 采样频率

2. 可视化组件定义

支持7种组件类型[3]:

sparklines:  # 迷你趋势图
  - title: Memory Usage
    command: "free | grep Mem | awk '{print $3/$2*100}'"
    color: 34

gauges:  # 仪表盘
  - title: Disk Usage
    command: "df / | awk 'NR==2{print $5}' | tr -d '%'"
    max: 100
    min: 0

3. 告警规则

triggers:
  - condition: "$cur > 90"  # 当值>90时触发
    actions:
      sound: true  # 播放告警音
      visual: true  # 界面红色高亮
      script: "echo 'Disk almost full!' > /var/log/alerts.log"

四、典型应用场景

场景1:数据库监控

textboxes:
  - title: MySQL Status
    init: mysql -uroot -p$PWD  # 建立持久连接
    sample: SHOW STATUS LIKE 'Threads_connected'
    interval: 10s

场景2:日志关键词统计

sparklines:
  - title: Error Logs
    command: "grep -c 'ERROR' /var/log/app.log | tail -n 60"
    triggers:
      - condition: "$cur > 10"
        actions:
          sound: true

场景3:远程服务器监控

通过SSH实现无需本地安装[3]:

textboxes:
  - title: Remote Disk
    pty: true  # 启用伪终端模式
    init: ssh user@host
    sample: df -h / | awk 'NR==2{print $5}'

场景4. 高级功能

数据库监控
<YAML>
textboxes:  - title: MySQL查询    pty: true  # 启用伪终端模式    init: mysql -u root -p密码     sample: SELECT COUNT(*) FROM users;[<sup data-citation='{&quot;url&quot;:&quot;http://www.baidu.com/link?url=oqxiEz5x9Jrzl0JDLVClYTVOJeQ671P0ebxhY1ahR-6k_TXjK2I--pLCgu6RF9qogtWF32YCglciQS8dfMJWr_&quot;,&quot;title&quot;:&quot;推荐一款用于执行 shell 命令、可视化和警报的工具&quot;,&quot;content&quot;:&quot;*   https:///sqshq/sampler?tab=readme-ov-file\n\n简介\n--\n\nSampler 是一个用于执行 shell 命令、可视化和警报的工具。使用简单的 YAML 文件进行配置。 ![sampler](https://s2.51cto.com/images/blog/202503/06120752_67c91f98e9f4a50427.gif)\n\n安装\n--\n\n&quot;}'>5</sup>](http://www.baidu.com/link?url=oqxiEz5x9Jrzl0JDLVClYTVOJeQ671P0ebxhY1ahR-6k_TXjK2I--pLCgu6RF9qogtWF32YCglciQS8dfMJWr_)
Kafka延迟监控
<YAML>
runcharts:  - title: Kafka延迟    items:      - label: GroupA        sample: kafka-consumer-groups --group groupA | awk '{sum+=$5}END{print sum}'[<sup data-citation='{&quot;url&quot;:&quot;http://www.baidu.com/link?url=oqxiEz5x9Jrzl0JDLVClYTVOJeQ671P0ebxhY1ahR-6k_TXjK2I--pLCgu6RF9qogtWF32YCglciQS8dfMJWr_&quot;,&quot;title&quot;:&quot;推荐一款用于执行 shell 命令、可视化和警报的工具&quot;,&quot;content&quot;:&quot;*   https:///sqshq/sampler?tab=readme-ov-file\n\n简介\n--\n\nSampler 是一个用于执行 shell 命令、可视化和警报的工具。使用简单的 YAML 文件进行配置。 ![sampler](https://s2.51cto.com/images/blog/202503/06120752_67c91f98e9f4a50427.gif)\n\n安装\n--\n\n&quot;}'>5</sup>](http://www.baidu.com/link?url=oqxiEz5x9Jrzl0JDLVClYTVOJeQ671P0ebxhY1ahR-6k_TXjK2I--pLCgu6RF9qogtWF32YCglciQS8dfMJWr_)

4. 启动命令

<BASH>
sampler -c config.yml  # 默认监听8080端口

五、与主流监控工具对比

特性SamplerPrometheusZabbix
配置复杂度⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️
实时可视化需Grafana需配置
自定义命令支持有限
部署成本单文件需要服务端需要服务端

💡 最佳实践:Sampler适合快速搭建临时监控看板或作为Prometheus的轻量补充[4]


六、实用技巧

  1. 变量复用:提取公共配置到variables段[3]
  2. 交互式命令:用init建立持久连接提升效率
  3. 主题切换:通过theme: light切换亮色模式
  4. 多步初始化multistep-init执行复杂初始化流程