[ELK] Tìm hiểu về filebeat – Phần 5

Tác giả: 29/03/2023

ELK stack sử dụng filebeat có tác dụng như agent giúp đẩy log từ client về ELK server và hiển thị lên Kibana. Trong bài viết này, Nhân Hòa sẽ giới thiệu một vài điểm đáng lưu ý về Filebeat.

1. Giới thiệu chung về Beats

  • Beats là những data shipper mã nguồn mở mà ta sẽ cài đặt như các agent trên các server mà chúng ta cần thu thập các sự kiện để gửi các kiểu dữ liệu khác nhau tới Elasticsearch. Beats có thể gửi dữ liệu trực tiếp tới Elasticsearch hay tới Logstash

  • Beats là 1 platform trong đó các project nhỏ sinh ra thực hiện trên từng loại dữ liệu nhất định

  • ELK cần sử dụng các “beat” để làm shipper giúp gửi các loại dữ liệu từ client tới Server

  • Các beat index pattern cần được cài đặt trên cả ELK server và các client. Trên ELK server, các beat sẽ kết hợp với các thành phần để lọc dữ liệu, đánh chỉ mục, hiển thị

  • Một số beats pattern thường được dùng là:

    • Packetbeat: thực hiện gửi dữ liệu được capture từ các port về server
    • Topbeat: như là 1 monitor agent, giúp chúng ta có thể thu thập các thông tin về phần cứng như là CPU, RAM
    • Filebeat: giúp vận chuyển các log từ client về server
    • Winlogbeat: giúp vận chuyển event log từ các client là máy OS Windows
    • Metricbeat: thu thập các dữ liệu từ hệ điều hành, các dịch vụ như apache, HAProxy, MongoDB, Nginx,…
  • Mô hình beats platform

  • Trong các beats pattern được kể ở trên thì filebeat thường được ưu tiên sử dụng, tuy nhiên filebeat vẫn còn 1 số hạn chế cần lưu ý khi sử dụng như:
    • Khó khăn đối với người mới sử dụng cú pháp YAML
    • Nếu cấu hình quá nhiều file log cần đẩy về thì tệp filebeat registry sẽ phình to rất nhanh do cần dung lượng để lưu trữ từng trạng thái của từng dòng log
    • Không nên cấu hình filebeat quét các filelog nhỏ hơn 1s bởi vì điều này sẽ khiến cho filebeat chiếm 1 lượng CPU đáng kể

2. Cách thức hoạt động

  • Khi khởi động filebeat, nó sẽ khởi chạy 1 hay nhiều prospector, tìm kiếm các đường dẫn của tập tin mà ta đã khai báo. Với mỗi tập tin log mà prospector tìm thấy được, filebeat sẽ khởi chạy 1 harvester. Mỗi 1 harvester đọc 1 tập tin log và gửi các bản tin log này khi có dữ liệu mới tới spooler. Spooler là nơi tổng hợp các sự kiện và dữ liệu đã tổng hợp được tới output mà ta đã cấu hình trên filebeat

  • Cấu trúc bên trong filebeat

3. Cấu hình filebeat từ client Ubuntu về ELK stack

  • Trên client Ubuntu chúng ta thực hiện cài đặt GPG keys từ Elastic và thêm Elastic repo
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

cat > /etc/yum.repos.d/elastic.repo << EOF
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
  • Cài đặt filebeat
yum install filebeat-6.2.4 -y
  • Enable và start filebeat
chkconfig --add filebeat
service filebeat start
  • Backup file cấu hình của filebeat
cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.orig
rm -rf /etc/filebeat/filebeat.yml
touch /etc/filebeat/filebeat.yml
  • Tạo thư mục lưu trữ debug từ filebeat
mkdir /var/log/filebeat
  • Thêm vào /etc/filebeat/filebeat.yml cấu hình như sau
filebeat:
prospectors:
    -
    paths:
        - /var/log/*.log
    encoding: utf-8
    input_type: log
    fields:
        level: debug
    document_type: syslog
registry_file: /var/lib/filebeat/registry
output:
logstash:
# Thông số hosts => là địa chỉ máy chủ ELK
    hosts: ["IP-ELK:5044"]
    worker: 1
    bulk_max_size: 2048
logging:
to_syslog: false
to_files: true
files:
    path: /var/log/filebeat
    name: filebeat
    rotateeverybytes: 1048576000 # = 1GB
    keepfiles: 7
selectors: ["*"]
level: info

4. Cấu hình filebeat từ client CentOS về ELK stack

  • Trên client CentOS thực hiện thêm repo Elastic
cat > /etc/yum.repos.d/elastic.repo << EOF
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
  • Cài đặt filebeat
yum install filebeat-6.2.4 -y
  • Backup file cấu hình của filebeat
cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.orig
rm -rf /etc/filebeat/filebeat.yml
touch /etc/filebeat/filebeat.yml
  • Thêm vào /etc/filebeat/filebeat.yml cấu hình như sau
cat > /etc/filebeat/filebeat.yml << EOF
filebeat:
  prospectors:
    - paths:
      - /var/log/httpd/*_log
      encoding: utf-8
      type: log
      fields:
        type: apache2
      enabled: true
    - paths:
      - /var/log/secure
  registry_file: /var/lib/filebeat/registry
output.logstash:
    hosts: ["103.170.123.34:5044"]
    worker: 2
    bulk_max_size: 2048
    ttl: 120
    pipelining: 0
    username: "beats_system"
    password: "cxLfA6RbsPVmWwB1kQoU"
setup.kibana:
  host: "103.170.123.34:5601"
  username: "kibana"
  password: "j0pTj5k5dK5KVByQeJRD"
setup.template.name: "filebeat"
setup.template.pattern: "filebeat-*"
index: "filebeat-web-%{+yyyy.MM.dd}"
logging:
  to_syslog: false
  to_files: true
  files:
    path: /var/log/filebeat
    name: filebeat
    rotateeverybytes: 1048576000 # = 1GB
    keepfiles: 7
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
selectors: ["*"]
level: info
EOF
  • Khởi động lại filebeat
systemctl start filebeat
systemctl enable filebeat

5. Cấu hình logstash

  • Tạo file config của logtash để thiết lập input và output
touch /etc/logstash/conf.d/02-logstash.conf
  • Thêm vào file cấu hình etc/logstash/conf.d/02-logstash.conf nội dung sau
input {
    beats {
            port => 5044
            ssl => false
          }
}

output {
    elasticsearch {
      hosts => ["103.170.123.34:9200"]
      manage_template => false
      user => "elastic"
      password => "hcqA2AIEI7Do5nmxAUjY"
      sniffing => false
      index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    }
}
  • Sau đó restart lại logstash
systemctl stop logstash
systemctl start logstash

6. Tạo Index trên Kibana để theo dõi các sự kiện được đẩy về

  • Truy cập vào kibana với port 5601 theo đường dẫn
IP-ELK:5601
  • Vào mục Management -> Index Pattern -> Create Index

  • Sau khi đã tạo index, ta có thể theo dõi log từ filebeat đẩy về

Kết luận

Vậy là sau 5 bài viết về ELK stack, chúng ta đã có cái nhìn cơ bản về cách hoạt động của bộ công cụ theo dõi log vô cùng mạnh mẽ này. Hãy tiếp tục theo dõi các bài viết khác của Nhân Hòa tại Wiki Nhân Hòa.

Chúc các bạn luôn may mắn và thành công trong công việc!

Trả lời