Giám sát và phân tích nhật ký là một phần thiết yếu của cơ sở hạ tầng máy chủ hoặc container và hữu ích khi xử lý các ứng dụng phức tạp. Một trong những giải pháp ghi nhật ký phổ biến là ngăn xếp Elasticsearch, Fluentd và Kibana (EFK). Trước khi đi sâu hơn vào hướng dẫn, chúng ta hãy tìm hiểu về các thành phần của ngăn xếp.
Elasticsearch là một công cụ tìm kiếm theo thời gian thực, phân tán và có thể mở rộng cho phép tìm kiếm và phân tích toàn văn. Nó được sử dụng để lập chỉ mục và tìm kiếm qua lượng dữ liệu lớn. Nó thường được triển khai cùng với Kibana, một bảng điều khiển trực quan hóa dữ liệu mạnh mẽ cho Elasticsearch. Kibana cho phép bạn khám phá dữ liệu nhật ký Elasticsearch và xây dựng các bảng điều khiển và truy vấn để hiểu sâu hơn về ứng dụng của bạn. Fluentd thu thập, chuyển đổi và chuyển dữ liệu nhật ký đến phần phụ trợ Elasticsearch.
Trong hướng dẫn này, chúng ta sẽ cài đặt ngăn xếp EFK bằng Docker trên máy Ubuntu 22.04 và gửi nhật ký vùng chứa đến Kibana sau khi lọc và chuyển đổi chúng bằng Fluentd.
Kiểm tra trạng thái của tường lửa.
Bạn sẽ thấy nội dung tương tự như sau.
Cho phép HTTP và HTTPs ports.
Kiểm tra lại trạng thái để xác nhận.
Chạy lệnh sau để thêm Docker kho lưu trữ.
Cập nhật hệ thống để bao gồm kho lưu trữ của Docker.
Cài đặt Docker và Docker compose plugin.
Hướng dẫn này sẽ sử dụng plugin Docker Compose v2 thay vì nhị phân cũ. Do đó, lệnh chạy nó đã thay đổi từ
Docker chạy với các đặc quyền nâng cao nên bạn sẽ cần sử dụng
Biến
Để đăng ký thành viên nhóm mới, hãy đăng xuất khỏi máy chủ và đăng nhập lại hoặc sử dụng lệnh sau. Bạn sẽ được nhắc nhập mật khẩu của người dùng.
Chuyển sang thư mục.
Tạo và mở tệp
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc. Chúng tôi đã định cấu hình để khởi động ba dịch vụ, mỗi dịch vụ cho một dịch vụ, Fluentd, Elasticsearch và Kibana.
Đối với Fluentd, chúng tôi sẽ xây dựng một container thay vì một hình ảnh có sẵn. Các tệp xây dựng cho Fluentd sẽ được thiết lập trong bước tiếp theo. Chúng tôi đã gắn một thư mục cho các tệp dựng của nó và một ổ đĩa cho các tệp cấu hình và cổng 24224 được hiển thị trên cả giao thức TCP và UDP để tổng hợp nhật ký.
Dịch vụ tiếp theo là Elasticsearch và chúng tôi đang sử dụng phiên bản mới nhất có tại thời điểm viết hướng dẫn này. Chúng tôi đã hiển thị nó qua cổng 9200 và thiết lập một vài biến môi trường để chúng tôi có thể chạy nó như một cụm một nút và đã tắt các tính năng bảo mật. Điều này thường không được khuyến khích nhưng việc bật bảo mật nằm ngoài phạm vi của hướng dẫn này. Chúng tôi cũng đã gắn một ổ đĩa cục bộ cho dữ liệu Elasticsearch.
Cuối cùng, chúng tôi cấu hình Kibana và hiển thị nó qua cổng 5601 sẽ được sử dụng để truy cập bảng điều khiển. Chúng tôi cũng thiết lập một biến để cấu hình máy chủ Elasticsearch để nó truy cập.
Chạy
Nó sẽ trông như sau.
Chuyển sang Fluentd thư mục.
Tạo và mở
Dán mã sau vào đó. Mã này sẽ kéo hình ảnh Fluentd Debian Docker và cài đặt plugin Fluentd cho Elasticsearch.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Chuyển sang thư mục cấu hình.
Tạo và mở tệp
Dán mã sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Chỉ thị source ở trên sử dụng plugin
Chỉ thị match tìm kiếm các sự kiện có thẻ khớp, trong trường hợp này có nghĩa là nó khớp với tất cả các sự kiện. Chúng tôi sẽ sử dụng plugin
Bắt đầu container bằng lệnh sau.
Kiểm tra trạng thái của các container đang chạy.
Bạn cũng có thể sử dụng lệnh sau để nó.
Chạy các lệnh sau để kiểm tra nhật ký của quy trình xây dựng EFK.
Kiểm tra vùng chứa Elasticsearch. Nó sẽ in ra các thiết lập chi tiết của container.
Bạn có thể thấy địa chỉ IP được cung cấp cho container.
Như bạn thấy, container có
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22515%22%20height=%22701%22%3E%3C/svg%3E
Nhấp vào nút Khám phá của riêng tôi để tiếp tục đến bảng điều khiển Kibana.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22546%22%3E%3C/svg%3E
Nhấp vào liên kết Quản lý ngăn xếp để thiết lập chế độ xem dữ liệu Kibana. Chọn tùy chọn Kibana >> Data Views từ thanh bên trái để mở trang chế độ xem dữ liệu.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22633%22%3E%3C/svg%3E
Nhấp vào nút Create data view để tiếp tục.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22713%22%3E%3C/svg%3E
Nhập tên của chế độ xem dữ liệu và mẫu chỉ mục là
Tiếp theo, nhấp vào menu trên cùng (dấu ba chấm) và nhấp vào tùy chọn Khám phá để hiển thị nhật ký theo dõi.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22352%22%3E%3C/svg%3E
Bạn sẽ nhận được trang sau xác nhận rằng thiết lập của bạn đang hoạt động hoàn hảo. Tất cả các bản ghi đều được lấy từ Elasticsearch và được chuyển đi bằng tổng hợp bản ghi Fluentd.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22299%22%3E%3C/svg%3E
Nhập khóa ký của Nginx.
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Cập nhật hệ thống kho lưu trữ.
Cài đặt Nginx.
Xác minh cài đặt.
Khởi động máy chủ Nginx.
Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo rằng phiên bản Snapd của bạn đã được cập nhật.
Cài đặt Certbot.
Sử dụng lệnh sau để đảm bảo rằng lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến
Tạo chứng chỉ SSL cho tên miền
Lệnh trên sẽ tải xuống chứng chỉ vào Thư mục
Tạo chứng chỉ nhóm Diffie-Hellman.
Kiểm tra dịch vụ lập lịch gia hạn Certbot.
Bạn sẽ tìm thấy
Thực hiện chạy thử quy trình để kiểm tra xem việc gia hạn SSL có hoạt động không tốt.
Nếu bạn không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.
Dán mã sau vào đó. Thay thế địa chỉ IP bằng địa chỉ IP riêng của máy chủ Elasticsearch của bạn.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Mở tệp
Thêm dòng sau vào trước dòng
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Xác minh cấu hình.
Khởi động lại dịch vụ Nginx.
Cần thực hiện thêm một bước nữa. Mở tệp Docker compose để chỉnh sửa.
Dán dòng
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc sau khi hoàn tất.
Dừng và xóa các thùng chứa.
Khởi động lại các thùng chứa với các tệp đã cập nhật cấu hình.
Bảng điều khiển Kibana của bạn có thể truy cập được thông qua URL
Kéo hình ảnh Nginx từ sổ đăng ký Docker Hub. Chúng tôi đang sử dụng phiên bản
Chạy lệnh sau để tạo và khởi động vùng chứa Nginx. Chúng tôi đã đặt trình điều khiển nhật ký thành
Kiểm tra trạng thái container.
Chạy lệnh sau để truy cập container Nginx và tạo quyền truy cập nhật ký.
Ngoài ra, bạn có thể mở URL
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22652%22%20height=%22248%22%3E%3C/svg%3E
Mở bảng điều khiển Kibana và nhấp vào liên kết Khám phá trên menu thanh bên trái. Nhấp vào dấu + ở menu trên cùng để mở cửa sổ bật lên Thêm bộ lọc.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22224%22%3E%3C/svg%3E
Chọn trường
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22244%22%3E%3C/svg%3E
Nhấp vào nút Thêm bộ lọc để trực quan hóa dữ liệu từ vùng chứa Nginx.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22301%22%3E%3C/svg%3E
Elasticsearch là một công cụ tìm kiếm theo thời gian thực, phân tán và có thể mở rộng cho phép tìm kiếm và phân tích toàn văn. Nó được sử dụng để lập chỉ mục và tìm kiếm qua lượng dữ liệu lớn. Nó thường được triển khai cùng với Kibana, một bảng điều khiển trực quan hóa dữ liệu mạnh mẽ cho Elasticsearch. Kibana cho phép bạn khám phá dữ liệu nhật ký Elasticsearch và xây dựng các bảng điều khiển và truy vấn để hiểu sâu hơn về ứng dụng của bạn. Fluentd thu thập, chuyển đổi và chuyển dữ liệu nhật ký đến phần phụ trợ Elasticsearch.
Trong hướng dẫn này, chúng ta sẽ cài đặt ngăn xếp EFK bằng Docker trên máy Ubuntu 22.04 và gửi nhật ký vùng chứa đến Kibana sau khi lọc và chuyển đổi chúng bằng Fluentd.
Điều kiện tiên quyết
-
Máy chủ chạy Ubuntu 22.04 với tối thiểu 6GB RAM.
-
Người dùng không phải root có quyền sudo.
-
Tường lửa đơn giản (UFW) được bật và đang chạy.
-
Tên miền đủ điều kiện (FQDN) trỏ đến máy chủ như sau:kibana.example.com
.
-
Mọi thứ đã được cập nhật.
Mã:
$ sudo apt update && sudo apt upgrade
Bước 1 - Cấu hình Tường lửa
Trước khi cài đặt bất kỳ gói nào, bước đầu tiên là cấu hình tường lửa để cho phép kết nối HTTP và HTTPS.Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Mã:
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
Bước 2 - Cài đặt Docker và Docker Compose
Thêm khóa GPG chính thức của Docker.
Mã:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
Mã:
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Mã:
$ sudo apt update
Mã:
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
docker-compose
thành docker compose
và điều này được phản ánh ở đây.Docker chạy với các đặc quyền nâng cao nên bạn sẽ cần sử dụng
sudo
thường xuyên để chạy lệnh. Tùy chọn tốt hơn là thêm tài khoản người dùng Linux của bạn vào nhóm người dùng docker
.
Mã:
$ sudo usermod -aG docker ${USER}
${USER}
sẽ chọn tài khoản hệ thống hiện đang đăng nhập. Nếu bạn không đăng nhập bằng người dùng mà bạn muốn cấp quyền, hãy thay thế ${USER}
bằng tên người dùng.Để đăng ký thành viên nhóm mới, hãy đăng xuất khỏi máy chủ và đăng nhập lại hoặc sử dụng lệnh sau. Bạn sẽ được nhắc nhập mật khẩu của người dùng.
Mã:
$ su - ${USER}
Bước 3 - Tạo tệp Docker Compose
Đầu tiên, tạo thư mục cho dự án EFK.
Mã:
$ mkdir ~/efk
Mã:
$ cd ~/efk
docker-compose.yml
cho chỉnh sửa.
Mã:
$ nano docker-compose.yml
Mã:
services: # Deploy using the custom image automatically be created during the build process. fluentd: build: ./fluentd volumes: - ./fluentd/conf:/fluentd/etc links: # Sends incoming logs to the elasticsearch container. - elasticsearch depends_on: - elasticsearch ports: # Exposes the port 24224 on both TCP and UDP protocol for log aggregation - 24224:24224 - 24224:24224/udp elasticsearch: image: elasticsearch:8.7.1 expose: - 9200 environment: - discovery.type=single-node # Runs as a single-node - xpack.security.enabled=false volumes: # Stores elasticsearch data locally on the esdata Docker volume - esdata:/usr/share/elasticsearch/data kibana: image: kibana:8.7.1 links: # Links kibana service to the elasticsearch container - elasticsearch depends_on: - elasticsearch ports: - 5601:5601 environment: # Defined host configuration - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
# Define the Docker volume named esdata for the Elasticsearch container.
volumes: esdata:
Đối với Fluentd, chúng tôi sẽ xây dựng một container thay vì một hình ảnh có sẵn. Các tệp xây dựng cho Fluentd sẽ được thiết lập trong bước tiếp theo. Chúng tôi đã gắn một thư mục cho các tệp dựng của nó và một ổ đĩa cho các tệp cấu hình và cổng 24224 được hiển thị trên cả giao thức TCP và UDP để tổng hợp nhật ký.
Dịch vụ tiếp theo là Elasticsearch và chúng tôi đang sử dụng phiên bản mới nhất có tại thời điểm viết hướng dẫn này. Chúng tôi đã hiển thị nó qua cổng 9200 và thiết lập một vài biến môi trường để chúng tôi có thể chạy nó như một cụm một nút và đã tắt các tính năng bảo mật. Điều này thường không được khuyến khích nhưng việc bật bảo mật nằm ngoài phạm vi của hướng dẫn này. Chúng tôi cũng đã gắn một ổ đĩa cục bộ cho dữ liệu Elasticsearch.
Cuối cùng, chúng tôi cấu hình Kibana và hiển thị nó qua cổng 5601 sẽ được sử dụng để truy cập bảng điều khiển. Chúng tôi cũng thiết lập một biến để cấu hình máy chủ Elasticsearch để nó truy cập.
Bước 4 - Thiết lập Tệp dựng Fluentd
Tạo Fluentd và thư mục cấu hình.
Mã:
$ mkdir fluentd/conf -p
tree
lệnh để xác minh cấu trúc thư mục.
Mã:
$ tree

