ค้นหาเว็บไซต์

วิธีการติดตั้ง 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 บนเซิร์ฟเวอร์ พร้อมด้วยคำอธิบายสั้นๆ ว่าแต่ละส่วนประกอบทำอะไร:

  1. Elasticsearch จัดเก็บบันทึกที่ไคลเอ็นต์ส่งมา
  2. Logstash ประมวลผลบันทึกเหล่านั้น
  3. 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 ดังต่อไปนี้:

  1. ใต้ เส้นทาง ระบุว่าไฟล์บันทึกใดที่ควร "จัดส่ง" ไปยังเซิร์ฟเวอร์ ELK
  2. ภายใต้ ผู้มุ่งหวัง:
input_type: log
document_type: syslog
  1. ภายใต้ เอาต์พุต:

    1. ยกเลิกหมายเหตุบรรทัดที่ขึ้นต้นด้วย logstash
    2. ระบุที่อยู่ IP ของเซิร์ฟเวอร์ ELK และพอร์ตที่ Logstash กำลังฟังอยู่ใน โฮสต์
    3. ตรวจสอบให้แน่ใจว่าเส้นทางไปยังใบรับรองชี้ไปยังไฟล์จริงที่คุณสร้างในขั้นตอนที่ 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 และค้นหารายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้การตั้งค่านี้เพื่อตรวจสอบและวิเคราะห์บันทึกของคุณได้อย่างมีประสิทธิภาพมากขึ้น

หากคุณมีคำถามใด ๆ อย่าลังเลที่จะถาม เราหวังว่าจะได้ยินจากคุณ.