Sirisoft

    ELK Stack on Docker Container

    ELK Stack คืออะไร ?

    ELK นั้นย่อมาจาก Elasticsearch, Logstash, Kibana ซึ่งเป็น Application open source 3 ตัว ซึ่งเราจะมองเจ้า app 3 ตัวนี้เป็นกองเดียวกันเพราะส่วนใหญ่จะนำมาใช้งานร่วมกันโดยแต่ละตัวจะมีหน้าที่การทำงานดังนี้
    Elasticsearch นั้นเป็น NoSQL Database แบบ open-source สามารถใช้ RESTful ในการค้นหาข้อมูล
    Logstash ทำหน้าที่รวบรวม data จากหลายๆแหล่ง ไม่ว่าจะเป็น file .txt .csv หรือ database แล้วส่งเข้าไปยัง Elasticsearch
    Kibana นั้นทำหน้าที่เป็น Visualize ให้กับตัว Elasticsearch ให้ผู้ใช้สามารถนำข้อมูลมาวิเคราะห์อยู่ในรูปของ charts, graphs และอื่นๆ

    ประโยชน์ของการใช้งาน ELK Stack

    สมมุติว่าเรามีชุดข้อมูลอยู่ชุดนึง ซึ่งมันมีแต่ตัวหนังสือเป็นพันๆหมื่นๆบรรทัด จะนำข้อมูลมาวิเคราะห์ก็อาจจะทำได้ยากลำบาก การที่เรานำ ELK มาประยุกต์ใช้สามารถทำให้เราวิเคราะห์ข้อมูลได้ง่ายขึ้น เห็นเป็นรูปภาพ ง่ายต่อการเอาไปนำเสนอ หลักการในการใช้งานก็คือ ใช้ Logstash เพื่อแปลงข้อมูลให้อยู่ในรูปแบบที่เหมาะสมแล้วส่งเข้าไปยัง Elasticsearch และใช้ Kibana ในการสร้างกราฟเพื่อวิเคราะห์ข้อมูลต่างๆ

    การใช้งาน ELK Stack บน Docker Container

    ซึ่งวันนี้ผมจะมาแนะนำการใช้ ELK แบบ Container ผ่าน OS ที่ชื่อว่า CentOS กัน สำหรับใครที่ยังไม่รู้จักเทคโนโลยี Container ผมมี Blog ให้ความรู้เกี่ยวกับ container มาแนะนำ และในบทความนี้ต้องมีความรู้ Docker Container พื้นฐานสักหน่อยนะครับ

    การใช้ ELK แบบ container เราจะต้องมี images ก่อนซึ่งวิธี download images มาก็ง่ายนิดเดียวเพียงแค่ใช้คำสั่ง

    $ docker pull <name-ตามที่เว็บระบุไว้>

    หรืออาจจะใช้คำสั่ง docker-compose จัดการให้ โดยผมจะให้ docker-compose.yml แบบเบื้องต้นไว้ให้ หรือ อยากได้ข้อมูลเพิ่มเติมให้ดู

    version: "3.0"services:  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.2.2
    ports:
    - 9200:9200
    - 9300:9300
    container_name: elasticsearch
    kibana:
    image: docker.elastic.co/kibana/kibana:6.2.2
    ports:
    - 5601:5601
    container_name: kibana
    links:
    - elasticsearch:elasticsearch

    ซึ่ง docker-compose.yml นี้จะทำหน้าที่ download images และสร้างเป็น container ให้อัตโนมัติพร้อมทั้งกำหนด port และตั้งชื่อ container ให้ด้วย

    วิธีใช้งาน docker-compose.yml เราต้องไปอยู่ใน directory ที่มีไฟล์นี้แล้วใช้คำสั่ง

    $ docker-compose up -d 

    เราสามารถดู log ได้ว่า container ของเรารันขึ้นมาสำเร็จหรือไม่โดยใช้คำสั่ง

    $ docker logs -f elasticsearch
    $ docker logs -f kibana

    อาจจะเจอปัญหา vm.max_map_count ไม่พอเนื่องจาก Elasticsearch ใช้ Virtual Memory มากขึ้น โดยปกติแล้วค่า Default จะอยู่ที่ประมาณ 65530 ให้ใช้คำสั่ง

    $ sysctl -w vm.max_map_count=262144

    หรืออยากแก้ถาวรให้ไปที่ /etc/sysctl.conf แล้วใส่ vm.max_map_count=262144 หลังจากนั้นพิมคำสั่ง เพื่อให้อ่านค่าในไฟล์ที่เราเขียน

    $ sysctl -p

    ในกรณีที่ไม่มีปัญหาใดๆ เราสามารถเข้าดูหน้า dashboard ได้ผ่าน ip เครื่องที่ลง kibana โดยเข้าผ่าน web browser http://<ip>:5601

    หน้า home บน kibana

    เราสามารถ เพิ่ม ลบ หรือเรียกดูข้อมูลบน Elasticsearch ได้ผ่านหน้า Dev Tools โดยใช้ คำสั่งต่างๆ

    หน้า Dev Tools บน kibana

    หรือจะดูข้อมูลที่เรามีใน Elasticsearch ผ่านหน้า Discover

    หน้า Discover บน kibana

    ตัว Elasticsearch นั้นจะเก็บข้อมูลอยู่ในรูปแบบ JSON โดยบางหัวข้อนั้นก็จะคล้ายๆกับ Relational DB แต่มีชื่อที่เรียกต่างกันออกไปดังนี้

    ข้อแตกต่างระหว่าง Relational DB กับ Elasticsearch

    และบน kibana เราสามารถสร้าง dashboard เพื่อวิเคราะห์ข้อมูลต่างๆ ที่มีอยู่ใน Elasticsearch เพื่อให้เห็นภาพได้ง่ายขึ้น

    หน้า Dashboard บน kibana แสดงกราฟข้อมูลของรถยนต์รุ่นต่างๆ

    ส่วนอันนี้เป็นตัวอย่างหน้า Dashboard โดยนำเอา access log ของ WebLogic มา plot graph ต่างๆซึ่งเราสามารถดูได้ว่าช่วงไหนที่มีการเข้าหน้าเว็บไม่ได้(404)

    หน้า Dashboard บน kibana แสดงกราฟ access log ของ weblogic

    ในบทความนี้ผมยังไม่ได้พูดถึงการนำข้อมูลเข้า Elasticsearch ซึ่งผมจะเขียนไว้ให้ในบทความถัดไป ซึ่งจะพูดเกี่ยวกับการใช้ Logstash ในการนำข้อมูลจากที่ต่างๆที่เราเก็บไว้หลายๆรูปแบบ ส่งเข้า Elasticsearch โดยไม่ต้องเสียเวลาในการเพิ่มข้อมูลเองที่ละ record ถ้าบทความนี้ผิดพลาดประการใดก็ขออภัยด้วยนะครับ

    Sirisoft

    Sirisoft Company Limited (Thailand)

    Noparat Phairojpattanakul

    Written by

    Software Engineer / Middleware @ Sirisoft Co, Ltd.

    Sirisoft

    Sirisoft

    Sirisoft Company Limited (Thailand)

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade