采样器。 控制台实用程序,用于可视化任何shell命令的结果

通常,使用shell命令,无需编写代码或集成即可获得任何度量标准。 因此,在控制台中应该有一个简单方便的可视化工具。


取样器


只需一个简单的YAML文件即可在一分钟内配置监视数据库中的状态更改,监视队列大小,从远程服务器进行遥测,运行脚本部署以及在完成时接收通知。


该代码可在github上找到安装说明-适用于Linux,macOS和(实验)Windows。


有完整的监视系统时,为什么需要此功能?


我必须立即说,这绝不是全面仪表板和监视的替代方法。 将Sampler与Prometheus + Grafana进行比较,与比较ElasticStackSplunk的 tail相同。


但是,如果您为自己的任务提高和配置生产监控-就像麻雀上的大炮一样,那么Sampler也许就是这个问题的答案。 它被认为是用于原型设计,演示或简单地观察区域设置和远程服务器上的度量的工具。


因此,必须将其放在所有服务器上吗?


不可以,Sampler可以在本地运行,但是可以从许多远程计算机上获取指标。 仪表板上的每个组件都有一个init部分,您可以在其中通过ssh输入(或执行任何其他操作以进入interactive shell -建立与数据库的连接,通过JMX连接,登录到API等)。


组件视图和配置示例


配置示例显示了macOS的命令。 许多将在Linux下保持不变,但是有些需要进行调整。


伦查特




构型
 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, default = true items: - label: GOOGLE sample: curl -o /dev/null -s -w '%{time_total}' https://www.google.com - 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 

迷你图




构型
 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}' 

巴查特




构型
 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}' 

量规




构型
 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 

文字框




构型
 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}}" 

Asciibox




构型
 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 

附加功能


扳机


触发器允许您在测量值满足指定条件时触发一些其他操作。 条件和反应也是shell命令,向其中提供变量$label$cur$prev 。 首先,触发器是为警报而设计的(声音和视觉通知是内置的),但是您可以选择自己的脚本来响应触发器的触发,您可以根据需要自定义其动作(例如,使用Pushover将通知发送到手机)


以下示例说明了触发器的配置。 如果搜索引擎响应的延迟时间超过0.3秒-采样器会闪烁标准终端铃声,丢失NASA quindar音调,在图形上显示视觉通知并运行脚本,在这种情况下,该脚本会说出语音中测得的延迟值:


 runcharts: - title: SEARCH ENGINE RESPONSE TIME (sec) rate-ms: 200 items: - label: GOOGLE sample: curl -o /dev/null -s -w '%{time_total}' https://www.google.com - label: YAHOO sample: curl -o /dev/null -s -w '%{time_total}' https://search.yahoo.com triggers: - title: Latency threshold exceeded condition: echo "$prev < 0.3 && $cur > 0.3" |bc -l #  "1"  TRUE actions: terminal-bell: true # default = false sound: true # NASA quindar tone, default = false visual: true # default = false script: 'say alert: ${label} latency exceeded ${cur} second' 

互动壳


如果需要在开始采样之前进入交互式外壳(用于与数据库的一次性连接,SSH登录,与JMX的连接等),则可以指定将在启动时执行一次的init script 。 连接和轮询mongoDB的示例:


 textboxes: - title: MongoDB polling rate-ms: 500 init: mongo --quiet --host=localhost test #    sample: Date.now(); #    mongo shell transform: echo result = $sample #         

此外,还支持PTY模式multistep-init脚本


变数


如果配置包含不想重复的常用部分,则可以将它们放入变量中并在YML文件中的任何位置使用。


在实践中


作为后端程序员,我经常不得不调试,原型设计和测量。 因此,通常需要快速进行可视化和监视。 每次编写自定义内容的时间过长,但如果自定义过程快速且(或多或少)方便,那么这种可视化可以很好地节省时间并解决问题。 我找不到这样的东西,因此决定自己编写一个这样的工具,并使它尽可能通用。


第一次达到预定目的时,我开始使用它来调试数据分组和累积的机制,该机制可以快速更改内存中“事件”的状态。 从日志中读取系统状态或轮询各个计数器的每种状态并不能帮助您快速导航并了解具体内容,但是只要看一下Sampler即可完全解决此问题-




对于我自己使用的所有内容,我准备了“食谱”集合 -制作可复制的配置,并立即开始为任务自定义


  • 数据库连接:MySQL,PostgreSQL,MongoDB,Neo4J
  • 卡夫卡
  • 码头工人
  • SSH
  • 杰姆克斯

该列表将得到补充(非常欢迎您的贡献),与此同时,在问题中,人们开始共享其仪表板Kubernetes,Github等的配置


就这样,哈伯。 如果有人会有用,我会很高兴。

Source: https://habr.com/ru/post/zh-CN463441/


All Articles