- สำหรับติดตั้ง Elastic Search
- สำหรับติดตั้ง Fluentd
- สำหรับติดตั้ง Kibana
- สำหรับติดตั้ง Fluent-bit เพื่อทำตัวเป็น Log Forwarder
โดยขั้นตอนการติดตั้งผมจะทำเป็น Syntax Highlight อาจจะเป็นแบบยาว ๆ พิมพ์คำสั่งไปด้วยอธิบายไปด้วยนะครับ เริ่มกันเลยครับที่เครื่องเซิฟเวอร์ทุกเครื่องให้อัพเดท repository ให้เป็นรุ่นล่าสุด
Update repository ให้เรียบร้อย sudo apt -y update && sudo apt -y upgrade && sudo -y dist-upgrade sudo apt autoremove -y ...
ติดตั้ง Java 8 ลงบนเครื่อง sudo apt-get install -y apt-transport-https openjdk-8-jre-headless uuid-runtime pwgen vim ...
จากนั้นให้ download และติดตั้ง elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.deb จากนั้นให้ติดตั้งโดยพิมพ์ dpkg -i elasticsearch-6.6.1.deb (Reading database ... 102890 files and directories currently installed.) Preparing to unpack elasticsearch-6.6.1.deb ... /usr/bin/java Creating elasticsearch group... OK Creating elasticsearch user... OK Unpacking elasticsearch (6.6.1) ... Setting up elasticsearch (6.6.1) ... Created elasticsearch keystore in /etc/elasticsearch Processing triggers for systemd (237-3ubuntu10.13) ... Processing triggers for ureadahead (0.100.0-20) ... ...
หลังจากติดตั้งเสร็จก็ตั้งค่าให้กับ elasticsearch ครับ
พิมพ์ sudo vim /etc/elasticsearch/elasticsearch.yml ให้แก้ไขที่บรรทัดที่ 55 กับ 59 เป็นหมายเลข IP กับหมายเลข Port ที่ต้องการเปิดให้บริการ 55 network.host: 192.168.33.4 56 # 57 # Set a custom port for HTTP: 58 # 59 http.port: 9200 จากนั้นเซฟแล้วออกจากโปรแกรม แล้วพิมพ์คำสั่ง sudo systemctl enable elasticsearch.service sudo systemctl start elasticsearch.service sudo systemctl status elasticsearch.service จะได้ผลลัพธ์แบบนี้ ● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-02-25 08:34:23 UTC; 6s ago Docs: http://www.elastic.co Main PID: 20404 (java) Tasks: 17 (limit: 2319) CGroup: /system.slice/elasticsearch.service ├─20404 /usr/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Des.n └─20492 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller Feb 25 08:34:23 ISO-EFK-Stack-E systemd[1]: Started Elasticsearch. ...
จากนั้นให้ไปต่อที่เครื่องที่เป็น Kibana แล้วดำเนินการติดตั้ง Kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.1-amd64.deb dpkg -i kibana-6.6.1-amd64.deb Selecting previously unselected package kibana. (Reading database ... 102393 files and directories currently installed.) Preparing to unpack kibana-6.6.1-amd64.deb ... Unpacking kibana (6.6.1) ... Setting up kibana (6.6.1) ... Processing triggers for systemd (237-3ubuntu10.13) ... Processing triggers for ureadahead (0.100.0-20) ... ...
จากนั้นให้เข้าไปตั้งค่าให้ Kibana เชื่อมกับ elasticsearch โดยให้ดำเนินการตามนี้
พิมพ์ sudo vim /etc/kibana/kibana.yml ที่บรรทัดด้านล่างให้ตั้งค่าหมายเลข IP และหมายเลข Port รวมถึงดำเนินการเชื่อมต่อกับ elasticsearch โดยใส่หมายเลข IP และหมายเลข Port ของเครื่องที่เราติดตั้ง elasticsearch ไว้ก่อนหน้านี้ลงไปด้วยครับ 2 server.port: 5601 7 server.host: "192.168.33.5" 28 elasticsearch.hosts: ["http://192.168.33.4:9200"] เซฟแล้วออกจากโปรแกรมแล้วพิมพ์ sudo systemctl enable kibana.service sudo systemctl start kibana.service sudo systemctl status kibana.service จะได้ผลลัพธ์แบบนี้ ● kibana.service - Kibana Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-02-25 08:45:23 UTC; 13s ago Main PID: 17801 (node) Tasks: 11 (limit: 2319) CGroup: /system.slice/kibana.service └─17801 /usr/share/kibana/bin/../node/bin/node --no-warnings --max-http-header-size=65536 /usr/share/kibana/bin/../src/cli -c /etc/kibana/k Feb 25 08:45:23 ISO-EFK-Stack-K systemd[1]: Started Kibana. ...
ทดลองเข้าหน้า Kibana ผ่านทาง Web browser โดยเปิดโปรแกรม web browser ขึ้นมาแล้วพิมพ์หมายเลข IP:port ครับถ้าทำถูกต้องจะได้ผลลัพธ์ดังนี้ครับ
ให้คลิกที่ Explore on my own เนื่องจากเราจะนำเข้า Data มาเองนะครับเสร็จแล้วจะพบกับหน้า welcome ดังภาพด้านล่างครับ
จากนั้นเราจะไปติดตั้ง Fluentd กันครับไปที่เครื่อง Fluentd
curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-bionic-td-agent3.sh | sh ... Get:1 http://packages.treasuredata.com/3/ubuntu/bionic bionic/contrib amd64 td-agent amd64 3.3.0-1 [47.9 MB] Fetched 47.9 MB in 7s (7,149 kB/s) Selecting previously unselected package td-agent. (Reading database ... 102393 files and directories currently installed.) Preparing to unpack .../td-agent_3.3.0-1_amd64.deb ... Unpacking td-agent (3.3.0-1) ... Setting up td-agent (3.3.0-1) ... Adding system user `td-agent' (UID 111) ... Adding new group `td-agent' (GID 113) ... Adding new user `td-agent' (UID 111) with group `td-agent' ... Creating home directory `/var/lib/td-agent' ... Installing default conffile /etc/td-agent/td-agent.conf ... Processing triggers for libc-bin (2.27-3ubuntu1) ... Installation completed. Happy Logging! ...
เสร็จสิ้นการติดตั้ง Fluentd เราจะมาตั้งค่า Fluentd ให้เปิดช่องทางสำหรับรอรับ Log จากเครื่อง Agent กันครับ
***เนื่องจากตัว Syntax highlighter ของผมทำงานไม่น่ารักเท่าไรบรรทัดที่เป็น apache.** ให้จบแค่ตรงส่วนนี้นะครับไอ้ ="" ไม่เกี่ยวนะครับ
ที่เครื่อง Fluentd พิมพ์ sudo vim /etc/td-agent/td-agent.conf ที่ประมาณบรรทัดที่ 37-38 จะเป็นส่วนของการตั้งค่าการรับ log (จริง ๆ จะพิมพ์ตรงไหนก็ได้แต่ถ้าทำให้เป็นกลุ่มชัดเจนจะสะดวกเวลาเกิดปัญหาครับ) ให้เขียนเพิ่มดังนี้ 38 39 @type forward 40 port 5140 41 bind 0.0.0.0 42 43 4445 @type elasticsearch 46 host 192.168.33.4 47 port 9200 48 logstash_format true 49 เซฟแล้วออกจากโปรแกรม แล้วสั่งให้มันทำงานด้วยการพิมพ์ sudo systemctl enable td-agent.service sudo systemctl start td-agent.service sudo systemctl status td-agent.service จะได้ผลลัพธ์แบบนี้ ● td-agent.service - td-agent: Fluentd based data collector for Treasure Data Loaded: loaded (/lib/systemd/system/td-agent.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-02-25 08:16:02 UTC; 51min ago Docs: https://docs.treasuredata.com/articles/td-agent Main PID: 18137 (fluentd) Tasks: 11 (limit: 2319) CGroup: /system.slice/td-agent.service ├─18137 /opt/td-agent/embedded/bin/ruby /opt/td-agent/embedded/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/ └─18145 /opt/td-agent/embedded/bin/ruby -Eascii-8bit:ascii-8bit /opt/td-agent/embedded/bin/fluentd --log /var/log/td-agent/td-agent.log --d Feb 25 08:16:02 ISO-EFK-Stack-F systemd[1]: Starting td-agent: Fluentd based data collector for Treasure Data... Feb 25 08:16:02 ISO-EFK-Stack-F systemd[1]: Started td-agent: Fluentd based data collector for Treasure Data. ... หลังจากนั้นเราต้องทำการติดตั้ง plugin ของ fluentd เพื่อให้สามารถเชื่อมต่อไปยัง elasticsearch ได้โดยพิมพ์ sudo gem install msgpack sudo gem install fluent-plugin-elasticsearch จะได้ผลลัพธ์ดังนี้ Parsing documentation for multipart-post-2.0.0 Installing ri documentation for multipart-post-2.0.0 Parsing documentation for faraday-0.15.4 Installing ri documentation for faraday-0.15.4 Parsing documentation for elasticsearch-transport-6.1.0 Installing ri documentation for elasticsearch-transport-6.1.0 Parsing documentation for elasticsearch-api-6.1.0 Installing ri documentation for elasticsearch-api-6.1.0 Parsing documentation for elasticsearch-6.1.0 Installing ri documentation for elasticsearch-6.1.0 Parsing documentation for fluent-plugin-elasticsearch-3.2.3 Installing ri documentation for fluent-plugin-elasticsearch-3.2.3 Done installing documentation for yajl-ruby, cool.io, sigdump, serverengine, http_parser.rb, thread_safe, tzinfo, tzinfo-data, strptime, dig_rb, fluentd, excon, multi_json, multipart-post, faraday, elasticsearch-transport, elasticsearch-api, elasticsearch, fluent-plugin-elasticsearch after 10 seconds 19 gems installed ... เสร็จแล้วให้ restart service หนึ่งครั้งโดยพิมพ์ sudo systemctl restart td-agent.service แล้วตรวจดูว่า service ทำงานตามที่เราตั้งค่าแล้วหรือไม่โดยพิมพ์ netstat -anupl | grep 5140 udp 0 0 0.0.0.0:5140 0.0.0.0:* 21461/ruby ถ้าได้ผลลัพธ์ตามนี้ถือว่าเสร็จครับ
คราวนี้เราจะไปติดตั้ง Agent ให้ทำการ forward log มาที่เครื่อง Fluentd นะครับ
ที่เครื่องเซิฟเวอร์ที่เราต้องการส่ง log มาให้ Fluentd Server พิมพ์ wget -qO - https://packages.fluentbit.io/fluentbit.key | sudo apt-key add - sudo vim /etc/apt/sources.list ให้ไปที่บรรทัดสุดท้ายแล้วทำการเพิ่ม repository ของ fluent-bit เข้าไป deb https://packages.fluentbit.io/ubuntu/bionic bionic main เซฟแล้วออกจากโปรแกรมแล้วดำเนินการอัพเดท repository อีกครั้ง sudo apt -y update && sudo apt -y upgrade sudo apt install -y td-agent-bit จะได้ผลลัพธ์ตามนี้ Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: td-agent-bit 0 upgraded, 1 newly installed, 0 to remove and 34 not upgraded. Need to get 1,865 kB of archives. After this operation, 11.6 MB of additional disk space will be used. Get:1 https://packages.fluentbit.io/ubuntu/bionic bionic/main amd64 td-agent-bit amd64 1.0.4 [1,865 kB] Fetched 1,865 kB in 2s (805 kB/s) Selecting previously unselected package td-agent-bit. (Reading database ... 108636 files and directories currently installed.) Preparing to unpack .../td-agent-bit_1.0.4_amd64.deb ... Unpacking td-agent-bit (1.0.4) ... Setting up td-agent-bit (1.0.4) ... ...
จากนั้นให้เข้าไปตั้งค่าของ fluent-bit โดยให้พิมพ์
sudo vim /etc/td-agent-bit/td-agent-bit.conf ค้นหาบรรทัด [INPUT] แล้วแก้ค่าข้างในตามนี้ [INPUT] Name tail Path /var/log/apache2/access.log Tag apache.* Parser apache จากนั้นให้เพิ่ม [FILTER] Name record_modifier Match * Record host_param ${HOSTNAME} แล้วมองหาบรรทัด [OUTPUT] แล้วแก้หมายเลข IP ใหม่ [OUTPUT] Name forward Match * Host 192.168.33.6 Port 5142 จากนั้นเซฟแล้วออกจากโปรแกรม ทำการสั่งให้โปรแกรมทำงานพร้อมกับระบบโดยพิมพ์ sudo systemctl enable td-agent-bit.service sudo systemctl start td-agent-bit.service sudo systemctl status td-agent-bit.service จะได้ผลลัพธ์ดังนี้ ● td-agent-bit.service - TD Agent Bit Loaded: loaded (/lib/systemd/system/td-agent-bit.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-02-25 16:49:08 +07; 5s ago Main PID: 24049 (td-agent-bit) Tasks: 2 (limit: 2319) CGroup: /system.slice/td-agent-bit.service └─24049 /opt/td-agent-bit/bin/td-agent-bit -c //etc/td-agent-bit/td-agent-bit.conf ...
เป็นอันเสร็จพิธีในการติดตั้งและส่ง Log มานะครับเบื้องต้นผมทำการตั้งค่าให้ Agent ทำการไปอ่าน Apache log แล้วทำการส่งมาที่ Fluentd Server แล้วตัว Fluentd Server ก็จะทำการ forward log ต่อไปให้ elasticsearch ในรูปแบบของ logstash format นะครับทีนี้เราจะมาดู log กันนะครับว่าส่งมาถึงจริงรึเปล่าให้กลับไปที่โปรแกรม web browser ที่ได้ทดลองเปิด Kibana ที่เราลงไว้ก่อนหน้านี้ครับแล้วไปที่ Management คลิก Index Patterns ดังภาพครับ
ให้คลิกที่ Create index pattern ที่ช่อง text box ให้พิมพ์ logstash* ลงไปแล้วสังเกตว่ามันจะตรงกับชื่อของ index ที่เรามีอยุ่ซึ่ง index ตรงนี้ถูกส่งมาจากเครื่อง Fluentd Server นั่นเอง แล้วคลิก Next Step
เราจากนั้นให้คลิกที่ drop down list แล้วเลือก @timestamp เพื่อให้ใช้ฟิลด์ timestamp เป็นฟิลด์หลักในการแสดงผล เสร็จแล้วคลิก Create index pattern
จากนั้นเราจะเห็นผลลัพธ์ดังภาพด้านล่างเป็นอันเสร็จขั้นตอนการสร้าง index pattern
ให้ไปที่ discover ก็จะเห็นผลลัพธ์จากการที่เราส่ง log มาแล้ว
ถ้าใครไม่เห็นให้คลิกที่คำว่า logstash* ตามที่เราได้สร้างไว้ครับแล้วจะเห็น log ที่ส่งมาครับ
ถ้าทำได้ทั้งหมดตามนี้ถือเสร็จสิ้นขั้นตอนการติดตั้ง EFK Stack เรียบร้อยแล้วครับ ^ ^
No comments:
Post a Comment