Sampler是一款shell命令执行可视化告警工具。它的配置使用一个简单的YAML文件。我为什么需要它您可以直接从终端对任何动态过程进行采样-观察数据库中的变化、监控MQ动态消息、触发部署脚本并在它们完成时得到通知。如果有一种方法可以使用shell命令获取指标,那么您可以使用Sampler立即将它们可视化。安装macOSbrewcaskinstallsampler或sudocurl-Lo/usr/local/bin/samplerhttps://github.com/sqshq/sampler/releases/download/v1.0.3/sampler-1.0.3-darwin-amd64sudochmod+x/usr/local/bin/samplerLinuxsudowgethttps://github.com/sqshq/sampler/releases/download/v1.0.3/sampler-1.0.3-linux-amd64-O/usr/local/bin/samplersudochmod+x/usr/local/bin/sampler注意:Sampler播放触发声音需要安装libasound2-dev系统库。通常该库已经安装在相应的位置,但如果没有-您可以使用您常用的包管理器安装它,例如aptinstalllibasound2-devWindows(experimental)建议在高级控制台模拟器下使用,例如CmderDownload.exe使用指定的shell命令,Sampler会以相应的速率执行这些命令。输出用于可视化。使用Sampler的基本三步流程:在YAML配置文件中定义shell命令运行sampler-cconfig.yml调整组件在UI上的大小和位置市场上已经有很多监控系统。设置开发工具。如果使用Grafana启动和配置Prometheus是完全多余的任务,那么Sampler可能是正确的解决方案。没有服务器,没有数据库,不需要部署——你指定shell命令,它就可以工作。我是否需要在我监控的每台服务器上都安装它?不,您可以在本地运行采样器并仍然从多台远程计算机收集遥测数据。任何可视化都可能有一个init命令,您可以在其中通过ssh连接到远程服务器。请参阅下面的SSH示例组件,了解每种组件类型的配置示例列表,以及与macOS兼容的示例脚本。Runchartruncharts:-title:Searchengineresponsetimerate-ms:500#samplingrate,default=1000scale:2#numberofdigitsatersampledecimalpoint,default=1legend:enabled:true#enablesitemlabels,default=truedetails:false#enablesitemstatistics:cur/min/max/dltvalues,默认=trueitems:-label:GOOGLEsample:curl-o/dev/null-s-w'%{time_total}'https://www.google.comcolor:178#8-bitcolornumber,defaultoneischosenfromapre-definedpalette-label:YAHOOsample:curl-o/dev/null-s-w'%{time_total}'https://search.yahoo.com-label:BINGsample:curl-o/dev/null-s-w'%{time_total}'https://www.bing.comSparklinesparklines:-title:CPUusagerate-ms:200scale:0sample:ps-A-o%cpu|awk'{s+=$1}END{prints}'-title:Freememorypagesrate-ms:200scale:0sample:memory_pressure|grep'Pagesfree'|awk'{print$3}'Barchartbarcharts:-title:Localnetworkactivityrate-ms:500#samplingrate,default=1000scale:0#numberofdigitsatersampledecimalpoint,default=1items:-label:UDPbytesinsample:nettop-Jbytes_in-l1-mudp|awk'{sum+=$4}END{原则tsum}'-label:UDPbytesoutsample:nettop-Jbytes_out-l1-mudp|awk'{sum+=$4}END{printsum}'-label:TCPbytesinsample:nettop-Jbytes_in-l1-mtcp|awk'{sum+=$4}END{printsum}'-label:TCPbytesoutsample:nettop-Jbytes_out-l1-mtcp|awk'{sum+=$4}END{printsum}'Gaugegauges:-title:Minuteprogressrate-ms:500#samplingrate,default=1000scale:2#numberofdigitsaftersampledecimalpoint,默认=1%-only:false#toggledisplayofthecurrentvalue,default=falsecolor:178#8-bitcolornumber,defaultoneischosenfromapre-definedpalettecur:sample:date+%S#samplescriptforcurrentvaluemax:sample:echo60#samplescriptformaxvaluemin:sample:echo0#samplescriptforminvalue-title:Yearprogresscur:sample:date+%jmax:sample:echo365min:sample:echo0Textboxtextboxes:-title:Localweatherrate-ms:10000#samplingrate,default=1000sample:curlwttr.in?0ATQFborder:false#borderaroundtheitem,default=truecolor:178#8-bitcolornumber,defaultiswhite-title:Dockercontainersstatsrate-ms:500sample:dockerstats--no-stream--format"t能够{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}"Asciiboxasciiboxes:-title:UTCtimerate-ms:500#samplingrate,default=1000font:3d#fonttype,default=2dborder:false#borderaroundtheitem,default=truecolor:43#8-bitcolornumber,defaultiswhitesample:envTZ=UTCdate+%rExtraFeatures触发器触发器允许执行条件操作,如视觉/声音警报或任意shell命令这个概念。时钟计,从开始计每分钟显示时间进度和当前时间:-title:MINUTEPROGRESSposition:[[0,18],[80,0]]cur:sample:date+%Smax:sample:echo60min:sample:echo0triggers:-title:CLOCKBELLEVERYMINUTEcondition:'[$label=="cur"]&&[$cur-eq0]&&echo1||echo0'#expects"1"asTRUEindicatoractions:terminal-bell:true#standardterminalbell,default=falsesound:true#NASAquindartone,default=falsevisual:false#notificationwithcurrentvalueontopofthecomponentarea,default=falsescript:say-vsamantha`date+%I:%M%p`#anarbitraryscript,whichcanuse$cur,$prevand$labelvariables搜索引擎延迟图,当延迟超过阈值运行图时提醒用户:-title:SEARCHENGINERESPONSETIME(sec)rate-ms:200items:-label:GOOGLEsample:curl-o/dev/null-s-w'%{time_total}'https://www.google.com-label:YAHOOsample:curl-o/dev/null-s-w'%{time_total}'https://search.yahoo.comtriggers:-title:Latencythresholdexceededcondition:echo"$prev<0.3&&$cur>0.3"|bc-l#期望"1“作为TRUE指示器操作:terminal-bell:真e#standardterminalbell,default=falsesound:true#NASAquindartone,default=falsevisual:true#visualnotificationontopofthecomponentarea,default=falsescript:'sayalert:${label}latencyexceeded${cur}second'#anarbitraryscript,可以使用$cur,$prevand$labelvariablesinteractionShell支持除了sample命令外,还可以指定init命令(采样前只执行一次)和transform命令(对sample命令输出进行后处理)。这包括交互式shell用例,例如只建立一次与数据库的连接,然后在交互式shell会话中执行轮询。基本模式文本框:-title:MongoDBpollingrate-ms:500init:mongo--quiet--host=localhosttest#executeonlyoncetostarttheinteractivesessionsample:Date.now();#executeswithrequiredrate,inscopeoftheinteractivesessiontransform:echoresult=$sample#executesinscopeoflocalsession,$transmpleforvariableisavailableinsomecases,交互式shell将无法工作,因为它的标准输入不是终端。在这种情况下,我们可以使用PTY模式:tail-n1-title:Toponaremoteserverpty:true#enablespseudo-terminalmode,default=falseinit:ssh-i~/user.pemec2-user@1.2.3.4sample:topinit命令一步步执行开始采样前,也可以多次init一个一个执行命令。textboxes:-title:Javaapplicationuptimemultistep-init:-java-jarjmxterm-1.0.0-uber.jar-openhost:port#orlocalPID-beanjava.lang:type=Runtimesample:getUptimevariables如果配置文件包含重复的模式,可以将它们提取出来到变量部分。此外,还可以在启动时使用-v/--variable标志指定变量,脚本中也可以使用任意系统环境变量。变量:mongoconnection:mongo--quiet--host=localhosttestbarcharts:-title:MongoDBdocumentsbystatusitems:-label:IN_PROGRESSinit:$mongoconnectionssample:db.getCollection('events').find({status:'IN_PROGRESS'}).count()-标签:SUCCESSinit:$mongoconnectionssample:db.getCollection('events').find({status:'SUCCESS'}).count()-label:FAILinit:$mongoconnectionssample:db.getCollection('events').find({status:'FAIL'}).count()colorthemetheme:light#default=darksparklines:-title:CPUusagesample:ps-A-o%cpu|awk'{s+=$1}END{prints}'实景数据库为下面是不同数据库连接的例子。建议使用交互式shell(初始化脚本)仅建立一次连接,然后在采样期间重复使用。MySQL#prerequisite:installedmysqlshellvariables:mysql_connection:mysql-uroot-s--databasemysql--skip-column-namessparklines:-title:MySQL(randomnumberexample)pty:trueinit:$mysql_connectionsample:selectrand();PostgreSQL#prerequisite:installedpsqlshellvariables:PGPASSWORD:pwdpostgres_connection:psql-hlocalhost-Upostgres--no-align--tuples-onlysparklines:-title:PostgreSQL(randomnumberexample)init:$postgres_connectionsample:selectrandom();MongoDB#prerequisite:installedmongoshellvariables:mongo_connection:mongo--quiet--host=localhosttestsparklines:-title:MongoDB(randomnumberexample)init:$mongo_connectionsample:Math.random();Neo4j#prerequisite:installedcyphershellvariables:neo4j_connection:cypher-shell-uneo4j-ppwd--formatplainsparklines:-title:Neo4j(randomnumberexample)pty:trueinit:$neo4j_connectionsample:RETURNrand();transform:echo"$sample"|tail-n1Kafka检查kafka滞后值,计算每个队列滞后值的和,高于敏感值,多消费者组,多主题。变量:kafka_connection:$KAFKA_HOME/bin/kafka-consumer-groups--bootstrap-serverlocalhost:9092runcharts:-title:Kafkalagperconsumergrouprate-ms:5000scale:0items:-label:A->Bsample:$kafka_connection--groupgroup_a--describe|awk'NR>1{sum+=$5}END{printsum}'-label:B->Csample:$kafka_connection--groupgroup_b--describe|awk'NR>1{sum+=$5}END{printsum}'-标签:C->Dsample:$kafka_connection--groupgroup_c--describe|awk'NR>1{sum+=$5}END{printsum}'DockerDocker容器统计信息(CPU、MEM、O/I)文本框:-title:Dockercontainersstatssample:dockerstats--no-stream--format"table{{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}"SSH远程服务器变量上的TOP命令:sshconnection:ssh-i~/my-key-pair.pemec2-user@1.2.3.4textboxes:-title:SSHpty:trueinit:$sshconnectionssample:topJMXJava应用程序正常运行时间示例:#prerequisite:download[jmxtermjarfile](https://docs.cyclopsgroup.org/jmxterm)textboxes:-title:Javaapplicationuptimemultistep-init:-java-jarjmxterm-1.0.0-uber.jar-openhost:port#orlocalPID-beanjava.lang:type=Runtimesample:getUptimetransform:echo$sample|tr-dc'0-9'|awk'{printf"%.1fmin",$1复制代码/1000/60}'
