U3F1ZWV6ZTE1Njg4NDY3OTQ0X0FjdGl2YXRpb24xNzc3Mjg2OTg2NDQ=

Sampler - أداة لتنفيذ أوامر Shell وتصورها وتنبيهها (تم تكوينها باستخدام ملف YAML البسيط

Sampler - أداة لتنفيذ أوامر Shell وتصورها وتنبيهها (تم تكوينها باستخدام ملف YAML البسيط

Sampler هى أداة لتنفيذ أوامر shell والتصور والتنبيه  تكوين مع ملف YAML بسيط

تركيب

ماك
brew cask install sampler
أو
curl -Lo /usr/local/bin/sampler https://github.com/sqshq/sampler/releases/download/v1.0.1/sampler-1.0.1-darwin-amd64
chmod +x /usr/local/bin/sampler

لينكس
wget https://github.com/sqshq/sampler/releases/download/v1.0.1/sampler-1.0.1-linux-amd64 -O /usr/local/bin/sampler
chmod +x /usr/local/bin/sampler
ملاحظة: libasound2-devيلزم تثبيت مكتبة النظام لـ Sampler لتشغيل نغمة صوت الزناد . عادةً ما تكون المكتبة في مكانها ، لكن إن لم يكن - يمكنك القيام بذلك مع مدير الحزم المفضل لديك ، مثل apt install libasound2-dev

Windows (تجريبي)
يوصى باستخدامه مع محاكيات وحدة التحكم المتقدمة ، على سبيل المثال Cmder 
Download .exe 

Usage
يمكنك تحديد أوامر shell ، وتقوم Sampler بتنفيذها باستخدام معدل المطلوبة. يتم استخدام الإخراج للتصور. 
يمكن للمرء اختبار أي عملية ديناميكية مباشرة من المحطة - مراقبة التغييرات في قاعدة البيانات ، ومراقبة رسائل MQ على متن الطائرة ، وتشغيل عملية النشر والحصول على إخطار عند الانتهاء. 
استخدام Sampler هو في الأساس عملية من 3 خطوات:

  • تحديد التكوين الخاص بك في ملف YAML
  • يركض sampler -c config.yml
  • ضبط حجم المكونات والموقع على واجهة المستخدم

المكونات
التالية هي قائمة أمثلة التكوين لكل نوع مكون ، مع البرامج النصية أخذ العينات متوافق مع ماك. 

تشغيل الرسم البيانى


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

خط المؤشر


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

الأجراس وصفارات

المشغلات
تتيح المشغلات القيام بأعمال مشروطة ، مثل التنبيهات المرئية / الصوتية أو أمر تعسفي توضح الأمثلة التالية المفهوم

مقياس الساعة   والذي يظهر تقدم دقيقة ويعلن الوقت الحالي في بداية كل دقيقة




gauges:
  - title: MINUTE PROGRESS
    position: [[0, 18], [80, 0]]  
    cur:
      sample: date +%S
    max:
      sample: echo 60
    min:
      sample: echo 0
    triggers:
      - title: CLOCK BELL EVERY MINUTE
        condition: '[ $label == "cur" ] && [ $cur -eq 0 ] && echo 1 || echo 0'  # expects "1" as TRUE indicator
        actions:
          terminal-bell: true  # standard terminal bell, default = false
          sound: true    # NASA quindar tone, default = false
          visual: false  # notification with current value on top of the component area, default = false
          script: say -v samantha `date +%I:%M%p`  # an arbitrary script, which can use $cur, $prev and $label variables

مخطط زمن الوصول لمحرك البحث ، والذى ينبه المستخدم عندما يتجاوز الكمون العتبة
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  # expects "1" as TRUE indicator
        actions:
          terminal-bell: true  # standard terminal bell, default = false
          sound: true   # NASA quindar tone, default = false
          visual: true  # visual notification on top of the component area, default = false
          script: 'say alert: ${label} latency exceeded ${cur} second' # an arbitrary script, which can use $cur, $prev and $label variables

دعم shell التفاعلى
بالإضافة إلى sampleالأمر ، يمكن للمرء تحديد initالأمر (يتم تنفيذه مرة واحدة فقط قبل أخذ العينات) transformوالأمر ( sampleلإخراج أمر ما بعد العملية ).يغطي ذلك حالة استخدام shell التفاعلية ، على سبيل المثال لإنشاء اتصال بقاعدة بيانات مرة واحدة فقط ، ثم إجراء الاستقصاء في جلسة shell تفاعلية

الوضع الأساسي
textboxes:
  - title: MongoDB polling
    rate-ms: 500
    init: mongo --quiet --host=localhost test # executes only once to start the interactive session
    sample: Date.now();                       # executes with a required rate, in scope of the interactive session
    transform: echo result = $sample          # executes in scope of local session, $sample variable is available for transformation

وضع PTY
في بعض الحالات ، لن يعمل نظام shell التفاعلي ، لأن stdin الخاص به ليس محطة طرفية. يمكننا خداع ذلك ، وذلك باستخدام وضع PTY:
textboxes:
  - title: Neo4j polling
    pty: true  # enables pseudo-terminal mode, default = false
    init: cypher-shell -u neo4j -p pwd --format plain
    sample: RETURN rand();
    transform: echo "$sample" | tail -n 1
  - title: Top on a remote server
    pty: true  # enables pseudo-terminal mode, default = false
    init: ssh -i ~/user.pem [email protected]
    sample: top    

Multistep init
يمكن أيضًا تنفيذ أوامر init متعددة واحدة تلو الأخرى ، قبل البدء في أخذ العينات.
textboxes:
  - title: Java application uptime
    multistep-init:
      - java -jar jmxterm-1.0.0-uber.jar
      - open host:port # or local PID
      - bean java.lang:type=Runtime
    sample: get Uptime

المتغيرات
إذا كان ملف التكوين يحتوي على أنماط متكررة ، فيمكن استخراجها في variablesالقسم. كما يمكن تحديد المتغيرات باستخدام -v--variableflag عند بدء التشغيل ، وأي متغيرات بيئة النظام ستكون متاحة أيضًا في البرامج النصية
variables:
    mongoconnection: mongo --quiet --host=localhost test
barcharts:
  - title: MongoDB documents by status
    items:
      - label: IN_PROGRESS
        init: $mongoconnection
        sample: db.getCollection('events').find({status:'IN_PROGRESS'}).count()
      - label: SUCCESS
        init: $mongoconnection
        sample: db.getCollection('events').find({status:'SUCCESS'}).count()
      - label: FAIL
        init: $mongoconnection
        sample: db.getCollection('events').find({status:'FAIL'}).count()

موضوع اللون


theme: light # default = dark
sparklines:
  - title: CPU usage
    sample: ps -A -o %cpu | awk '{s+=$1} END {print s}'

وصفات فى العالم الحقيقى

قواعد
البيانات فيما يلى أمثلة مختلفة اتصال قاعدة البيانات  يوصى باستخدام shell التبادلي (init script) لإنشاء اتصال مرة واحدة فقط ثم إعادة استخدامه أثناء أخذ العينات

الخلية 
# prerequisite: installed mysql shell

variables:
  mysql_connection: mysql -u root -s --database mysql --skip-column-names
sparklines:  
  - title: MySQL (random number example)
    pty: true
    init: $mysql_connection
    sample: select rand();

كيو 
# prerequisite: installed psql shell

variables:
  PGPASSWORD: pwd
  postgres_connection: psql -h localhost -U postgres --no-align --tuples-only
sparklines:
  - title: PostgreSQL (random number example)
    init: $postgres_connection
    sample: select random();

MongoDB 
# prerequisite: installed mongo shell

variables:
  mongo_connection: mongo --quiet --host=localhost test
sparklines:
  - title: MongoDB (random number example)
    init: $mongo_connection
    sample: Math.random();

Neo4j 
# prerequisite: installed cypher shell

variables:
  neo4j_connection: cypher-shell -u neo4j -p pwd --format plain
sparklines:
  - title: Neo4j (random number example)
    pty: true
    init: $neo4j_connection
    sample: RETURN rand();
    transform: echo "$sample" | tail -n 1

تأخر كافكا لكل مجموعة مستهلك 
variables:
  kafka_connection: $KAFKA_HOME/bin/kafka-consumer-groups --bootstrap-server localhost:9092
runcharts:
  - title: Kafka lag per consumer group
    rate-ms: 5000
    scale: 0
    items:
      - label: A->B
        sample: $kafka_connection --group group_a --describe | awk 'NR>1 {sum += $5} END {print sum}'
      - label: B->C
        sample: $kafka_connection --group group_b --describe | awk 'NR>1 {sum += $5} END {print sum}'
      - label: C->D
        sample: $kafka_connection --group group_c --describe | awk 'NR>1 {sum += $5} END {print sum}'

احصائيات حاويات السفن (وحدة المعالجة المركزية ، MEM ، O / I) 
textboxes:
  - title: Docker containers stats
    sample: docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}"

SSH 

TOP الأمر على خادم بعيد 
variables:
  sshconnection: ssh -i ~/my-key-pair.pem [email protected]
textboxes:
  - title: SSH
    pty: true
    init: $sshconnection
    sample: top

JMX 

Java تطبيق الجهوزية سبيل المثال 
# prerequisite: download [jmxterm jar file](https://docs.cyclopsgroup.org/jmxterm)

textboxes:
  - title: Java application uptime
    multistep-init:
      - java -jar jmxterm-1.0.0-uber.jar
      - open host:port # or local PID
      - bean java.lang:type=Runtime
    sample: get Uptime
    transform: echo $sample | tr -dc '0-9' | awk '{printf "%.1f min", $1/1000/60}'



  1. الى هنا يكون قد أنتهى شرح اليوم ، على أمل أن يكون قد أفادكم ، الى اللقاء في شروحات جديدة . إذا كان لديك أي سؤال أو استفسار فلا تتردد في طرحه في التعليقات ، كما أدعوك لترك تعليق تحفيزي من أجل الإستمرار في تقديم الأفضل. في أمان الله.
ليست هناك تعليقات
إرسال تعليق

إرسال تعليق

اذا اعجبك الموضوع علق بتعليق If you like the subject, comment on the comment