Tag: workshop

  • Kafka #01 Basic Installtion

    Apache Kafka เป็น distributed streaming platform [1] กล่าวคือ สามารถ Publish และ Subscribe ข้อมูลแบบ Streaming ได้ คล้ายๆกับ Message Queue หรือ Enterprise Messaging System ระบบนี้ใช้ได้ทั้งเป็น Real-time Streaming Data Pipeline และ สร้าง Streaming Application ได้ Apache Kafka ออกแบบมาให้สามารถทำงานเป็นแบบ Cluster โดยเก็บข้อมูลเป็น Stream of Record ซึ่งจัดหมวดหมู่ในรูปของ Topics ข้อมูลแต่ละ Record ประกอบด้วบ Key, Value และ timestamp

    เอาเป็นว่า ระบบนี้เอาไว้สำหรับรองรับการส่งข้อมูลแนวๆ Streaming มาเพื่อทำการวิเคราะห์แบบ Real-Time แทนที่จะต้องบริหารเองก็แล้วกัน แถมด้วยความสามารถในการ Subscribe ข้อมูล สามารถย้อนไปดูข้อมูลก่อนหน้าได้ (ตามขอบเขตเวลาที่กำหนด) มาติดตั้งกัน

    บทความนี้ ทดสอบบน Ubuntu 16.04

    1. ไป Download และ ติดตั้ง
      จาก https://www.apache.org/dyn/closer.cgi?path=/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz
      ด้วยคำสั่ง

      wget http://www-eu.apache.org/dist/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz
      tar -zxvf kafka_2.11-0.10.2.0.tgz
      cd kafka_2.11-0.10.2.0
    2. Kafka ทำงานบน Zookeeper ดังนั้นให้เริ่มทำงานด้วยคำสั่ง
      bin/zookeeper-server-start.sh config/zookeeper.properties &

      แล้วจึง สั่ง Start Kafka

      bin/kafka-server-start.sh config/server.properties &
    3. ต่อไป Producer กับ Consumer จะติดต่อกันผ่าน Topic จึงต้องสร้าง topic ด้วยคำสั่งต่อไปนี้
      bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

      ซึ่งในที่นี้ จะได้ Topic ชื่อ test ทำงานบน Zookeeper บน Localhost ที่ Port 2181
      ลองใช้คำสั่งต่อไปนี้เพื่อดู Topic ทั้งหมด

      bin/kafka-topics.sh --list --zookeeper localhost:2181
    4. ทดลองส่งข้อมูลเข้าไปให้ Kafka ซึ่งจะทำงานที่ Localhost ที่ Port 9092
      bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

      แล้วลองพิมพ์ข้อความอะไรลงไปดู เช่น

      Hello World
      This is a book
      Blah Blah
    5. ลองเปิดอีก Terminal ขึ้นมา แล้วใช้คำสั่งต่อไปนี้
      bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

      ก็จะเห็นได้ว่า สามารถเรียกดูสิ่งที่ส่งเข้าไปใน Topic “test” ตั้งแต่เริ่มต้นได้

    ตรงนี้ยังไม่แปลกอะไร และไม่น่าตื่นเต้นอะไร บทความต่อไปจะกล่าวถึงการสร้างเป็น Cluster แล้วก็ทำงานกับ หลายๆ Producer และ หลายๆ Consumer พร้อมๆกัน

     

    Reference

    1. https://kafka.apache.org/intro
  • Spark #03: Query Apache Access Log with Spark SQL

    ต่อจาก

    บทความนี้ จะกล่าวถึงการนำเข้าไฟล์ Apache Access Log เข้าไปเก็บไว้ใน Hadoop HDFS แล้ว ให้ Apache Spark Cluster เข้าไปค้นหาข้อมูล โดยใช้ภาษา SQL ผ่าน Spark SQL API

    นำ Apache Access Log เข้า HDFS

    1. ให้ Copy Apache Access Log ที่มีอยู่มาเก็บไว้ในเครื่องที่สามารถติดต่อ Hadoop HDFS ได้ (ในที่นี้ ชื่อไฟล์เป็น apache.access.log)
    2. ใช้คำสั่งต่อไป
      (แทน /test/ ด้วย Path ที่สร้างไว้ใน HDFS)

      hdfs dfs -copyFromLocal apache.access.log /test/
    3. เมื่อไปดูผ่าน Web UI ของ Hadoop HDFS ก็จะเห็นไฟล์อยู่ดังนี้

    วิธี Query ข้อมูลจาก Zeppelin ไปยัง Spark Cluster

    1. เปิด Zeppelin Web UI แล้วสร้าง Note ใหม่ โดยคลิกที่ Create new node
      แล้วใส่ชื่อ Note เช่น Query Apache Access Log
      ตั้ง Default Interpreter เป็น Spark
      แล้วคลิก Create Note
    2. ใส่ Code ต่อไปนี้ลงไป
    3. ด้านขวามือบน จะมีรูปเฟือง ให้คลิก แล้วเลือก Insert New
    4. แล้วใส่ข้อความนี้ลงไป
    5. จากนั้นคลิก Run all paragraphs
    6. ผลที่ได้

    ตอนต่อไปจะมาอธิบายวิธีการเขียนคำสั่งครับ

  • Zeppelin #01 Installation

    Apache Zeppelin เป็น Web-Base Notebook สำหรับเป็นการเชื่อมต่อกับระบบ Data Analytic [1] สามารถใช้ทำ Data-Driven แบบ Interactive และยังสามารถใช้งานพร้อมๆกันหลายคนได้ รองรับการทำงานผ่านภาษา SQL, Scala และอื่นๆอีกมากมาย

    ในบทความนี้ จะแนะนำการติดตั้ง Apache Zeppelin 0.7.0 บน Ubuntu 16.04

    1. ไปที่ http://zeppelin.apache.org/download.html เพื่อ Download ชุดติดตั้ง ซึ่งแบ่งออกเป็น แบบรวมทุก Interpreters ขนาด 710 MB หรือ จะเลือกเป็นแบบ ที่รองรับเฉพาะ Spark ขนาด 272 MB ซึ่งหากในอนาคตต้องการใช้ภาษาอื่นอีก ก็จะต้องติดตั้งเพิ่มเติม (แนะนำให้ใช้แบบรวม Interpreters)
    2. บน Ubuntu ที่จะใช้เป็น Zeppelin Server ใช้คำสั่งต่อไปนี้เพื่อ Download
      wget http://www-eu.apache.org/dist/zeppelin/zeppelin-0.7.0/zeppelin-0.7.0-bin-all.tgz
    3. ติดตั้ง Zeppelin (ต้องใช้ Java) ด้วยคำสั่งต่อไปนี้
      sudo apt install default-jre
      tar -zxvf zeppelin-0.7.0-bin-all.tgz ; ln -s zeppelin-0.7.0-bin-all.tgz zeppelin
    4. Start Zeppelin
      cd zeppelin
      bin/zeppelin-daemon.sh start
    5. หากเรียบร้อยก็จะสามารถใช้งานผ่านทาง Web UI ที่ port: 8080 ได้
    6. ในกรณีที่ติดตั้ง Zeppelin บนเครื่องเดียวกับ Spark Master ก็จะพบว่า Port ชนกัน (คือใช้ Web UI ที่ port 8080 เหมือนกัน) เราสามารถเปลี่ยน Web UI port ของ Zeppelin ได้โดยใช้คำสั่งต่อไปนี้
      cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml

      แล้วแก้ไขไฟล์ conf/zeppelin-site.xml
      แก้ไขค่า 8080 เป็น ค่าอื่น เช่น 8090 เป็นต้น

      <property>
       <name>zeppelin.server.port</name>
       <value>8080</value>
       <description>Server port.</description>
      </property>

      แล้วทำการ Start Zeppelin ใหม่

    Reference:

    1. http://zeppelin.apache.org/
  • Spark #02: Cluster Installation

    ต่อจาก Spark #01: Standalone Installation

    Apache Spark ทำงานแบบ Master – Slave โดย Spark Cluster Component ดังภาพ


    ภาพจาก http://spark.apache.org/docs/latest/img/cluster-overview.png

    การใช้งาน Apache Spark จะใช้ผ่านการเขียนโปรแกรมด้วยภาษา Scala, Java, Python หรือ R แล้วสั่งการผ่าน “Driver” ซึ่งจะทำการส่งการไปยัง “Worker” เพื่อให้ Execute ตามที่ต้องการ การสร้าง Cluster จะมี Cluster Manager เป็น Standalone, Apache Mesos และ Hadoop YARN [1]

    ในบทความนี้ จะกล่าวถึงเฉพาะ การติดตั้ง Apache Spark Cluster แบบ Standalone คือใช้ Apache Spark เองเป็น Cluster Manager

    1. ติดตั้ง Ubuntu 16.04 อีกเครื่องหนึ่ง แล้วติดตั้งตามขึ้นตอนที่กล่าวใน Spark #01: Standalone Installation ข้อ 1-2 เท่านั้น (ไม่ต้อง Start Master ขึ้นมา)
    2. ตอนนี้จะมีเครื่อง Master และ เครื่อง Slave ซึ่งแนะนำให้ทำ Password-less SSH จากเครื่อง Master ไปยัง Slave เพื่อสะดวกต่อการใช้งาน
    3. ที่เครื่อง Master ใช้คำสั่งต่อไปนี้ เพื่อสร้างไฟล์ spark-env.sh ซึ่งเป็นตัวกำหนดการทำงานต่างๆของ Spark Cluster โดยในที่นี้ จะ SPARK_MASTER_HOST เป็น IP ของเครื่อง Master (แทนที่ 192.168.XXX.YYY ด้วย IP ของ Master )
      cp conf/spark-env.sh.template conf/spark-env.sh
      
      echo "SPARK_MASTER_HOST=192.168.XXX.YYY" >> conf/spark-env.sh
    4. ที่เครื่อง Master ใช้คำสั่งต่อไปนี้ เพื่อสร้างไฟล์ slaves ซึ่งจะกำหนดว่า เครื่องใดบ้างจะเป็น Slave ของ Cluster นี้ (หากมี Slave หลายเครื่อง ก็ใส่ IP ลงไปในไฟล์ conf/slaves ให้หมด)
      cp conf/slaves.template conf/slaves
      
      echo "192.168.XXX.ZZZ" >> conf/slaves
    5. ที่เครื่อง Master ใช้คำสั่งต่อไปนี้ เพื่อเชื่อมต่อ Cluster
      sbin/start-all.sh

      หมายเหตุ: หากไม่ได้ทำ Password-less SSH ก็จะต้องใส่ Password ทีละเครื่องจนเสร็จ

    6. เมื่อเสร็จเรียบร้อย ก็จะสามารถดูสถานะได้ที่ http://192.168.XXX.YYY:8080 ดังภาพ

    ประมาณนี้

    บทความต่อไป จะลงรายละเอียดเกี่ยวกับการเขียน Program เพื่อทำงานบน Spark Cluster

    Reference:

    1. http://spark.apache.org/docs/latest/cluster-overview.html

     

  • Spark #01: Standalone Installation

    Apache Spark : เป็นระบบ Data Processing ในระดับ Large-Scale ซึ่งทำงานได้เร็วกว่า Apache Hadoop MapReduce 100 เท่าบน Memory และ 10 เท่าบน Disk สามารถพัฒนาโปรแกรมเพื่อทำงานบน Spark ได้หลายภาษา ทั้ง Java, Scala, Python และ R อีกทั้งยังมี Library ทำงานกับ SQL, Machine Learning และ Graph Parallel Computation

    ในบทความนี้ จะกล่าวถึงเฉพาะวิธีการติดตั้ง Apache Spark เบื้องต้น บน Ubuntu 16.04 จำนวน 1 Machine ก่อน

    1. ไปที่ http://spark.apache.org/downloads.html
      เลือก Release, Package ที่ต้องการ แล้วเลือก Copy Link จาก Download Link มาได้เลย
    2. ที่ Ubuntu Server ใช้คำสั่งต่อไปนี้ ติดตั้ง Java และ Download Spark มาไว้บนเครื่อง
      sudo apt-get install default-jre openjdk-8-jdk-headless
      cat <<EOF >> .bashrc 
      export SPARK_HOME=/home/mama/spark
      export PATH=\$PATH:\$SPARK_HOME/bin
      EOF
      wget http://d3kbcqa49mib13.cloudfront.net/spark-2.1.0-bin-hadoop2.7.tgz
      tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz ; ln -s spark-2.1.0-bin-hadoop2.7 spark
      cd spark
    3. แล้วทำการ Start Spark Master Server ด้วยคำสั่ง
      sbin/start-master.sh
    4. จากนั้น สามารถเรียกดู Web UI ได้ที่ port 8080 (Default) และต่อไป เครื่อง Worker หรือ เครื่องที่จะมาเข้า Cluster จะติดต่อเครื่องนี้ผ่าน port 7077 (Default)
    5. สามารถใช้งาน Spark Shell ซึ่ง จะเป็นภาษา Scala แบบ Interactive ด้วยคำสั่ง
      bin/spark-shell
    6. สามารถดู Jobs ที่ทำงานได้ผ่านทาง Web UI ที่ port 4040 (Default)

    ประมาณนี้ก่อน ในบทความต่อไปจะเป็นการสร้าง Spark Cluster

    Reference:

    1. http://spark.apache.org/
  • Cassandra #02 Scale-Out to Multi-nodes

    ต่อจาก Cassandra #01 เริ่มต้นใช้งาน

    ความสามารถที่สำคัญของ Cassandra คือสามารถทำการ Scale Out หรือขยายความสามารถของระบบได้โดยการเพิ่มเครื่องคอมพิวเตอร์ในระดับ Commodity Hardware [1] เข้าไปใน Cluster

    ในบทความนี้ จะแสดงวิธีการสร้าง Cassandra Cluster ที่ประกอบไปด้วย 3 Node ชื่อ cassandra01, cassandra02 และ cassandra03 โดยมีชื่อ Cluster ว่า PSUCluster และกำหนดให้ cassandra01 เป็น Seed Node (ทำหน้าที่เป็นผู้ประสานงานสำหรับ Node ใหม่ๆเข้าร่วม Cluster)

    ขั้นตอนการขยายระบบแบบ Scale Out ไปยังหลายๆ Node แต่ละ Node ทำดังนี้

    1. ติดตั้ง Cassandra ตามขั้นตอนใน Cassandra #01 เริ่มต้นใช้งาน
    2. แก้ไขไฟล์ /etc/cassandra/cassandra.yaml ดังนี้
      # กำหนดชื่อ Cluster ที่ต้องการ
      cluster_name: 'PSUCluster'
      
      # กำหนด Seed Node ซึ่งมีไว้ให้ node ใหม่ประกาศตัวเองเพื่อเข้าร่วม Cluster
      # ควรมีไม่เกิน 3 Node ต่อ Data Center
      # ในที่นี้ กำหนดไว้เพียงตัวเดียว 
      seed_provider:
       parameters:
       - seeds: "192.168.107.111"
      
      # กำหนด listen_address เป็นค่าว่าง
      listen_address:
      
      # กำหนด endpoint_snitch เป็น GossipingPropertyFileSnitch
      # เพื่อให้สามารถมี Cluster แบบข้าง Data Center ได้
      endpoint_snitch: GossipingPropertyFileSnitch
      
    3. ในการเริ่มใช้งานครั้งแรก ให้ลบข้อมูลใน /var/lib/cassandra/data/system ออกก่อน
      sudo rm -rf /var/lib/cassandra/data/system/*
    4. ในการใช้ Endpoint Snitch แบบ GossipingPropertyFileSnitch ต้องลบไฟล์ cassandra-topology.properties ออกไปก่อน
      sudo rm /etc/cassandra/cassandra-topology.properties
    5. จากนั้นก็ Start Cassandra Service
      sudo service cassandra restart

    วิธีดูสถานะของระบบ

    sudo watch nodetool status

    ในตอนแรกจะเป็นแบบนี้

    เมื่อ cassandra02 เข้ามา

    และเมื่อครบ 3 Node

    วิธี Debug ว่าเกิดอะไรขึ้น

    sudo tail -f /var/log/cassandra/debug.log

     

    Reference

    [1] http://docs.datastax.com/en/landing_page/doc/landing_page/planning/planningHardware.html

    [2] http://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archIntro.html

    [3] https://docs.datastax.com/en/cassandra/3.0/cassandra/initialize/initSingleDS.html

  • Cassandra #01 เริ่มต้นใช้งาน

    Cassandra เป็นระบบ Database ที่เหมาะสำหรับการ Scalability และให้ High Availability โดยไปลดประสิทธิภาพ มีความทนทานสูง (Fault Tolerance) โดยสามารถใช้งานเครื่องคอมพิวเตอร์ทั่วไปๆ (Commodity Hardware) หรือ ใช้งาน Cloud Infrastructure สำหรับงานที่มีความสำคัญได้ (Mission Critical) สามารถกระจายสำเนา (Replication) ข้าม Data Center ได้อีกด้วย [1][3]

    ในบทความนี้ จะแสดงการติดตั้งบน Ubuntu 16.04 เพียงเครื่องเดียวก่อน และให้เห็นวิธีการติดต่อตัวฐานข้อมูล การส่ง Query เบื้องต้น

    # echo "deb http://www.apache.org/dist/cassandra/debian 310x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
    # curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -
    # sudo apt-get update
    # sudo apt-get install cassandra

    ต่อไป วิธีการส่งคำสั่งไปยัง Cassandra จะใช้งานผ่าน cqlsh (Cassandra Query Language Shell)

    # cqlsh -C
    Connected to Test Cluster at 127.0.0.1:9042.
    [cqlsh 5.0.1 | Cassandra 3.10 | CQL spec 3.4.4 | Native protocol v4]
    Use HELP for help.
    cqlsh>

    ใน Cassandra จะเรียก Database ว่า Keyspace วิธีที่จะดูว่ามี Keyspace อะไรอยู่บ้าง ใช้คำสั่ง [2]

    cqlsh> DESCRIBE keyspaces;
    system_schema system_auth system system_distributed system_traces

    สั่งสร้าง Keyspace ชื่อ test ด้วยคำสั่งต่อไปนี้

    cqlsh> CREATE KEYSPACE test WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor' : 3};

    เนื่องจาก Cassandra มีลักษณะพิเศษที่ไม่เหมือนกับ Database Servers อื่นๆ ก็คือเรื่องการ Replication ตั้งแต่เริ่มต้น ในคำสั่งข้างต้น จะบอกว่า ระบบจากสร้าง 3 สำเนา เป็นหลัก (จะกล่าวรายละเอียดในตอนต่อๆไป)

    ต่อไป สั่งสร้าง Table ชื่อ table1

    csqlsh> use test;
    cqlsh:test> create table table1 (
     ... id text primary key,
     ... age int,
     ... firstname text,
     ... lastname text
     ... );
    

    คำสั่งในการ Insert ข้อมูล

    cqlsh:test> INSERT INTO table1 (id, age, firstname, lastname) VALUES ( '000001', 10, 'John', 'Doe' );

    คำสั่งในการ Select ข้อมูล

    cqlsh:test> SELECT * FROM table1;
    
     id | age | firstname | lastname
    --------+-----+-----------+----------
     000001 | 10 | John | Doe
    
    (1 rows)

    คำสั่งในการ Update ข้อมูล

    cqlsh:test> UPDATE table1
     ... SET age = 20
     ... WHERE id = '000001'
     ... ;
    cqlsh:test> SELECT * FROM table1;
    
     id | age | firstname | lastname
    --------+-----+-----------+----------
     000001 | 20 | John | Doe
    
    (1 rows)

    คำสั่งในการ Delete ข้อมูล

    cqlsh:test> DELETE FROM table1
     ... WHERE id = '000001';
    cqlsh:test> SELECT * FROM table1;
    
     id | age | firstname | lastname
    ----+-----+-----------+----------
    
    (0 rows)

    จะเห็นได้ว่า รูปแบบการใช้คำสั่งแทบจะไม่แตกต่างกับภาษา SQL ใน RDBMS ทั่วไปเลย

    Reference:

    [1] http://cassandra.apache.org/

    [2] http://docs.datastax.com/en/cql/3.1/cql/cql_using/useStartingCqlshTOC.html

    [3] http://docs.datastax.com/en/cassandra/3.0/cassandra/cassandraAbout.html

     

  • JMeter #01: การสร้าง Load Test เบื้องต้น

    Apache JMeter เป็น Open Source Software ที่พัฒนาด้วย Java 100% ออกแบบมาใช้สำหรับการทดสอบโหลดของพฤติกรรมการใช้งาน และวัดประสิทธิภาพ เดิมใช้เพื่อทดสอบ Web Application แต่ปัจจุบันสามารถใช้งานทดสอบได้หลากหลายขึ้นด้วย

    อ่านเพิ่มเติม: http://jmeter.apache.org/index.html

    บทความที่เกี่ยวข้อง: https://sysadmin.psu.ac.th/?s=jmeter

    ในการใช้งานทั่วไปเบื้องต้น สามารถอ่านได้จาก การติดตั้งโปรแกรมตรวจสอบประสิทธิภาพ Server : Apache JMeter บนเครื่อง Windows

     

    การวัดประสิทธิภาพ (Performance Test) [1] แบ่งออกเป็น

    1. Performance Testing
    2. Load Testing
    3. Stress Testing

    ในที่นี้จะใช้ JMeter ในการทำ Load Testing โดยจะทดสอบ Web Application ตามเป้าหมายต่อไปนี้

    • ทดสอบกับ Web Page ที่ตั้งไว้ ซึ่งประกอบด้วยภาพจำนวนมาก
    • จำนวน Connection ต่อวินาที ในระดับต่างๆ
    • ในแต่ระดับ จะมีหยุดรอ 10 วินาที ก่อนจะยกระดับที่สูงขึ้น

    ขั้นตอนการใช้งาน JMeter สร้าง Load Testing

    1. เนื่องจากการทดสอบจะยิงไปที่ Web Page เดียวกันตลอด จึงสร้าง HTTP Request Default เพื่อให้ง่ายต่อการเปลี่ยนแปลง
      โดยคลิกขวาที่ Test Pane เลือก Add > Config Element > HTTP Request Default
    2. ใน HTTP Request Default กรอก
      Server Name or IP
      Port Number
      Path ตามต้องการ
      เช่น ต้องการทดสอบ http://192.168.107.107:80/wordpress/?p=4
    3. คลิกขวาที่ Test Plan เลือก Add > Threads (Users) > Thread Group
    4. กรอก Name และ Number of Threads (users)
      ในตัวอย่างนี้ ตั้งค่า Number of Threads (users) เป็น 10 และ Ramp-Up Period (in seconds) เป็น 1 เพราะต้องการให้ทดสอบระบบว่า เมื่อ มีผู้ใช้ใช้งานพร้อมกัน 10 คนในวินาทีเดียวกันนั้น ระบบจะตอบสนองอย่างไร
    5. คลิกขวาที่ Thread Group นี้ (ตอนนี้จะเปลี่ยนชื่อจาก Thread Group เป็น 10 แล้ว) แล้วเลือก Add > Sampler > Http Request
    6. ในส่วนนี้ ไม่ต้องแก้ไขอะไร โดย JMeter จะไปเอาค่าที่ตั้งไว้ใน HTTP Request Default ข้างต้นมาใช้
    7. ต่อไป เป็นส่วนของการแสดงผล
      คลิกขวาที่ Test Plan เลือก Add > Listener > Summary Report
    8. ต่อไป ใส่ Timer เพื่อให้ระบบ หยุดพักการทดสอบ เมื่อทำแต่ละ Thread Group เสร็จ เป็นเวลา 10 วินาที ก่อนจะเริ่ม Thread Group ต่อไป
      คลิกขวาที่ Test Plan เลือก Add > Timer > Constant Timer 
      แล้วใส่ค่า 10000 milliseconds หรือ 10 วินาที
    9. Save บ้าง อะไรบ้าง
    10. ในที่นี้ ต้องการทดสอบที่ 10 Users แล้วไป 20 Users ไป จนกระทั่ง 100 Users
      ก็ให้ทำการ Duplicate ตัว Thread Group ที่ชื่อ 10 ขึ้นมา

      ล้วแก้ Name กับ Number of Threads (users) เป็น 20

      แล้วทำซ้ำไปเรื่อยๆ จนได้จำนวนที่ต้องการ (เช่น 10 ถึง 100 เป็นต้น)
    11. สุดท้าย ทำการกำหนดให้ JMeter ทำงานทีละ Thread ตามลำดับ
      โดยการ คลิกที่ Test Plan
      แล้ว เลือก Run Thread Groups consecutively (i.e.run groups one at a time)
    12. ต่อไปก็ทำการทดสอบ
      ให้คลิก Summary Report
      เลือก Include group name in label
      แล้วคลิกปุ่ม Run
    13. ก็จะได้รายงานผล

      สามารถ Save Table Data เป็น .csv

      เอาไป Plot Graph ให้สวยงามได้

    Reference:

    [1] https://msdn.microsoft.com/en-us/library/bb924356.aspx