1. Graylog là gì?
Graylog là một công cụ quản lý và phân tích log mã nguồn mở, được thiết kế để thu thập, lưu trữ và phân tích dữ liệu log từ nhiều nguồn khác nhau trong thời gian thực. Nó cho phép người dùng tập trung dữ liệu log từ các ứng dụng, hệ thống và thiết bị mạng và cung cấp khả năng tìm kiếm mạnh mẽ để truy vấn và khám phá dữ liệu. Graylog hỗ trợ nhiều định dạng log và cho phép người dùng tạo bảng điều khiển, cảnh báo và trực quan hóa tùy chỉnh để nhận được thông tin về trạng thái và hiệu suất hệ thống.
- Các thành phần chính của Graylog bao gồm:
- Graylog Server: Là thành phần cốt lõi nhận và xử lý dữ liệu log.
- Elasticsearch: Được sử dụng làm cơ sở dữ liệu để lưu trữ và chỉ mục dữ liệu log.
- MongoDB: Lưu trữ dữ liệu cấu hình và siêu dữ liệu.
- Graylog Web Interface: Giao diện người dùng đồ họa được sử dụng để tương tác với dữ liệu log.
2. OpenSearch là gì?
OpenSearch là một công cụ tìm kiếm và phân tích dữ liệu dựa trên Elasticsearch và được thiết kế như một phiên bản mã nguồn mở thay thế cho Elasticsearch. Nó được tạo ra bởi một nhóm các nhà phát triển như một phản ứng với việc thay đổi giấy phép của Elasticsearch, dẫn đến việc mất tính mã nguồn mở của nó.
OpenSearch tương thích với API của Elasticsearch, điều này có nghĩa là các ứng dụng và công cụ đã được xây dựng cho Elasticsearch có thể hoạt động với OpenSearch mà chỉ cần thực hiện ít sửa đổi. Nó cung cấp nhiều tính năng như tìm kiếm toàn văn bản, phân tích và trực quan hóa, làm cho nó phù hợp cho việc phân tích log, quản lý thông tin và sự kiện bảo mật (SIEM), giám sát ứng dụng và các trường hợp sử dụng khác yêu cầu phân tích dữ liệu quy mô lớn.
- OpenSearch cũng có các thành phần tương tự như Elasticsearch:
- OpenSearch Server: Là thành phần cốt lõi chịu trách nhiệm lưu trữ dữ liệu, chỉ mục và chức năng tìm kiếm.
- OpenSearch Dashboards: Cung cấp giao diện trực quan để khám phá và trực quan hóa dữ liệu, trước đây được gọi là Kibana.
- OpenSearch Alerting: Xử lý cảnh báo và thông báo dựa trên các điều kiện cụ thể, trước đây được gọi là Alerting trong Elastic Stack.
3. Cài đặt Graylog.
Bước 1 – Cài đặt MongoDB.
Cài đặt tiện ích bổ sung.
sudo apt-get install gnupg curl -y
Tải xuống public key của MongoDB và chuyển đổi nó sang định dạng gpg
curl -fsSL https://pgp.mongodb.com/server-6.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \
--dearmor
Cho phép Ubuntu truy cập và cài đặt các gói từ kho lưu trữ MongoDB với public key đã xác thực được tải xuống trước đó.
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
Cập nhật lại danh sách gói và cài đặt MongoDB.
sudo apt-get update
sudo apt-get install -y mongodb-org
Ngăn không cho MongoDB tự động nâng cấp tránh hư hỏng cấu trúc dữ liệu.
echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-database hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-mongosh hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections
Khởi động và bật chế độ tự khởi động theo hệ thống cho MongoDB.
sudo systemctl start mongod
sudo systemctl enable mongod
Kiểm tra lại trạng thái của MongoDB.
$ sudo systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-08-02 13:35:41 UTC; 24min ago
Docs: https://docs.mongodb.org/manual
Main PID: 9521 (mongod)
Memory: 173.6M
CPU: 18.809s
CGroup: /system.slice/mongod.service
└─9521 /usr/bin/mongod --config /etc/mongod.conf
Transparent Huge Pages (THP) là một tính năng có sẵn trong một số hệ điều hành, bao gồm Linux, nhằm tối ưu hóa việc quản lý bộ nhớ trong các ứng dụng lớn hoặc trên các hệ thống có nhiều bộ nhớ RAM. Tính năng này cho phép hệ thống tự động xử lý bộ nhớ theo các trang lớn hơn so với trang thông thường, với mục tiêu cải thiện hiệu suất và tiết kiệm bộ nhớ.
Tuy nhiên, trong một số trường hợp, THP có thể gây ra những vấn đề hiệu năng và tương thích trong môi trường MongoDB cụ thể. MongoDB khuyến nghị tắt tính năng THP để đảm bảo hoạt động ổn định và hiệu suất tối ưu của cơ sở dữ liệu.
Các vấn đề phổ biến khi sử dụng THP trong MongoDB bao gồm:
- Fragmentation: THP có thể gây ra sự phân mảnh nội bộ trong bộ nhớ, làm cho các trang dữ liệu không liên tục và làm giảm hiệu suất truy xuất dữ liệu.
- Latency: Khi THP được kích hoạt, có thể xuất hiện một vài đợi độc quyền (exclusive lock) trên các trang bộ nhớ, dẫn đến tăng đáng kể thời gian truy cập dữ liệu.
- CPU overhead: Quá trình tự động xử lý THP yêu cầu sử dụng tài nguyên CPU và có thể gây ảnh hưởng đến hiệu suất tổng thể của hệ thống.
cat > /etc/systemd/system/disable-transparent-huge-pages.service << 'OEF'
[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
[Install]
WantedBy=basic.target
OEF
Reload lại Deamon.
sudo systemctl daemon-reload
Khởi động và bật chế độ tự khởi động theo hệ thống cho THP.
sudo systemctl start disable-transparent-huge-pages
sudo systemctl enable disable-transparent-huge-pages
Xác nhận lại việc tắt THP thành công.
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
Nếu kết quả hiển thị là [never]
, điều đó có nghĩa là tính năng THP đã được tắt thành công trong hệ thống của bạn. Điều này có lợi khi triển khai MongoDB, vì nó giúp tránh các vấn đề hiệu năng và tương thích được đề cập trước đó.
Nếu bạn không thấy [never]
trong kết quả và thấy một trong các giá trị khác, hãy thực hiện lại các bước để tắt THP như đã được mô tả trước đó. Bạn có thể kiểm tra lại cấu hình và thực hiện một khởi động lại hệ thống để chắc chắn rằng cấu hình đã được áp dụng thành công.
Khi THP đã được tắt thành công và kết quả cat /sys/kernel/mm/transparent_hugepage/enabled
hiển thị [never]
, bạn đã chuẩn bị môi trường tốt hơn để triển khai MongoDB với hiệu suất và tính tương thích tốt hơn.
Bước 2 – Cài đặt OpenSearch.
Tương tự như ở bước trên ta tiếp tục tải xuống public key của MongoDB và chuyển đổi nó sang định dạng gpg và cho phép Ubuntu truy cập và cài đặt các gói từ kho lưu trữ MongoDB với public key đã xác thực được tải xuống trước đó.
curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo apt-key add -
echo "deb https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/opensearch-2.x.list
Cập nhật lại danh sách gói.
sudo apt-get update
Mình cài đặt Opensearch phiên bản 2.5.0.
sudo apt-get install opensearch=2.5.0
Backup cấu file cấu hình opensearch.yml.
cp /etc/opensearch/opensearch.yml /home/opensearch.yml
Thay đổi thông tin file opensearch.yml bằng cách chạy script dưới.
sudo cat > /etc/opensearch/opensearch.yml << 'OEF'
cluster.name: graylog
node.name: ${HOSTNAME}
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
discovery.type: single-node
network.host: 0.0.0.0
action.auto_create_index: false
plugins.security.disabled: true
plugins.security.ssl.transport.pemcert_filepath: esnode.pem
plugins.security.ssl.transport.pemkey_filepath: esnode-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: esnode.pem
plugins.security.ssl.http.pemkey_filepath: esnode-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem
plugins.security.allow_unsafe_democertificates: true
plugins.security.allow_default_init_securityindex: true
plugins.security.authcz.admin_dn:
- CN=kirk,OU=client,O=client,L=test, C=de
plugins.security.audit.type: internal_opensearch
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
plugins.security.system_indices.enabled: true
plugins.security.system_indices.indices: [".plugins-ml-model", ".plugins-ml-task", ".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-ano
maly-detection-state", ".opendistro-reports-*", ".opensearch-notifications-*", ".opensearch-notebooks", ".opensearch-observability", ".opendistro-asynchronous-search-response*", ".replication-metadata-store"]
node.max_local_storage_nodes: 3
OEF
Tiếp tục vào file /etc/opensearch/jvm.options
và thêm nội dung dưới nếu chưa có.
-Xms1g
-Xmx1g
Thiết lập giá trị vm.max_map_count
trong bộ nhớ tạm thời (runtime). Thay đổi này chỉ có hiệu lực trong phiên làm việc hiện tại của hệ thống và sẽ mất đi khi bạn khởi động lại hệ thống.
sudo sysctl -w vm.max_map_count=262144
Thêm một dòng chứa vm.max_map_count=262144
vào file /etc/sysctl.conf
. File này chứa cấu hình hệ thống cho các tham số kernel, và các giá trị được thêm vào file này sẽ có hiệu lực sau khi hệ thống khởi động lại.
sudo echo 'vm.max_map_count=262144' >> /etc/sysctl.conf
Reload lại Deamon.
sudo systemctl daemon-reload
Khởi động và bật chế độ tự khởi động theo hệ thống cho OpenSearch.
sudo systemctl start opensearch.service
sudo systemctl enable opensearch.service
Kiểm tra lại trạng thái của OpenSearch.
$ sudo systemctl status opensearch.service
● opensearch.service - OpenSearch
Loaded: loaded (/lib/systemd/system/opensearch.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-08-02 13:40:11 UTC; 31min ago
Docs: https://opensearch.org/
Main PID: 10750 (java)
Tasks: 71 (limit: 4646)
Memory: 1.2G
CPU: 1min 3.060s
CGroup: /system.slice/opensearch.service
└─10750 /usr/share/opensearch/jdk/bin/java -Xshare:auto -Dopensearch.networkaddress.cache.ttl=60 -Dopensearch.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-Omit>
Bước 3 – Cài đặt Graylog.
Tải xuống gói dữ liệu (.deb) chứa thông tin kho lưu trữ (repository) của Graylog phiên bản 5.0 từ địa chỉ được cung cấp.
wget https://packages.graylog2.org/repo/packages/graylog-5.0-repository_latest.deb
Cài đặt gói dữ liệu (.deb) đã tải xuống vào hệ thống bằng công cụ dpkg, giúp thêm kho lưu trữ Graylog vào danh sách kho lưu trữ của hệ thống.
sudo dpkg -i graylog-5.0-repository_latest.deb
Cập nhật thông tin về các gói có sẵn từ các kho lưu trữ và sau đó cài đặt gói graylog-server, tức là phần mềm máy chủ Graylog, từ kho lưu trữ đã được thêm vào.
sudo apt-get update && sudo apt-get install graylog-server
Thêm hai thông tin bắt buộc là password_secret
và root_password_sha2
vào file /etc/graylog/server/server.conf
.
Tạo mật khẩu password_secret
và root_password_sha2
như sau .
passwd=$(echo -n "hoanghd" | sha256sum | cut -d" " -f1)
sudo sed -i "s/password_secret =.*/password_secret = $passwd/" /etc/graylog/server/server.conf
sudo sed -i "s/root_password_sha2 =.*/root_password_sha2 = $passwd/" /etc/graylog/server/server.conf
Script trên sẽ đưa thông tin password_secret
và root_password_sha2
vào /etc/graylog/server/server.conf
như hình dưới nhé.
Thay đổi thông tin http_bind_address
phù hợp với hệ thống của bạn.
sudo sed -i "s|#http_bind_address = 127.0.0.1:9000|http_bind_address = 192.168.13.181:9000|" /etc/graylog/server/server.conf
Hình dưới cho bạn tham khảo.
Reload lại Daemon.
sudo systemctl daemon-reload
Khởi động và bật chế độ tự khởi động theo hệ thống cho Graylog.
sudo systemctl enable graylog-server.service
sudo systemctl start graylog-server.service
Xác nhận Graylog đã hoạt động.
$ sudo systemctl --type=service --state=active | grep graylog
graylog-server.service loaded active running Graylog server
Bước 4 – Kiểm tra kết quả.
Truy cập vào http://<ipaddress>:9000
và login theo thông tin admin/hoanghd
với hoanghd
là password lúc nãy chúng ta đã tạo ở trên.
Và đây là kết quả khi login thành công.