采样器。仪表盘、监控和警报——直接在你的终端上。它是如何工作的?示例还有更多!

2025-06-07

采样器。仪表盘、监控和警报——直接在你的终端上

它是如何工作的?

示例

还有更多!

作为一名后端开发者,我总是需要监控一些东西。数据库的状态机、记录数量、消息队列延迟、自定义应用程序指标、系统性能、部署脚本的进度等等,太多了!

长期以来,我一直在寻找一款能够节省时间的工具——能够将所有信息集中管理,并在需要时通知我。繁重的生产监控系统无法胜任开发任务,我需要一把瑞士军刀——能够在一分钟内完成配置,并立即提供结果。

没有这样的东西,所以我自己写了个。来认识一下Sampler - 一个纯 Go 编写的、适用于任何 shell 命令的命令行 UI。

要安装,请按照macOS、Linux 或 Windows 的说明进行操作

它是如何工作的?

这个想法非常简单——几乎所有您想要监控和可视化的指标都可以通过 CLI 获得:

  • 基础知识:CPU、内存、磁盘空间、网络
  • 通过 SSH 从远程机器进行遥测
  • 任何数据库指标和自定义查询的结果
  • 卡夫卡,RabbitMQ,ActiveMQ
  • K8s RAM/CPU/事件
  • 所有内容均可通过 http 获取,例如 Spring Boot Actuator 指标
  • Docker
  • JMX
  • 日志

这意味着我们无需复杂的集成、驱动程序和依赖项即可创建仪表板。我们可以直接从终端完成。

使用 Sampler 基本上分为 3 个步骤:

  • 在 YAML 文件中定义您的配置
  • 跑步sampler -c your-config-file.yml
  • 调整 UI 上的组件大小和位置

示例

可视化及其 YAML 配置

运行图


runcharts:
  - title: Search engine response time
    rate-ms: 500        # sampling rate, default = 1000
    scale: 2            # number of digits after sample decimal point, default = 1
    legend:
      enabled: true     # enables item labels, default = true
      details: false    # enables item statistics: cur/min/max/dlt values, default = true
    items:
      - label: GOOGLE
        sample: curl -o /dev/null -s -w '%{time_total}'  https://www.google.com
        color: 178      # 8-bit color number, default one is chosen from a pre-defined palette
      - label: YAHOO
        sample: curl -o /dev/null -s -w '%{time_total}'  https://search.yahoo.com
      - label: BING
        sample: curl -o /dev/null -s -w '%{time_total}'  https://www.bing.com
Enter fullscreen mode Exit fullscreen mode
迷你图


sparklines:
  - title: CPU usage
    rate-ms: 200
    scale: 0
    sample: ps -A -o %cpu | awk '{s+=$1} END {print s}'
  - title: Free memory pages
    rate-ms: 200
    scale: 0
    sample: memory_pressure | grep 'Pages free' | awk '{print $3}'
Enter fullscreen mode Exit fullscreen mode
条形图


barcharts:
  - title: Local network activity
    rate-ms: 500        # sampling rate, default = 1000
    scale: 0            # number of digits after sample decimal point, default = 1
    items:
      - label: UDP bytes in
        sample: nettop -J bytes_in -l 1 -m udp | awk '{sum += $4} END {print sum}'
      - label: UDP bytes out
        sample: nettop -J bytes_out -l 1 -m udp | awk '{sum += $4} END {print sum}'
      - label: TCP bytes in
        sample: nettop -J bytes_in -l 1 -m tcp | awk '{sum += $4} END {print sum}'
      - label: TCP bytes out
        sample: nettop -J bytes_out -l 1 -m tcp | awk '{sum += $4} END {print sum}'
Enter fullscreen mode Exit fullscreen mode
仪表


gauges:
  - title: Minute progress
    rate-ms: 500        # sampling rate, default = 1000
    scale: 2            # number of digits after sample decimal point, default = 1
    percent-only: false # toggle display of the current value, default = false
    color: 178          # 8-bit color number, default one is chosen from a pre-defined palette
    cur:
      sample: date +%S  # sample script for current value
    max:
      sample: echo 60   # sample script for max value
    min:
      sample: echo 0    # sample script for min value
  - title: Year progress
    cur:
      sample: date +%j
    max:
      sample: echo 365
    min:
      sample: echo 0
Enter fullscreen mode Exit fullscreen mode
文本框


textboxes:
  - title: Local weather
    rate-ms: 10000      # sampling rate, default = 1000
    sample: curl wttr.in?0ATQF
    border: false       # border around the item, default = true
    color: 178          # 8-bit color number, default is white
  - title: Docker containers stats
    rate-ms: 500
    sample: docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}"
Enter fullscreen mode Exit fullscreen mode
ASCII 框


asciiboxes:
  - title: UTC time
    rate-ms: 500        # sampling rate, default = 1000
    font: 3d            # font type, default = 2d
    border: false       # border around the item, default = true    
    color: 43           # 8-bit color number, default is white
    sample: env TZ=UTC date +%r
Enter fullscreen mode Exit fullscreen mode

还有更多!

支持交互式 shell、PTY 模式、触发器、警报和变量。提供与 MySQL、PostgreSQL、MongoDB、Neo4J、Kafka、SSH 和 JMX 配合使用的实际方案。您可以在文档中了解高级功能。

不要犹豫,在 Github 上提出问题、做出贡献并 ⭐ star ⭐ 该项目!

文章来源:https://dev.to/sqshq/sampler-dashboards-monitoring-and-alerting-right-from-your-terminal-5h5e
PREV
如何在 React Native 中展示广告?
NEXT
你对 JavaScript 闭包了解多少?