Chuyển sang Fluentd thư mục.
Mã:
$ cd fluentd
Dockerfile
cho chỉnh sửa.
Mã:
$ nano Dockerfile
Mã:
# fluentd/Dockerfile
FROM fluent/fluentd:v1.16-debian-1
USER root
RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-document", "--version", "5.3.0"]
USER fluent
Chuyển sang thư mục cấu hình.
Mã:
$ cd conf
fluentd.conf
để chỉnh sửa.
Mã:
$ nano fluentd.conf
Mã:
# bind fluentd on IP 0.0.0.0
# port 24224
@type forward port 24224 bind 0.0.0.0
# sendlog to the elasticsearch
# the host must match to the elasticsearch
# container service
@type copy @type elasticsearch_dynamic hosts elasticsearch:9200 logstash_format true logstash_prefix fluentd logstash_dateformat %Y%m%d include_tag_key true tag_key @log_name include_timestamp true flush_interval 30s @type stdout
Chỉ thị source ở trên sử dụng plugin
forward
biến Fluentd thành điểm cuối TCP để chấp nhận các gói TCP.Chỉ thị match tìm kiếm các sự kiện có thẻ khớp, trong trường hợp này có nghĩa là nó khớp với tất cả các sự kiện. Chúng tôi sẽ sử dụng plugin
elasticsearch_dynamic
để lưu trữ, cho phép chỉ định các giá trị cấu hình một cách động. Trường hosts
chỉ định tên máy chủ cho ứng dụng Elasticsearch, đây là tên dịch vụ trong tệp Docker compose. logstash_format
được đặt thành true, nghĩa là Fluentd sử dụng định dạng tên thông thường logstash-%Y.%m.%dlogstash-%Y.%m.%d
. Tên tiền tố để ghi sự kiện được đặt thành fluend
. include_tag_key
được đặt thành true để thêm thẻ Fluentd vào định dạng JSON. tag_key
là tên trường để trích xuất cho thẻ. Đặt biến include_timestamp
thành true sẽ thêm trường dấu thời gian vào nhật ký. flush_interval
chỉ định khoảng thời gian giữa các lần xóa dữ liệu. Chúng tôi cũng sử dụng plugin stdout
để in sự kiện/nhật ký ra đầu ra chuẩn.Bước 5 - Chạy Docker Container
Chuyển trở lại thư mục EFK.
Mã:
$ cd ~/efk
Mã:
$ docker compose up -d
Mã:
$ docker ps
b3780c311154 efk-fluentd "tini -- /bin/entryp…" 9 seconds ago Up 8 seconds 5140/tcp, 0.0.0.0:24224->24224/tcp, 0.0.0.0:24224->24224/udp, :::24224->24224/tcp, :::24224->24224/udp efk-fluentd-1
5a48f0a9ade1 kibana:8.7.1 "/bin/tini -- /usr/l…" 9 seconds ago Up 7 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp efk-kibana-1
dab3a0ab0312 elasticsearch:8.7.1 "/bin/tini -- /usr/l…" 9 seconds ago Up 8 seconds 9200/tcp, 9300/tcp efk-elasticsearch-1
Mã:
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
efk-elasticsearch-1 elasticsearch:8.7.1 "/bin/tini -- /usr/l…" elasticsearch 37 seconds ago Up 36 seconds 9200/tcp, 9300/tcp
efk-fluentd-1 efk-fluentd "tini -- /bin/entryp…" fluentd 37 seconds ago Up 36 seconds 5140/tcp, 0.0.0.0:24224->24224/tcp, 0.0.0.0:24224->24224/udp, :::24224->24224/tcp, :::24224->24224/udp
efk-kibana-1 kibana:8.7.1 "/bin/tini -- /usr/l…" kibana 37 seconds ago Up 36 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp
Mã:
$ docker logs efk-fluentd-1
$ docker logs efk-kibana-1
$ docker logs efk-elasticsearch-1
Mã:
$ docker inspect efk-elasticsearch-1
Như bạn thấy, container có
172.23.0.2
làm địa chỉ IP. Chạy lệnh sau để xác minh xem Elasticsearch có hoạt động chính xác không.
Mã:
$ curl 172.23.0.2:9200
{ "name" : "dab3a0ab0312", "cluster_name" : "docker-cluster", "cluster_uuid" : "gldMFBtQSxS5sL93rBAdzA", "version" : { "number" : "8.7.1", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "f229ed3f893a515d590d0f39b05f68913e2d9b53", "build_date" : "2023-04-27T04:33:42.127815583Z", "build_snapshot" : false, "lucene_version" : "9.5.0", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search"
}
Bước 6 - Cấu hình Kibana
Bây giờ ngăn xếp EFK đã được triển khai, đã đến lúc cấu hình Kibana. Mở URLhttp://:5601
trong trình duyệt.data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22515%22%20height=%22701%22%3E%3C/svg%3E
Nhấp vào nút Khám phá của riêng tôi để tiếp tục đến bảng điều khiển Kibana.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22546%22%3E%3C/svg%3E
Nhấp vào liên kết Quản lý ngăn xếp để thiết lập chế độ xem dữ liệu Kibana. Chọn tùy chọn Kibana >> Data Views từ thanh bên trái để mở trang chế độ xem dữ liệu.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22633%22%3E%3C/svg%3E
Nhấp vào nút Create data view để tiếp tục.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22713%22%3E%3C/svg%3E
Nhập tên của chế độ xem dữ liệu và mẫu chỉ mục là
fluentd-*
. Đảm bảo trường Dấu thời gian được đặt thành @timestamp
. Trường nguồn sẽ được tự động cập nhật. Nhấp vào nút Lưu chế độ xem dữ liệu vào Kibana để hoàn tất việc tạo chế độ xem dữ liệu.Tiếp theo, nhấp vào menu trên cùng (dấu ba chấm) và nhấp vào tùy chọn Khám phá để hiển thị nhật ký theo dõi.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22352%22%3E%3C/svg%3E
Bạn sẽ nhận được trang sau xác nhận rằng thiết lập của bạn đang hoạt động hoàn hảo. Tất cả các bản ghi đều được lấy từ Elasticsearch và được chuyển đi bằng tổng hợp bản ghi Fluentd.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22299%22%3E%3C/svg%3E
Bước 7 - Cài đặt Nginx
Ubuntu 22.04 đi kèm với phiên bản Nginx cũ hơn. Bạn cần tải xuống kho lưu trữ Nginx chính thức để cài đặt phiên bản mới nhất.Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Mã:
$ sudo apt update
Mã:
$ sudo apt install nginx
Mã:
$ nginx -v
nginx version: nginx/1.24.0
Mã:
$ sudo systemctl start nginx
Bước 8 - Cài đặt SSL
Bước đầu tiên là cài đặt Chứng chỉ SSL Let's Encrypt. Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng tôi sẽ sử dụng phiên bản Snapd.Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo rằng phiên bản Snapd của bạn đã được cập nhật.
Mã:
$ sudo snap install core && sudo snap refresh core
Mã:
$ sudo snap install --classic certbot
/usr/bin
thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
kibana.example.com
.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d kibana.example.com
/etc/letsencrypt/live/kibana.example.com
trên máy chủ của bạn.Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Mã:
$ sudo systemctl list-timers
snap.certbot.renew.service
là một trong những dịch vụ được lên lịch chạy.
Mã:
NEXT LEFT LAST PASSED UNIT ACTIVATES
------------------------------------------------------------------------------------------------------------------------------------
Mon 2023-05-06 13:37:57 UTC 3h 45min left Mon 2023-05-01 07:20:42 UTC 2h 31min ago ua-timer.timer ua-timer.service
Mon 2023-05-06 14:39:29 UTC 4h 47min left Sat 2023-02-04 16:04:18 UTC 2 months ago motd-news.timer motd-news.service
Mon 2023-05-06 15:53:00 UTC 6h left n/a n/a snap.certbot.renew.timer snap.certbot.renew.service
Mã:
$ sudo certbot renew --dry-run
Bước 9 - Cấu hình Nginx
Tạo và mở tệp cấu hình Nginx cho Kibana.
Mã:
$ sudo nano /etc/nginx/conf.d/kibana.conf
Mã:
server { listen 80; listen [::]:80; server_name kibana.example.com; return 301 https://$host$request_uri;
}
server { server_name kibana.example.com; charset utf-8; listen 443 ssl http2; listen [::]:443 ssl http2; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; resolver 8.8.8.8; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://localhost:5601; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
}
Mở tệp
/etc/nginx/nginx.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
.
Mã:
server_names_hash_bucket_size 64;
Xác minh cấu hình.
Mã:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Mã:
$ sudo systemctl restart nginx
Mã:
$ nano ~/docker-compose.yml
SERVER_PUBLICBASEURL=https://kibana.example.com
vào phần môi trường trong dịch vụ Kibana như sau.
Mã:
environment: # Defined host configuration - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 - SERVER_PUBLICBASEURL=https://kibana.example.com
Dừng và xóa các thùng chứa.
Mã:
$ docker compose down --remove-orphans
Mã:
$ docker compose up -d
https://kibana.example.com
từ bất kỳ đâu bạn muốn.Bước 10 - Chạy một container Docker với Fluentd Log Driver
Bây giờ, chúng ta sẽ chạy một container Docker với Ổ đĩa nhật ký Fluentd, tự động gửi nhật ký đến ngăn xếp. Chúng tôi sẽ kiểm tra bằng cách sử dụng vùng chứa Nginx.Kéo hình ảnh Nginx từ sổ đăng ký Docker Hub. Chúng tôi đang sử dụng phiên bản
alpine
vì đây là phiên bản nhỏ nhất của hình ảnh.
Mã:
$ docker pull nginx:alpine
Fluentd
và cổng là 8080 vì cổng mặc định 80 đã được máy chủ Nginx sử dụng ở chế độ proxy.
Mã:
$ docker run --name nginx-fluentd-test -d --log-driver=fluentd -p 8080:80 nginx:alpine
Mã:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
038c43e4e1a3 nginx:alpine "/docker-entrypoint.…" 12 seconds ago Up 11 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx-fluentd-test
a94ca706bd0c efk-fluentd "tini -- /bin/entryp…" 8 hours ago Up 8 hours 5140/tcp, 0.0.0.0:24224->24224/tcp, 0.0.0.0:24224->24224/udp, :::24224->24224/tcp, :::24224->24224/udp efk-fluentd-1
0cf04a446425 kibana:8.7.1 "/bin/tini -- /usr/l…" 8 hours ago Up 8 hours 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp efk-kibana-1
7c7ad8f9b123 elasticsearch:8.7.1 "/bin/tini -- /usr/l…" 8 hours ago Up 8 hours 9200/tcp, 9300/tcp efk-elasticsearch-1
Mã:
$ curl localhost:8080
Welcome to nginx!
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
[HEADING=1]Welcome to nginx![/HEADING]
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
[URL=http://nginx.org/]nginx.org[/URL].
Commercial support is available at
[URL=http://nginx.com/]nginx.com[/URL].
[I]Thank you for using nginx.[/I]
http://:8080
trong trình duyệt của bạn và bạn sẽ nhận được trang sau.data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22652%22%20height=%22248%22%3E%3C/svg%3E
Mở bảng điều khiển Kibana và nhấp vào liên kết Khám phá trên menu thanh bên trái. Nhấp vào dấu + ở menu trên cùng để mở cửa sổ bật lên Thêm bộ lọc.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22224%22%3E%3C/svg%3E
Chọn trường
container_name
từ danh sách thả xuống, is
làm toán tử và điền tên vùng chứa (nginx-fluentd-test
) làm giá trị trường.data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22244%22%3E%3C/svg%3E
Nhấp vào nút Thêm bộ lọc để trực quan hóa dữ liệu từ vùng chứa Nginx.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22301%22%3E%3C/svg%3E