Category: Automation System

  • Ambari #01: ติดตั้ง Ambari Server

    Apache Ambari เป็นเครื่องมือที่ทำให้การจัดการ Hadoop ง่ายขึ้น [1] แต่การติดตั้ง Apache Ambari เองนั้น (จาก Apache Project) ก็มีความยุ่งยากเล็กน้อย เพราะต้อง Build Source เอง จึงมีบริษัท HortonWorks เค้าไปทำตัว Binary มาให้ download และติดตั้งได้ง่ายกว่า

    Ambari ประกอบด้วย Ambari Server และ Ambari Agent ซึ่ง Server จะเป็นตัวสั่งการให้ติดตั้ง Hadoop Component ต่างๆลงไปบน Agent

    ในบทความนี้ จะขอนำเสนอการติดตั้ง Ambari version 2.5.1 จาก HortonWorks ซึ่งจะทำงานกับ Hortonworks Data Platform (HDP)  2.6 โดยติดตั้งบน Ubuntu 16.04 ในส่วนของ “Ambari Server” [2]

    1. ติดตั้ง Ubuntu 16.04 Server 64bit
    2. สิ่งที่สำคัญมากคือ FQDN หรือการอ้างชื่อเต็มของ host ดังนั้น ในไฟล์ /etc/hosts บรรทัดแรกต้องเป็น Fully Qualified Domain Name เช่น (ห้ามเป็น localhost เด็ดขาด) และถ้าจะให้ดี ควรมี DNS Record บน Name Server ด้วย
      192.168.1.121   ambari01.example.com ambari01

      ต้องทดสอบใช้คำสั่ง

      hostname -f

      แล้วได้ชื่อ FQDN ถึงจะใช้งานได้
      UPDATE: ในการระบบทดสอบ ซึ่งประกอบด้วยเครื่องไม่เกิน 5 เครื่อง อาจจะใช้ /etc/hosts บันทึก IP Address และ FQDN ของทุกเครื่องใน Cluster และต้องสร้าง /etc/hosts ให้เหมือนกันทุกเครื่องด้วยเช่นกัน แต่หากต้องทำระบบขนาดใหญ่ แนะนำให้ใช้ DNS ซึ่งต้องทำ Reverse DNS ด้วย กล่าวคือ ต้อง nslookup 192.168.1.2 แล้วกลับมาเป็น ambari01.example.com ได้
      แต่หากไม่สามารถจัดการ DNS หลักขององค์กรได้ ก็พอจะใช้งาน dnsmasq ช่วยได้ โดยวิธีการติดตั้งและใช้งานมีดังนี้

       apt install dnsmasq

      แก้ไขไฟล์ /etc/dnsmasq.conf
      เพิ่มบรรทัดต่อไปนี้

      interface=eth0
      address=/ambari01.example.com/192.168.1.121
      ptr-record=121.1.168.192.in-addr.arpa,ambari01.example.com
      address=/ambari02.example.com/192.168.1.122
      ptr-record=122.1.168.192.in-addr.arpa,ambari02.example.com
      ....
      address=/ambari99.example.com/192.168.1.219
      ptr-record=219.1.168.192.in-addr.arpa,ambari99.example.com
      

      จากนั้น ให้แก้ไขไฟล์ /etc/network/interfaces ของทุกเครื่อง ให้ชี้มาที่ IP ของ Ambari Server ในที่นี้คือ 192.168.1.121
      ก็จะใช้งานได้อย่างราบรื่น

    3. ตั้งค่า Ambari Public Repository
      sudo su
      wget -O /etc/apt/sources.list.d/ambari.list http://public-repo-1.hortonworks.com/ambari/ubuntu16/2.x/updates/2.5.1.0/ambari.list
      apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD
      apt-get update -y
      sudo dpkg --configure -a
      echo never > /sys/kernel/mm/transparent_hugepage/enabled
      apt install -y ntp
      apt-cache showpkg ambari-server
    4. ติดตั้ง Ambari Server
      apt-get install -y ambari-server
    5. จากนั้นเป็นการ Setup
      ambari-server setup
      
      Customize user account for ambari-server daemon [y/n] (n)? n
      
      Checking JDK...
      [1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8
      [2] Oracle JDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7
      [3] Custom JDK
      ==============================================================================
      Enter choice (1): 1
      
      Do you accept the Oracle Binary Code License Agreement [y/n] (y)? y
      
      Enter advanced database configuration [y/n] (n)? n
      # Default PostgreSQL Database: ambari
      # Default Username/Password:   ambari/bigdata
    6. Start Ambari
      ambari-server start

    ต่อไป สามารถเปิดการทำงานของ Ambari Server จาก

    http://ambari01.example.com:8080
    Default Username/Password = admin/admin

     

    Reference:

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

    [2] https://docs.hortonworks.com/HDPDocuments/Ambari/Ambari-2.5.1.0/index.html

     

  • วิธีสร้าง Docker Swarm

    หลายคนคงจะได้ใช้งาน Docker มาแล้ว แต่อาจจะลองใช้งานบน 1 Physical Server กล่าวคือ สร้างหลายๆ container อยู่บนเครื่องคอมพิวเตอร์เครื่องเดียว

    >> ติดตั้ง docker 17.06.0 CE บน Ubuntu

    Docker Swarm เป็นเครื่องมือที่ติดมากับ Docker รุ่นตั้งแต่ 1.12 เป็นต้นมา (ปัจจุบัน ชื่อรุ่นคือ 17.06.0 CE) ก่อนอื่น มาตรวจสอบว่า เรากำลังใช้ Docker รุ่นไหนด้วยคำสั่ง

    docker version

    Docker Swarm ประกอบไปด้วย Master Node และ Worker Node โดยใน 1 Swarm สามารถมีได้ หลาย Master และ หลาย Worker

    ในตัวอย่างนี้ จะแสดงการเชื่อมต่อ Ubuntu 16.04 ทั้งหมด 4 เครื่อง เข้าไปใน 1 Swarm (ทุกเครื่องสามารถเชื่อมต่อถึงกันได้ และต่อ Internet ได้ และติดตั้ง Docker ไว้เรียบร้อยแล้ว)

    [Master Node]

    1. ใช้คำสั่งต่อไปนี้ เพื่อสร้าง Swarm Master Node บนเครื่องนี้
      docker swarm init

      จะได้ผลดังภาพ

    2. ให้ Copy คำสั่ง ตั้งแต่ “docker swarm join –token …..” เป็นต้นไป เพื่อเอาไปสั่งให้ Work Node เข้ามา Join ใน Swarm

    [Worker Node]

    นำคำสั่งจาก Master Node ข้างต้น มาใช้

    จากนั้น ทำเช่นเดียวกันนี้ กับ Worker Node ที่เหลือ (และหากในอนาคตต้องการเพิ่ม Worker Node อีก ก็เอาคำสั่งนี้ไปใช้)

    ตัวอย่างการนำไปใช้
    (หากสนใจ ลอง git clone https://github.com/nagarindkx/elk ไปดูได้)

    1. สร้าง “Stack File” ซึ่งจะคล้ายๆกับการสร้าง Compose File แต่มีรายละเอียดต่างกันเล็กน้อย
    2. ใช้คำสั่ง ต่อไปนี้ เพื่อสร้าง Stack ของ Software ให้กระจายไปใน Worker Nodes
      docker stack deploy -c $(pwd)/elk.yml k1

      ผลที่ได้

    3. วิธีดูว่า ตอนนี้มี Stack อะไรอยู่บ้าง ใช้คำสั่ง
      docker stack ls
      ผลที่ได้
    4. วิธีดูว่า ตอนนี้มีการไปสร้าง Container ไว้ที่ใดใน Docker Swarm บ้าง ด้วยคำสั่ง (สั่งการได้บน Master Node เท่านั้น)
      docker service ps k1
      ผลที่ได้
    5. ต่อไป อยากจะเพิ่ม Scale ให้บาง Service ใน Stack ใช้คำสั่ง
      docker service scale k1_elasticsearch=4
      ผลที่ได้

     

    ในตัวอย่างนี้ จะสามารถใช้งาน Kibana ซึ่งจากภาพจะเห็นได้ว่า อยู่ที่ Node “docker04” แต่เราสามารถเรียกใช้งานได้ที่ Master Node “docker01” ได้เลย เช่น Master Node มี IP เป็น 192.168.xxx.111 ที่ port 5601 ได้

    คร่าวๆแค่นี้ก่อนครับ

  • ELK #04

    คราวนี้มาติดตั้งบน Docker บ้าง

    1. ถ้าเครื่อง Server เป็น Ubuntu 16.04 ทำตามขั้นตอนนี้เพื่อให้สามารถใช้งาน Docker ได้
      วิธีการติดตั้ง Docker บน Ubuntu 16.04
    2. เนื่องจาก Elasticsearch 5.x ใช้ Virtual Memory มากขึ้น ลองใช้คำสั่งนี้ดูค่าปัจจุบัน
       sysctl vm.max_map_count

      ค่า Default น่าจะประมาณนี้
      vm.max_map_count = 65530 ให้ทำการเพิ่มด้วยคำสั่งนี้

      sudo -i
      sudo echo "vm.max_map_count=262144" >> /etc/sysctl.conf
      exit

      จากนั้นให้ทำการ Reboot

    3. ติดตั้ง docker image ของ sebp/elk ด้วยคำสั่ง
       sudo docker pull sebp/elk

      โดย Default จะได้ Lastest Version

    4. ใช้คำสี่งต่อไปนี้ เพื่อ Start ELK ขึ้นมา โดยเปิด port ให้ Kibana: 5601, Elasticsearch: 9200, Logstash: 5044 และทำงานเป็นแบบ Detach หรือ Background นั่นเอง
      sudo docker run -d -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk

      หรือถ้าจะใช้ Docker Compose ก็สามารถใช้งานด้วยวิธีการนี้
      เริ่มจาก ติดตั้ง Docker Compose ด้วยคำสั่ง

      sudo -i
      curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
      chmod +x /usr/local/bin/docker-compose
      exit

      จากนั้น สร้างไฟล์ /path/to/your/config/elk.yml เนื้อหาดังนี้

      elk:
       image: sebp/elk
       ports:
       - "5601:5601"
       - "9200:9200"
       - "5044:5044"

      จากนั้นก็ Start

      sudo /usr/local/bin/docker-compose -f /path/to/your/config/elk.yml  up -d elk

      หากต้องการให้ container ทำการ start ทุกครั้งที่ Reboot ใช้คำสั่ง

      sudo crontab -e

      แล้วใส่บรรทัดนี้ต่อท้ายไฟล์

      @reboot /usr/local/bin/docker-compose -f /home/mama/elk.yml up -d elk
    5. ทดสอบว่า Container ที่กำลังทำงานอยู่มีอะไรบ้าง
      sudo docker ps

      วิธีดูว่า มี Container อะไรบ้าง (ทั้งที่ทำงานและไม่ทำงาน)

      sudo docker ps -a

      วิธีดูว่าเกิดอะไรขึ้นกับ Container (ในที่นี้ ชื่อ elk)

      sudo docker logs elk
    6. ถึงจุดนี้ ก็สามารถใช้งาน Kibana ทาง web url: http://your.host:5601 ได้แล้ว

     

    Reference:

    https://elk-docker.readthedocs.io/

     

  • ELK #03

    วิธีการติดตั้ง Kibana บน Ubuntu 16.04

    1. ก่อนอื่น Update
      sudo apt -y update ; sudo apt -y upgrade
    2. ติดตั้ง Java JDK
      sudo apt -y install default-jdk
    3. Download และติดตั้ง
      wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.2-amd64.deb
      sudo dpkg -i kibana-5.4.2-amd64.deb
    4. จากนั้นแก้ไขไฟล์ /etc/kibana/kibana.yml
      เพิ่มบรรทัดสุดท้าย

      server.host: "192.168.xxx.yyy"
      elasticsearch.url: "http://your.elastic.host:9200"
    5. จากนั้น Start Service
      sudo service kibana start
    6. เปิด Web Browser ไปที่
      http://192.168.xxx.yyy:5601
  • ELK #02

    ขั้นตอนการติดตั้ง Logstash บน Ubuntu 16.04

    1. ก่อนอื่น Update
      sudo apt -y update ; sudo apt -y upgrade
    2. ติดตั้ง Java JDK
      sudo apt -y install default-jdk
    3. Download และติดตั้ง
      wget https://artifacts.elastic.co/downloads/logstash/logstash-5.4.2.deb
      sudo dpkg -i logstash-5.4.2.deb
    4. Start Logstash Service
      sudo service logstash start
    5. ต่อไป สร้าง Configuration ไว้ใน /etc/logstash/conf.d/
      เช่น จะสร้าง Pipeline ที่อ่านจาก File /tmp/test.log แล้ว ส่งไปที่ Elasticsearch โดยตรง
      ให้สร้างไฟล์ /etc/logstash/conf.d/file.conf ดังนี้

      input {
              file {
                      path => "/tmp/test.log"
                      type=> "test"
              }
      }
      output {
              file {
                      path => "/tmp/output.txt"
              }
      }
      
    6. เมื่อลองใช้คำสั่ง
       echo "$(date): New World" >> /tmp/test.log
      

      ก็จะปรากฏไฟล์ /tmp/output.txt ขึ้น

    7. ต่อไป ลองเปลี่ยน Output เป็น Elasticsearch โดยการสร้างไฟล์ /etc/logstash/conf.d/es.conf
      input {
              file {
                      path => "/tmp/test.log"
                      type=> "test"
              }
      }
      output {
              elasticsearch {
                      hosts => ["http://your.elastic.host:9200"]
              }
      }
      
      
    8. เมื่อลองใช้คำสั่ง
       echo "$(date): New World" >> /tmp/test.log
      

      ก็จะปรากฏบรรทัดใหม่ใน /tmp/output.txt และ มีการเขียนไปบน Elasticsearch ด้วย

    9. ลองเปิด Web Browser แล้วใช้คำสั่งต่อไปนี้
      http://your.elastic.host:9200/_cat/indices?v
      ก็จะได้ผลลัพธ์ประมาณนี้
    10. จากนั้น วิธีที่จะแสดงผลที่เก็บไว้ใน Elasticsearch ให้เปิด URL นี้
      http://your.elastic.host:9200/logstash-2017.06.24/_search?q=*
      ก็จะได้ผลลัพธ์ประมาณนี้

    แล้วยังไง ??? รอดูตอนต่อไป

  • ELK #01

    ELK = ElasticSearch + LogStash + Kibana

    วิธีการติดตั้ง ElasticSearch บน Ubuntu 16.04

    1. ก่อนอื่น Update
      sudo apt -y update ; sudo apt -y upgrade
    2. ติดตั้ง Java JDK
      sudo apt -y install default-jdk
    3. Download และติดตั้ง
      wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.2.deb
      sudo dpkg -i elasticsearch-5.4.2.deb
      sudo update-rc.d elasticsearch defaults 95 10
    4. แก้ไขไฟล์ /etc/elasticsearch/elasticsearch.yml โดยเพิ่มบรรทัดสุดท้าย
      cluster.name: my-cluster-name
      network.host: [_site_]
      node.name: ${HOSTNAME}
    5. เริ่มทำงาน
      sudo -i service elasticsearch start
    6. ทดสอบการทำงาน โดยใช้คำสั่ง
      curl -XGET “${HOSTNAME}:9200/?pretty”
    7. ดู Log ได้ที่
      sudo tail -f /var/log/elasticsearch/my-cluster-name.log
  • Juju #04 – วิธีทำให้ WordPress กระจายงานไปยัง MySQL Slave ด้วย HyperDB

    ต่อจาก Juju #03 – วิธีสร้าง Load Balance MySQL เมื่อมี MySQL Server มากกว่า 1 ตัว ซึ่งทำการ Replication กัน (ในตอนนี้ 2 ตัว คือ Master กับ Slave) ซึ่งให้ความสามารถในเรื่อง [1]

    • Data-Security : เมื่อข้อมูลถูก Replicate ไปที่ Slave แล้ว เราสามารถหยุดการทำงานของ Slave เพื่อทำการสำรองข้อมูลได้ โดยไม่กระทบประสิทธิภาพการทำงานของ Master
    • Analytics: ทำการวิเคราะห์ข้อมูลต่างๆได้ที่ Slave โดยไม่กระทบประสิทธิภาพการทำงานของ Master
    • Scale-Out Solutions: เมื่อมี Slaves หลายตัว ทำให้สามารถกระจายงานในด้าน Read เพื่อเพิ่มประสิทธิภาพ โดยการแก้ไขข้อมูล จะทำที่ Master เท่านั้น

    ในบทความนี้ จะกล่าวถึงวิธีการ Scale-Out Solutions ของ WordPress เท่านั้น โดยใช้ Plugin ชื่อ HyperDB

    HyperDB [2] เป็น Database Class ที่ใช้แทนที WordPress built-in database functions โดยจะทำให้ WordPress สามารถติดต่อกับ MySQL ได้หลายเครื่อง โดยที่สามารถกำหนดได้ว่าจะ Write ไปยัง Master และ Read จากทั้ง Master และ Slaves อีกทั้งยังสามารถ Failover ได้อีกด้วย

    วิธีการติดตั้ง HyperDB

    1. ที่ WordPress ใช้คำสั่ง
      wget https://downloads.wordpress.org/plugin/hyperdb.1.2.zip
      sudo apt-get install unzip
      sudo unzip hyperdb.1.2.zip
    2. ย้ายไฟล์ hyperdb/db-config.php ไปยังที่ Directory เดียวกันกับ wp-config.php (ในที่นี้คื่อ /var/www/)
      sudo cp hyperdb/db-config.php /var/www
    3. ย้ายไฟล์ hyperdb/db.php ไปยังที่ Directory wp-content (ในที่นี้คื่อ /var/www/wp-content)
      sudo cp hyperdb/db.php /var/www/wp-content/
    4. แก้ไขไฟล์ db-config.php (ในที่นี้คื่อ /var/www/db-config.php) [3] โดยค้นหาคำว่า DB_HOST ซึ่งควรจะปรากฏอยู่แค่ 2 แห่งในไฟล์ ให้ไปที่ชุดที่ 2 ซึ่งมีเนื้อหาประมาณนี้

      จากนั้นแก้ไข DB_HOST ให้เป็น DB_SLAVE_1
    5. ต่อไปก็ไปเพิ่ม define(‘DB_SLAVE_1′,’xxx.xxx.xxx.xxx’) ซึ่งไฟล์ wp-config.php หรือไม่ก็ wp-info.php (ในที่นี้อยู่ที่ /var/www/wp-info.php)
    6. เมื่อทดสอบใช้งาน พบว่า มี Query มาทั้งที่ master และ slave
      ในภาวะว่าง

      ในภาวะมีงานเข้ามา
    7. ทดสอบเพิ่มบทความใหม่ ชื่อ “This is my first article” พบว่า ระบบสามารถเขียนไปยัง Master แล้วสามารถส่งต่อไปให้ Slave ได้
    8. ต่อไป เพิ่ม mysql-slave2 เข้าไปใน Juju และสร้าง Relation เป็น master -> Slave เช่นกัน

      แล้วทำการเพิ่ม DB_SLAVE_2 เข้าไปใน db-config.php และ wp-info.php

    9. ก็จะพบว่าข้อมูลได้ Replicate ไปหา Slave2 แล้ว
    10. และ เมื่อทำการ query ข้อมูลก็พบว่า มีการกระจายคำสั่ง Read ไปทั้ง 3 เครื่อง

    References

    [1] https://dev.mysql.com/doc/refman/5.7/en/replication.html

    [2] https://th.wordpress.org/plugins/hyperdb/

    [3] https://www.digitalocean.com/community/tutorials/how-to-optimize-wordpress-performance-with-mysql-replication-on-ubuntu-14-04

  • วิธีใช้ Google Sites เพื่อแสดงรายงานผลการลงทะเบียนจาก Google Form

    ปัจจุบันการสร้างแบบฟอร์มการรับลงทะเบียนออนไลน์สามารถทำได้ง่ายๆโดยใช้ Google Form โดยวันนี้มีโจทย์ว่า ต้องการรับลงทะเบียนผู้ที่จะร่วมเดินทาง กำหนดว่า ต้องการเดินทางกับรถบัสหมายเลขใด (มี 3 คัน) และต้องการแสดงผลทันทีว่า แต่ละคันมีจำนวนคนเท่าไหร่แล้ว และ ใครบ้างที่เดินทางไปในรถบัสคันนั้น

    วิธีการคือ

    1. สร้าง Google Form เพื่อทำระบบรับลงทะเบียนตามปรกติ
      2559-11-03-10_08_062559-11-03-10_08_22-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%a5%e0%b8%b0%e0%b9%80%e0%b8%ad%e0%b8%b5%e0%b8%a2%e0%b8%94%e0%b8%9c%e0%b8%b9%e0%b9%89%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%87%e0%b8%84%e0%b9%8c
      2559-11-03-10_08_37-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%a5%e0%b8%b0%e0%b9%80%e0%b8%ad%e0%b8%b5%e0%b8%a2%e0%b8%94%e0%b8%9c%e0%b8%b9%e0%b9%89%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%87%e0%b8%84%e0%b9%8c
      2559-11-03-10_08_37-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%a5%e0%b8%b0%e0%b9%80%e0%b8%ad%e0%b8%b5%e0%b8%a2%e0%b8%94%e0%b8%9c%e0%b8%b9%e0%b9%89%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%87%e0%b8%84%e0%b9%8c
    2. ในส่วนของการสร้างแบบฟอร์ม ให้คลิกที่ RESPONSES แล้วคลิกที่รูป สี่เหลี่ยมสีเขียว (Google Sheets) 
      2559-11-03-14_21_05
    3. แล้วจัดรูปแบบให้เรียบร้อย เช่นต้องการจะซ่อน Column ใดบ้าง (จะใส่สี ก็ได้นะ)
      เสร็จแล้ว คลิกที่ปุ่ม Share
      2559-11-03-14_25_27
    4. กำหนดให้ Anyone with Link “Can View” แล้วคลิก Done
      2559-11-03-14_30_28
    5. สร้าง Google Sites และสร้างโครงสร้าง Page ต่างๆตามต้องการ
      2559-11-03-10_10_02-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence
    6. ในตัวอย่างนี้ จะสร้าง Page “รายชื่อ” เพื่อไว้ใช้แสดงผลการลงทะเบียน ว่า รถหมายเลขใด มีจำนวนกี่คนแล้ว และใครบ้าง
      ให้เลือก Insert > More gadgets
      แล้วคลิกที่ Public > Include gadget (Iframe)
      2559-11-03-14_39_23-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence 2559-11-03-14_39_45-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence 2559-11-03-14_39_55-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence
    7. จากนั้น มาใส่ URL กัน
      2559-11-03-14_40_09-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence
    8. ใส่ URL ตามนี้https://spreadsheets.google.com/tq?tqx=out:html&tq=select  L,count(B) group by L  label count(B) ‘จำนวน’&key=XXXXXXXXXXXXXXXXXX

      เพื่อให้แสดงผลว่า รถบัสหมายเลขใด มีจำนวนคนเท่าไหร่
      โดยที่ tq เป็น Query เขียนว่า select L, count(B) group by L label count(B) ‘จำนวน’
      คือการแสดงคอลัมน์ L และ นับจำนวนโดยการ count โดยจัดกลุ่มตามคอลัมน์ L
      นอกจากนั้นยัง label คอลัมน์ count(B) เป็นคำว่า “จำนวน”2559-11-03-15_44_37-%e0%b9%82%e0%b8%84%e0%b8%a3%e0%b8%87%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b8%96%e0%b8%a7%e0%b8%b2%e0%b8%a2%e0%b8%84%e0%b8%a7%e0%b8%b2%e0%b8%a1%e0%b8%ad%e0%b8%b2%e0%b8%a5%e0%b8%b1%e0%b8%a2

      ผลที่ได้คือ
      2559-11-03-15_48_55-search

      และ key=XXXXXXXXXXX นั้น ให้เอาค่าจาก

      2559-11-03-15_51_51

    9. ต่อไปให้แสดงผลรายชื่อทั้งหมด โดยสามารถแยกรายชื่อแต่ละคัน โดย
      Insert > Drive > Spreadsheet
      2559-11-03-15_50_46-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolenceแล้วเลือก Google Sheet ที่ต้องการ
      2559-11-03-15_57_14-%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad-condolence
    10. เมื่อดำเนินการเสร็จแล้ว ระบบก็จะสามารถแสดงผลการลงทะเบียนได้อัตโนมัติ
      2559-11-03-16_01_15-program-manager

     

  • เทคนิคการวัดความเร็วในการตอบอีเมลลูกค้า

    ถ้ามี KPI ที่ต้องทำให้สำเร็จคือ “ร้อยละของปัญหาที่ตอบกลับลูกค้าภายใน 2 วันทำการ”
    แล้ว … ช่องทางที่รับปัญหาจากลูกค้าคือ ทางอีเมล (ในที่นี้เป็นบริการอีเมลบนระบบของ Google Mail หรือ Gmail)
    โดยการตอบกลับ คือ การ Reply กลับไปหาลูกค้า
    เวลาที่นับคือ นับตั้งแต่เวลาที่อีเมลเข้ามาถึง จนกระทั่งมีการตอบกลับไปหาลูกค้าทางอีเมลฉบับแรก

    สำหรับคนที่ใช้ Google Mail หรือ Gmail อยู่ สามารถใช้ Google Sheets ทำรายงานได้ ตามขั้นตอนต่อไปนี้
    1. ไปที่ drive.google.com (ให้ Login ด้วย Account ที่ต้องการด้วย)
    2. สร้าง Google Sheets แล้วตั้งชื่อตามต้องการ เช่น Report
    3. ไปที่เมนู Tools > Script Editor
    2559-08-04 11_20_00-My Drive - Google Drive
    4. ตั้งชื่อ Project ว่า report แล้ววางโค๊ดต่อไปนี้ลงไป

     

    function reportResponseTime() {
    // ถ้าจะทำรายงานทั้ง Inbox ให้ uncomment บรรทัดต่อไปแทน
    //var threads = GmailApp.getInboxThreads();

    // ถ้าจะทำรายงานเฉพาะ Lable ที่เตรียมไว้ ในที่นี้ใช้ Label “support-psuemail”
    var threads = GmailApp.search(‘label:support-psuemail ‘);

    for (var i = 0; i < threads.length; i++) { // วนลูปแต่ละ Thread
    if (threads[i].getMessageCount() > 1) { // สนใจเฉพาะ Thread ที่มีการตอบกลับเท่านั้น
    var messages = threads[i].getMessages(); // Subject ของอีเมล
    var d1= messages[0].getDate().getTime(); // เวลาที่อีเมลเข้ามา
    var d2= messages[1].getDate().getTime(); // เวลาที่ตอบกลับฉบับแรก
    var diff = (d2-d1)/(1000*60*60); // ระยะเวลาหน่วยเป็น ชั่วโมง

    // เขียนต่อท้าย Sheet ที่กำลังใช้งาน
    SpreadsheetApp.getActiveSheet().appendRow([messages[0].getSubject(), messages[0].getDate(), messages[1].getDate(), diff])
    }
    }
    }

     

     

    2559-08-04 11_24_42-Clipboard

    5. คลิก Run > reportResponseTime
    (หากมีหน้าจอ Consense ต่างๆขึ้นมาให้ Allow ไป)
    6. ผลจะปรากฏใน Sheet ที่เปิดไว้
    2559-08-04 11_34_18-Report - Google Sheets
    7. จากนั้นสามารถเอาผลไปคำนวนต่อ เช่น ร้อยละของอีเมลที่ตอบสนองภายใน 48 ชั่วโมงหรือ 2 วัน เป็นต้น และสามารถตอบคำถามได้ว่า ทำไมบางฉบับใช้เวลาเกิน 48 ชั่วโมง (อาจจะเป็นเพราะติดเสาร์อาทิตย์เป็นต้น)

    *** กรุณาอ้างอิงด้วยนะครับ หากนำไปเผยแพร่ต่อ ***