วิธีการติดตั้ง Elasticsearch, Logstash และ Kibana (ELK Stack) บน CentOS/RHEL 7
หากคุณเป็นคนที่หรือเคยมีหน้าที่ตรวจสอบและวิเคราะห์บันทึกของระบบใน Linux คุณจะรู้ว่างานดังกล่าวจะกลายเป็นฝันร้ายได้หากมีการตรวจสอบบริการหลายรายการพร้อมกัน
ในอดีตที่ผ่านมา งานดังกล่าวจะต้องดำเนินการด้วยตนเองเป็นส่วนใหญ่ โดยบันทึกแต่ละประเภทจะได้รับการจัดการแยกกัน โชคดีที่การรวมกันของ Elasticsearch, Logstash และ Kibana บนฝั่งเซิร์ฟเวอร์ พร้อมด้วย Filebeat บนไคลเอนต์ ทำให้งานยากๆ ที่เคยยากๆ ดูเหมือนการเดินเล่นในสวนสาธารณะในปัจจุบัน
คอมโพเนนต์สามองค์ประกอบแรกเรียกว่าสแต็ก ELK ซึ่งมีวัตถุประสงค์หลักเพื่อรวบรวมบันทึกจากเซิร์ฟเวอร์หลายเครื่องในเวลาเดียวกัน (หรือที่เรียกว่าการบันทึกแบบรวมศูนย์)
การอ่านที่แนะนำ: 4 เครื่องมือตรวจสอบและจัดการบันทึกโอเพ่นซอร์สที่ดีสำหรับ Linux
เว็บอินเตอร์เฟสที่ใช้ Java ในตัวช่วยให้คุณตรวจสอบบันทึกได้อย่างรวดเร็วเพียงเหลือบมอง เพื่อการเปรียบเทียบและการแก้ไขปัญหาที่ง่ายขึ้น บันทึกของไคลเอ็นต์เหล่านี้จะถูกส่งไปยังเซิร์ฟเวอร์กลางโดย Filebeat ซึ่งสามารถอธิบายได้ว่าเป็นตัวแทนจัดส่งบันทึก
เรามาดูกันว่าชิ้นส่วนทั้งหมดนี้เข้ากันได้อย่างไร สภาพแวดล้อมการทดสอบของเราจะประกอบด้วยเครื่องดังต่อไปนี้:
Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.
โปรดทราบว่าค่า RAM ที่ระบุในที่นี้ไม่ใช่ข้อกำหนดเบื้องต้นที่เข้มงวด แต่เป็นค่าที่แนะนำสำหรับการนำสแต็ก ELK ไปใช้งานบนเซิร์ฟเวอร์กลางได้สำเร็จ RAM ที่น้อยลงบนไคลเอนต์จะไม่สร้างความแตกต่างมากนัก ถ้ามี
การติดตั้ง ELK Stack บนเซิร์ฟเวอร์
เริ่มต้นด้วยการติดตั้งสแต็ก ELK บนเซิร์ฟเวอร์ พร้อมด้วยคำอธิบายสั้นๆ ว่าแต่ละส่วนประกอบทำอะไร:
- Elasticsearch จัดเก็บบันทึกที่ไคลเอ็นต์ส่งมา
- Logstash ประมวลผลบันทึกเหล่านั้น
- Kibana มีเว็บอินเทอร์เฟซที่จะช่วยให้เราตรวจสอบและวิเคราะห์บันทึก
ติดตั้งแพ็คเกจต่อไปนี้บนเซิร์ฟเวอร์กลาง ก่อนอื่น เราจะติดตั้ง Java JDK เวอร์ชัน 8 (อัปเดต 102 ซึ่งเป็นเวอร์ชันล่าสุดในขณะที่เขียนบทความนี้) ซึ่งเป็นการขึ้นต่อกัน ของส่วนประกอบ ELK
คุณอาจต้องการตรวจสอบก่อนในหน้าดาวน์โหลด Java ที่นี่ เพื่อดูว่ามีการอัปเดตที่ใหม่กว่าหรือไม่
yum update
cd /opt
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm
ถึงเวลาตรวจสอบว่าการติดตั้งเสร็จสมบูรณ์หรือไม่:
java -version
หากต้องการติดตั้ง Elasticsearch, Logstash และ Kibana เวอร์ชันล่าสุด เราจะต้องสร้างที่เก็บข้อมูลสำหรับ yum ด้วยตนเอง ดังต่อไปนี้:
เปิดใช้งานพื้นที่เก็บข้อมูล Elasticsearch
1. นำเข้าคีย์ GPG สาธารณะของ Elasticsearch ไปยังตัวจัดการแพ็คเกจ rpm:
rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
2. แทรกบรรทัดต่อไปนี้ลงในไฟล์การกำหนดค่าที่เก็บ elasticsearch.repo
:
[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
3. ติดตั้งแพ็คเกจ Elasticsearch
yum install elasticsearch
เมื่อการติดตั้งเสร็จสมบูรณ์ คุณจะได้รับแจ้งให้เริ่มและเปิดใช้งาน elasticsearch:
4. เริ่มต้นและเปิดใช้บริการ
systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch
5. อนุญาตการรับส่งข้อมูลผ่านพอร์ต TCP 9200 ในไฟร์วอลล์ของคุณ:
firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent
6. ตรวจสอบว่า Elasticsearch ตอบสนองต่อคำของ่ายๆ ผ่าน HTTP หรือไม่:
curl -X GET http://localhost:9200
ผลลัพธ์ของคำสั่งข้างต้นควรคล้ายกับ:
ตรวจสอบให้แน่ใจว่าคุณทำตามขั้นตอนข้างต้นแล้วดำเนินการต่อด้วย Logstash เนื่องจากทั้ง Logstash และ Kibana ใช้คีย์ Elasticsearch GPG ร่วมกัน จึงไม่จำเป็นต้องนำเข้าใหม่ก่อนที่จะติดตั้งแพ็คเกจ
การอ่านที่แนะนำ: จัดการบันทึกของระบบ (กำหนดค่า หมุน และนำเข้าสู่ฐานข้อมูล) ใน CentOS 7
เปิดใช้งานพื้นที่เก็บข้อมูล Logstash
7. แทรกบรรทัดต่อไปนี้ลงในไฟล์การกำหนดค่าที่เก็บ logstash.repo
:
[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
8. ติดตั้งแพ็คเกจ Logstash:
yum install logstash
9. เพิ่มใบรับรอง SSL ตามที่อยู่ IP ของเซิร์ฟเวอร์ ELK ที่บรรทัดต่อไปนี้ด้านล่างส่วน [ v3_ca ]
ใน /etc/pki/tls/openssl.cnf
:
[ v3_ca ]
subjectAltName = IP: 192.168.0.29
10. สร้างใบรับรองที่ลงนามด้วยตนเองซึ่งมีอายุ 365 วัน:
cd /etc/pki/tls
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
11. กำหนดค่า Logstash ไฟล์อินพุต เอาต์พุต และตัวกรอง:
อินพุต: สร้าง /etc/logstash/conf.d/input.conf
และแทรกบรรทัดต่อไปนี้ลงไป นี่เป็นสิ่งจำเป็นสำหรับ Logstash ในการ “เรียนรู้ ” วิธีการประมวลผลจังหวะที่มาจากไคลเอนต์ ตรวจสอบให้แน่ใจว่าเส้นทางไปยังใบรับรองและคีย์ตรงกับเส้นทางที่ถูกต้องตามที่ระบุไว้ในขั้นตอนก่อนหน้า:
input {
beats {
port => 5044
ssl => true
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
ไฟล์เอาต์พุต (/etc/logstash/conf.d/output.conf
):
output {
elasticsearch {
hosts => ["localhost:9200"]
sniffing => true
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
ไฟล์ตัวกรอง (/etc/logstash/conf.d/filter.conf
) เราจะบันทึกข้อความ syslog เพื่อความง่าย:
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGLINE}" }
}
date {
match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
12. ตรวจสอบไฟล์การกำหนดค่า Logstash
service logstash configtest
13. เริ่มต้นและเปิดใช้งาน logstash:
systemctl daemon-reload
systemctl start logstash
systemctl enable logstash
14. กำหนดค่าไฟร์วอลล์เพื่ออนุญาตให้ Logstash รับบันทึกจากไคลเอนต์ (พอร์ต TCP 5044):
firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent
เปิดใช้งานพื้นที่เก็บข้อมูล Kibana
14. แทรกบรรทัดต่อไปนี้ในไฟล์การกำหนดค่าที่เก็บ kibana.repo
:
[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
15. ติดตั้งแพ็คเกจ Kibana:
yum install kibana
16. เริ่มต้นและเปิดใช้งาน Kibana
systemctl daemon-reload
systemctl start kibana
systemctl enable kibana
17. ตรวจสอบให้แน่ใจว่าคุณสามารถเข้าถึงเว็บอินเทอร์เฟซของ Kibana ได้จากคอมพิวเตอร์เครื่องอื่น (อนุญาตการรับส่งข้อมูลบนพอร์ต TCP 5601):
firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent
18. เปิด Kibana (http://192.168.0.29:5601
) เพื่อตรวจสอบว่าคุณสามารถเข้าถึงเว็บอินเทอร์เฟซได้:
เราจะกลับมาที่นี่หลังจากที่เราติดตั้งและกำหนดค่า Filebeat บนไคลเอนต์แล้ว
การอ่านที่แนะนำ: ตรวจสอบบันทึกเซิร์ฟเวอร์แบบเรียลไทม์ด้วยเครื่องมือ “Log.io ” ใน Linux
ติดตั้ง Filebeat บนเซิร์ฟเวอร์ไคลเอนต์
เราจะแสดงวิธีดำเนินการนี้ให้กับ ลูกค้า #1 (ทำซ้ำกับ ลูกค้า #2 หลังจากนั้น โดยเปลี่ยนเส้นทางหากใช้ได้กับการกระจายของคุณ)
1. คัดลอกใบรับรอง SSL จากเซิร์ฟเวอร์ไปยังไคลเอนต์:
scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/
2. นำเข้าคีย์ GPG สาธารณะ Elasticsearch ไปยังตัวจัดการแพ็คเกจ rpm:
rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
3. สร้างพื้นที่เก็บข้อมูลสำหรับ Filebeat (/etc/yum.repos.d/filebeat.repo
) ใน CentOS การแจกแจงตาม:
[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1
4. กำหนดค่าแหล่งที่มาเพื่อติดตั้ง Filebeat บน Debian และอนุพันธ์ของมัน:
aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update
5. ติดตั้งแพ็คเกจ Filebeat:
yum install filebeat [On CentOS and based Distros]
aptitude install filebeat [On Debian and its derivatives]
6. เริ่มต้นและเปิดใช้งาน Filebeat:
systemctl start filebeat
systemctl enable filebeat
กำหนดค่า Filebeat
คำเตือนที่นี่ การกำหนดค่า Filebeat จะถูกจัดเก็บไว้ในไฟล์ YAML ซึ่งต้องมีการเยื้องแบบเข้มงวด โปรดระวังสิ่งนี้เมื่อคุณแก้ไข /etc/filebeat/filebeat.yml
ดังต่อไปนี้:
- ใต้ เส้นทาง ระบุว่าไฟล์บันทึกใดที่ควร "จัดส่ง" ไปยังเซิร์ฟเวอร์ ELK
- ภายใต้ ผู้มุ่งหวัง:
input_type: log
document_type: syslog
ภายใต้ เอาต์พุต:
- ยกเลิกหมายเหตุบรรทัดที่ขึ้นต้นด้วย logstash
- ระบุที่อยู่ IP ของเซิร์ฟเวอร์ ELK และพอร์ตที่ Logstash กำลังฟังอยู่ใน โฮสต์
- ตรวจสอบให้แน่ใจว่าเส้นทางไปยังใบรับรองชี้ไปยังไฟล์จริงที่คุณสร้างในขั้นตอนที่ 1 (ส่วน Logstash) ด้านบน
ขั้นตอนข้างต้นแสดงไว้ในภาพต่อไปนี้:
บันทึกการเปลี่ยนแปลง จากนั้นรีสตาร์ท Filebeat บนไคลเอนต์:
systemctl restart filebeat
เมื่อเราทำตามขั้นตอนข้างต้นกับลูกค้าเสร็จแล้ว ก็สามารถดำเนินการต่อได้เลย
การทดสอบ Filebeat
เพื่อตรวจสอบว่าสามารถส่งและรับบันทึกจากไคลเอนต์ได้สำเร็จ ให้รันคำสั่งต่อไปนี้บนเซิร์ฟเวอร์ ELK:
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
ผลลัพธ์ควรคล้ายกับ (สังเกตว่าข้อความจาก /var/log/messages และ /var/log/secure ได้รับจาก client1 อย่างไร และ ลูกค้า2):
มิฉะนั้น ให้ตรวจสอบไฟล์การกำหนดค่า Filebeat เพื่อดูข้อผิดพลาด
journalctl -xe
หลังจากพยายามรีสตาร์ท Filebeat จะนำคุณไปยังบรรทัดที่ละเมิด
การทดสอบคิบานะ
หลังจากที่เราได้ตรวจสอบแล้วว่าลูกค้าจัดส่งบันทึกและได้รับบนเซิร์ฟเวอร์เรียบร้อยแล้ว สิ่งแรกที่เราจะต้องทำใน Kibana คือการกำหนดค่ารูปแบบดัชนีและตั้งเป็นค่าเริ่มต้น
คุณสามารถอธิบายดัชนีว่าเป็นฐานข้อมูลแบบเต็มในบริบทฐานข้อมูลเชิงสัมพันธ์ เราจะเลือกใช้ filebeat-*
(หรือคุณสามารถใช้เกณฑ์การค้นหาที่แม่นยำยิ่งขึ้นตามที่อธิบายไว้ในเอกสารอย่างเป็นทางการ)
ป้อน filebeat-*
ใน ชื่อดัชนี หรือ รูปแบบ จากนั้นคลิก สร้าง:
โปรดทราบว่าคุณจะได้รับอนุญาตให้ป้อนเกณฑ์การค้นหาที่มีรายละเอียดมากขึ้นในภายหลัง จากนั้น คลิกดาวในสี่เหลี่ยมสีเขียวเพื่อกำหนดค่าเป็นรูปแบบดัชนีเริ่มต้น:
สุดท้ายนี้ ในเมนู ค้นพบ คุณจะพบช่องต่างๆ ที่จะเพิ่มลงในรายงานการแสดงภาพบันทึก เพียงวางเมาส์เหนือสิ่งเหล่านั้นแล้วคลิก เพิ่ม:
ผลลัพธ์จะแสดงบริเวณส่วนกลางของหน้าจอดังที่แสดงด้านบน อย่าลังเลที่จะลองเล่น (เพิ่มและลบฟิลด์ออกจากรายงานบันทึก) เพื่อทำความคุ้นเคยกับ Kibana
ตามค่าเริ่มต้น Kibana จะแสดงบันทึกที่ได้รับการประมวลผลในช่วง 15 นาทีที่ผ่านมา (ดูมุมขวาบน) แต่คุณสามารถเปลี่ยนลักษณะการทำงานนั้นได้โดยเลือกกรอบเวลาอื่น:
สรุป
ในบทความนี้ เราได้อธิบายวิธีตั้งค่าสแตก ELK เพื่อรวบรวมบันทึกระบบที่ส่งโดยไคลเอนต์สองเครื่อง ได้แก่ เครื่อง CentOS 7 และเครื่อง Debian 8
ตอนนี้คุณสามารถดูเอกสารอย่างเป็นทางการของ Elasticsearch และค้นหารายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้การตั้งค่านี้เพื่อตรวจสอบและวิเคราะห์บันทึกของคุณได้อย่างมีประสิทธิภาพมากขึ้น
หากคุณมีคำถามใด ๆ อย่าลังเลที่จะถาม เราหวังว่าจะได้ยินจากคุณ.