Tiếp tục trong series Monitoring trong bài viết này chúng ta sẽ cùng sử dụng Zabbix từ A đến Á. Chẳng là Flex nhỏ xíu một chút mình mới lắp thêm RAM cho con PC của mình nâng tổng RAM lên 64GB nên là giờ có tương đối RAM tạo máy ảo làm Lab để viết bài cho mọi người, sắp tới sẽ có thêm những bài viết hữu ích, thực tế hơn mà cá nhân mình thấy giúp ích được cho mọi người, còn tiếp theo chúng ta sẽ đi vào vấn đề chính của bài viết này là cách sử dụng Zabbix.
Nội dung
Zabbix dùng để làm gì?
Đầu tiên, chắc chắn rồi chúng ta phải biết sử dụng Zabbix”để làm gì” chúng ta không thể biết mọi thứ trên đời và giành thời gian cho những thứ không cần thiết phải không, nên bạn biết trước sử dụng Zabbix để làm gì sẽ quyết định bạn có “cần” nó không hay một công cụ khác phù hợp hơn dùng Zabbix (tìm kiếm mà xem bài viết này là có nhu cầu 50% roài nhỉ).
Những tác dụng, lợi ích mà Zabbix có thể làm:
- Giám sát tài nguyên phần cứng: sử dụng Zabbix theo dõi các thông số nhiệt độ, độ ẩm, áp suất và các yếu tố môi trường khác để đảm bảo điều kiện hoạt động tốt nhất cho các thiết bị và máy móc đặc biệt là trong môi trường Production.
- Giám sát tài nguyên máy chủ: sử dụng Zabbix theo dõi tài nguyên như việc CPU, RAM, Disk sử dụng quá cao để có biện pháp khắc phục không ảnh hưởng đến hoạt động của hệ thống.
- Giám sát thông số hiệu suất cơ sở dữ liệu: sử dụng Zabbix theo dõi lượt truy cập tăng cao, tình trạng kết nối có ổn định hay không, tốc độ truy vấn, trạng thái hoạt động của database.
- Bảo mật cơ sở dữ liệu: Zabbix có thể giám sát các sự kiện bảo mật trong cơ sở dữ liệu như đăng nhập không hợp lệ, cố gắng tấn công, và các hoạt động đáng ngờ khác.
- Gửi cảnh báo nhanh chóng nhiều lựa chọn: sử dụng Zabbix gửi cảnh báo qua email, telegram, slack,… khi các thông số hoặc trạng thái vượt ngưỡng đã định, giúp bạn phản ứng nhanh chóng đối với các vấn đề.
- Khởi động lại dịch vụ: khi dịch vụ nào đó của bạn có vấn đề bạn có thể sử dụng Zabbix để thực hiện các tác vụ quản lý như khởi động lại dịch vụ.
- Thống kê và phân tích dữ liệu về lưu lượng mạng: sử dụng Zabbix để phân tích lưu lượng mạng, xác định các mẫu tiêu thụ tài nguyên, và tìm hiểu về tình trạng kết nối mạng.
- Đo lường sự phản hồi của ứng dụng: Giám sát thời gian phản hồi của ứng dụng và các yếu tố tương tác, giúp bạn đảm bảo người dùng trải nghiệm tốt.
- Kiểm tra khả năng chịu tải: sử dụng Zabbix để thực hiện kiểm tra khả năng chịu tải (load testing) trên ứng dụng hoặc hạ tầng, để xác định tải tối đa mà hệ thống có thể xử lý.
- Đo lường yếu tố sử dụng điện năng: theo dõi sử dụng điện năng của các máy chủ và thiết bị để xác định tiêu thụ và tối ưu hóa năng lượng.
- Khả năng tùy chỉnh mở rộng cao: sử dụng Zabbix bạn có thể tùy chỉnh rất nhiều thứ để đem lại đúng mục đích bạn muốn (đơn giản nhất bạn có thể tùy chỉnh thông số cảnh báo).
- Dự báo và phân tích xu hướng: Zabbix có khả năng theo dõi dữ liệu theo thời gian và tạo biểu đồ để phân tích xu hướng sử dụng tài nguyên và hiệu suất cơ sở dữ liệu.
Và còn rất nhiều lợi ích của Zabbix nữa bạn có thể từ từ tìm hiểu nhé.
Vậy tương ứng với những lợi ích rõ ràng, mạnh mẽ ở trên thì sử dụng Zabbix có những lư ý và hạn chế gì và không phù hợp với trường hợp nào?
Những lưu ý và hạn chế của Zabbix:
- Yêu cầu tài nguyên hệ thống: Zabbix có thể tiêu tốn tài nguyên hệ thống khá lớn, đặc biệt khi giám sát một môi trường lớn hoặc nhiều thiết bị, có thể gây ảnh hưởng đến hiệu suất của hệ thống.
- Tính tùy chỉnh và mở rộng cao: Mặc dù tính tùy chỉnh cao có thể là một lợi ích, nhưng nó cũng có thể là một điểm yếu nếu bạn không có kiến thức và kỹ năng cần thiết để tùy chỉnh và mở rộng Zabbix theo nhu cầu của bạn.
- Không phù hợp cho môi trường nhỏ: Đối với các môi trường nhỏ với ít thiết bị và yêu cầu giám sát đơn giản, việc triển khai Zabbix có thể quá phức tạp và không hiệu quả.
- Tính phức tạp của giao diện người dùng: Giao diện người dùng Zabbix có thể khá phức tạp và khó sử dụng đối với người dùng không có kinh nghiệm, đòi hỏi một thời gian để làm quen và học cách sử dụng hiệu quả.
Tài liệu chính thức: Zabbix – Documents
Cài đặt và sử dụng Zabbix trên CentOS 7
Tiếp theo chúng ta sẽ tiến hành cài đặt Zabbix, ở đây mình lựa chọn CentOS 7 và mình rất recommend bạn sử dụng OS giống mình để làm lab lý do bạn có thể tìm hiểu về các hệ điều hành nhé nhưng nói đơn giản ở đây là CentOS 7, và đây là những cấu hình phục vụ việc làm lab còn thực tế sẽ cần nhiều hơn nhé
Mình có 2 server như sau:
# | OS | IP | Hostname | Minimum System Requirements |
---|---|---|---|---|
1 | Ubuntu 20.04 | 192.168.17.100 | gitlab.elroydevops.tech | optional |
2 | CentOS 7 | 192.168.17.102 | zabbix.elroydevops.tech | 4GB RAM 2CPU 20GB Storage |
Như bạn thấy và cũng dễ dàng hiểu với server 1 mình cài đặt Gitlab, server 2 mình sẽ cài đặt zabbix và tiến hành monitoring server gitlab.
Lưu ý: Mình sẽ tiến hành thiết lập trong file /etc/hosts của 2 server với hostname như trên vì mình muốn sử dụng hostname để bạn dễ hình dung các server hơn còn nếu bạn không muốn sử dụng hostname thì vẫn sử dụng IP như bình thường nhé (những chỗ mình sử dụng hostname thì bạn chỉ cần thay bằng IP của bạn).
Trong bài viết này mình sẽ sử dụng Zabbix 5.0 mặc dù đã ra Zabbix version 6 khá lâu và cũng khá nhiều hay ho bạn có thể xem trực tiếp tại: What’s new in Zabbix 6.0.0
Cài đặt Zabbix server
Đầu tiên chúng ta cài đặt, thiết lập trên server zabbix
Thêm 3 dòng dưới đây vào file hosts tương ứng là IP server của bạn nhé
Tạm thời tắt tính năng “Enforcement” của SELinux và chuyển SELinux sang chế độ “permissive”
Tải gói RPM từ đường dẫn URL đã cho và sau đó cài đặt hoặc cập nhật gói RPM để thêm nguồn kho Zabbix vào hệ thống
Làm sạch các dữ liệu cache và metadata của gói trên hệ thống
Cài đặt Zabbix Server với hỗ trợ MySQL và Zabbix Agent trên hệ thống
Tải và cài đặt gói centos-release-scl
, cho phép sử dụng công nghệ Software Collections để quản lý các phiên bản phụ trợ của các gói trên hệ thống
Kích hoạt (enable) kho lưu trữ (repository) Zabbix trong hệ thống
Sửa trong zabbix-frontend phần enable=1 vậy trong zabbix-frontend được như dưới đây
Tải và cài đặt các gói zabbix-web-mysql-scl
và zabbix-apache-conf-scl
, cung cấp giao diện web cho Zabbix và cấu hình Apache cần thiết để nó hoạt động trên hệ thống
Tạo file thông tin cấu hình liên quan đến nguồn kho MariaDB
Thêm nội dung dưới đây vào file cấu hình mariadb.repo
Tải và cài đặt gói MariaDB-server
để cài đặt MariaDB Server và gói MariaDB-client
để cài đặt MariaDB Client trên hệ thống
Cấu hình để tự động khởi động cùng với hệ thống
Khởi động Mariadb
Truy cập vào môi trường dòng lệnh của Mariadb để tạo database
Bạn hãy thực hiện các bước dưới đây để tạo database
Thực thi các câu lệnh SQL từ tập tin create.sql.gz
, sẽ có yêu cầu nhập mật khẩu người dùng MySQL “zabbix” và sau đó tạo cơ sở dữ liệu Zabbix sẵn sàng để sử dụng
Chỉnh sửa file cấu hình của Zabbix server
Tìm và sửa những dòng dưới đây tương ứng với thông tin database vừa tạo
Chỉnh sửa file cấu hình Zabbix cho đúng timezone khu vực của chúng ta
Chỉnh sửa thông tin timezone như dưới đây nhé: php_value[date.timezone] = Asia/Ho_Chi_Minh
Restart lại service của Zabbix
Thiết lập khởi động Zabbix server, Zabbix agent cùng với hệ thống
Tiếp theo mặc định khi sử dụng Zabbix sẽ phải thêm đường dẫn http://<IP>/zabbix chúng ta sẽ tiến hành cấu hình lại một chút để không cần /zabbix nữa, điều này dù bạn không làm thì cũng không ảnh hưởng gì hệ thống, tuy nhiên là ví dụ bạn sẽ cấu hình domain thì mặc định sẽ là zabbix.elroydevops.tech/zabbix như vậy trông chưa được thẩm mỹ lắm.
Sửa các đường dẫn như dưới đây trong cấu hình httpd
Tiến hành khởi động lại webserver Apache và PHP-FPM áp dụng cấu hình mới
Thiết lập webserver Apache và PHP-FPM khởi động cùng hệ thống
Tiếp theo chúng ta phải mở port truy cập sử dụng Zabbix server là 10051 và sử dụng Zabbix agent là 10050 và Web client Zabbix là 80 nếu bạn đang sử dụng Cloud/VPS/Hosting thì nên sử dụng IPTABLES để đảm bảo bảo mật hơn, ở đây tuy rằng mình tạo trên VMWare Workstation nhưng cũng làm như là Server public
Tắt Firewall mặc định là Firewalld
Tiến hành cài đặt iptables (nếu chưa cài đặt)
Tiến hành mở các port sau
Xem danh sách các port đã mở
Được kết quả tương tự như dưới đây là thành công cấu hình xong iptables
Lưu lại cấu hình iptables
Bạn có thể thêm cả hostname vào trong máy tính cá nhân của bạn nếu là window sẽ là C:\Windows\System32\Drivers\etc\hosts
Tiếp theo chúng ta truy cập Zabbix trên giao diện web để hoàn tất cài đặt vì mình đã thêm host nên của mình với địa chỉ http://zabbix.elroydevops.tech
Nhấn Next step
Tiếp theo sẽ hiển thị một số thông tin bạn thấy trạng thái tất cả là OK chúng ta nhấn Next step
Tiếp theo bạn sẽ điền thông tin database mariadb ở trên chúng ta vừa tạo và nhấn Next step
Tiếp theo chúng ta điền tên của Zabbix server và nhấn Next step
Tiếp theo chúng ta kiểm tra lại 1 lượt các thông tin đã điền và nhấn Next step
Cấu hình thành công và nhấn Finish
Chúng ta sẽ đăng nhập với Username/Password mặc định là Admin/zabbix để vào giao diện sử dụng Zabbix
Đăng nhập thành công vào giao diện chính sử dụng Zabbix
Cài đặt Zabbix agent
Zabbix Agent là một phần mềm được cài đặt và chạy trên các máy khách (clients) để thu thập dữ liệu từ hệ thống và gửi đến Zabbix Server hoặc các máy proxy để giám sát. Nó là một phần quan trọng trong hệ thống Zabbix Monitoring, giúp theo dõi và giám sát hiệu suất, tình trạng và các thông số khác của các máy chủ, thiết bị và ứng dụng.
Một số chức năng chính của Zabbix Agent bao gồm:
- Thu thập dữ liệu
- Thực hiện kiểm tra và giám sát: Zabbix Agent có khả năng thực hiện các kiểm tra và giám sát tình trạng của các ứng dụng và dịch vụ cụ thể trên máy khách. Nếu có sự cố xảy ra, nó có thể gửi cảnh báo đến Zabbix Server để thông báo về tình trạng kém hoặc không bình thường.
- Thu thập dữ liệu tùy chỉnh: Bạn cũng có thể viết các scripts hoặc plugins tùy chỉnh để Zabbix Agent thực thi và thu thập dữ liệu đặc biệt theo yêu cầu.
- Bảo mật và hiệu suất: Zabbix Agent được thiết kế để có khả năng bảo mật và tối ưu hiệu suất, đảm bảo rằng việc thu thập dữ liệu không làm ảnh hưởng đến hiệu suất chung của máy khách.
Chúng ta sẽ tiến hành cấu hình Zabbix agent sang 2 server tiếp theo như ở trên mình nói là server Gitlab
Cài đặt Zabbix agent trên Ubuntu
Truy cập vào server Gitlab server này mình sử dụng Ubuntu 20.04 (của bạn thì là server thứ 2 mà bạn chuẩn bị nhé)
Tải xuống một gói cài đặt .deb
từ URL được cung cấp. Cụ thể, lệnh này đang tải xuống gói zabbix-release_5.0-1+focal_all.deb
từ kho lưu trữ của Zabbix
Sử dụng dpkg
để cài đặt gói zabbix-release
vào hệ thống
Cài Zabbix agent vào server
Cấu hình Zabbix agent kết nối đến Zabbix server
Bạn tìm kiếm và chỉnh sửa những phần dưới đây như sau (vì mình đã thêm hostname còn bạn có thể thay bằng IP nhé)
Khởi động lại dịch vụ Zabbix agent
Khởi động Zabbix agent với hệ thống
Nếu bạn đang tắt firewall thì không cần thiết nhưng nếu đang bật firewall thì cần mở port 10050 đây chính là port của Zabbix agent như trên
Chúng ta quay lại Web Zabbix server để thêm agent vào để giám sát
Chọn vào Configuration -> Hosts -> Create host
Điền những thông tin của Agent vào tab Host
Chuyển qua tab template và làm theo các bước sau đây Select vào Link new templates
Tiếp theo Select vào Host group
Chọn vào Templates
Tiếp tục chọn vào Template OS Linux by Zabbix agent
Chúng ta được kết quả đã chọn và nhấn Add
Thêm thành công Server và Availability phần ZBX phải được hiện màu xanh như dưới đây
Quay lại phần Problems, ví dụ dưới đây server Gitlab của mình
Mình giải thích một chút cảnh báo trên:
- Severity (mức độ nghiêm trọng): Average (trung bình), Zabbix có 6 trạng thái như bạn có thể thấy ngay ở phía trên phần Severity.
- Status (trạng thái): PROBLEM (Có vấn đề)
- Host (server cài đặt agent được giám sát): gitlab.elroydevops.tech
- Problem (vấn đề): /: Disk space is critically low (used > 90%) và High memory utilization (>90% for 5m) cho thấy tài nguyên về Disk và memory của mình đã quá tải.
Dựa vào những cảnh báo trên mình biết server Gitlab của mình đã sắp hết tài nguyên để có biện pháp xử lý, đó là một số thông tin cơ bản, bạn có thể xem những phần khác cũng được thể hiện khá rõ ràng.
Mình sẽ tiến hành fix cho server Gitlab hết bị full memory bạn có thể thấy cảnh báo đã chuyển trạng thái sang RESOLVED (đã giải quyết) ngay sau đó (rất nhanh chóng)
Tương tự bạn có nhiều server khác bạn thêm tương tự nhé, mình sẽ thêm tương tự server Jenkins vào trong Zabbix để giám sát.
Tích hợp gửi thông báo về telegram khi sử dụng Zabbix
Trong Telegram bạn tìm kiếm BotFather và tạo như dưới đây chi tiết hơn bạn có thể tham khảo Tích hợp gửi thông báo Gitlab CI/CD đến Telegram 2 phút hơn
Chọn vào link t.me/zabbix_elroydevops_bot (tương ứng bạn đặt username nhé) và chọn vào Manage Bot
Bạn có thể chỉnh sửa Profile của Bot để trông chuyên nghiệp hơn
Truy cập vào link : https://api.telegram.org/bot<Token>/getUpdates và lưu lại Chat ID để sử dụng
Truy cập lại Zabbix server trên web chọn Administration -> Media types
Chọn vào Telegram
Điền thông tin như dưới đây gồm có ChatID và Token
Nhấn nút Test và thành công được như dưới đây
Tiếp tục chọn Administration -> Users
Chọn vào Admin
Chọn sang tab Media Điền thông tin như dưới đây Sent to là ChatID nhé
Nhấn Update
Tiếp tục chọn Administration -> Actions -> Create action
Tab Action điền thông tin Name của action
Chuyển sang tab Operations thao tác như dưới đây để thêm các thành phần
Thêm tương tự được như dưới đây
Tương tự với Recovery operations
Tiếp tục đến Update operations
Được các thông tin như dưới đây và nhấn Add
Tạo thành công Action Telegram notification
Mình sẽ giả định server full dung lượng bằng cách tạo một file image kích thước 5GB như dưới đây
Sau khi thêm file làm đầy dung lượng sẽ có cảnh báo đến Zabbix server kèm thông báo đến Telegram
Mình tiến hành xóa file đó đi và quay lại xem thông báo gửi về gồm có vấn đề và được xử lý với các thông tin dưới đây
Sử dụng item và trigger trong Zabbix
Item trong Zabbix: Item là các thành phần cơ bản để thu thập dữ liệu từ các nguồn khác nhau như máy chủ, ứng dụng, thiết bị mạng, hệ thống điều khiển, v.v. Mỗi item thu thập một giá trị cụ thể, chẳng hạn như tình trạng CPU, bộ nhớ, băng thông mạng, số lượng kết nối, và nhiều thông tin khác.
Trigger trong Zabbix: Trigger là các điều kiện được thiết lập để theo dõi các giá trị item và kích hoạt cảnh báo khi các giá trị này vượt quá ngưỡng hoặc tuân theo một mô hình nào đó. Khi một trigger được kích hoạt, Zabbix có thể thực hiện các hành động như gửi thông báo cảnh báo qua email, Telegram, SMS, Slack hoặc thực thi các kịch bản tự động. Ví dụ về trigger bao gồm:
- High Load Trigger: Kích hoạt khi tình trạng CPU vượt quá một ngưỡng xác định.
- Low Disk Space Trigger: Kích hoạt khi dung lượng đĩa còn lại dưới một mức độ quy định.
- Network Latency Trigger: Kích hoạt khi độ trễ mạng cao hơn một giới hạn nào đó.
Tóm lại, trong Zabbix, các item và trigger là các thành phần chính để thu thập dữ liệu và theo dõi trạng thái của hệ thống, ứng dụng và thiết bị, cũng như để cảnh báo người quản trị khi có sự cố hoặc vượt quá giới hạn đã định trước, như phía trên Gitlab server cảnh báo là do Item và Trigger mặc định của Zabbix đã hoạt động.
Cảnh báo trạng thái ứng dụng/dịch vụ/port
Mình sẽ tiến hành tạo cảnh báo, khi Gitlab server bị tắt sẽ tiến hành gửi cảnh báo, hiện tại Gitlab server của mình đang chạy trên Port 80 vậy mình sẽ sử dụng phương pháp kiểm tra địa chỉ Gitlab có hoạt động tốt không nếu không sẽ gửi cảnh báo, chúng ta cùng thực hiện
Đầu tiên chọn vào Configuration -> Hosts -> Items
Tiếp theo chọn vào Create item
Điền thông tin như dưới đây, nếu bạn muốn kiểm tra port khác chỉ cần đổi port tại trường key nhé
Tiếp theo chọn qua tab Triggers và nhấn Create trigger
Tạo thông tin như dưới đây
Chọn vào Select để lấy item vừa tạo ở trên
Chọn vào item vừa tạo ở trên
Thêm thành công nhấn Insert
Thành công ta được Expression như dưới đây và nhấn Add
Vì Port 80 mình đang chạy Gitlab server nên mình tiến hành dừng Gitlab để kiểm tra xem cảnh báo hoạt động chưa nhé (tương tự ví dụ bạn sử dụng service nginx chỉ cần systemctl stop nginx)
Vậy là thành công chúng ta nhận được cảnh báo
Mình tiến hành khởi động lại Gitlab server
Vậy là trạng thái đã chuyển sang RESOLVED thật là tiện lợi phải không nào
Chúng ta sẽ làm thêm một bước khác nữa cũng là một cách sử dụng Item và Trigger nữa dựa trên trường hợp trên, ví dụ service của bạn có vấn đề và nó bị stop/kill chúng ta cần một phương pháp tự động tốt hơn thay vì thủ công vào server và khởi động lại Service.
Sử dụng Script từ Zabbix server đến server Zabbix agent
Thêm Item như thông tin dưới đây trong đó key: ssh.run[,<IP>,<Port>,]
Thiết lập lại Trigger vừa tạo cảnh báo ở trên phần OK event generation và chọn tab Recovery expression nhấn Add
Chọn vào Select
Chọn Item mà chúng ta vừa tạo để khởi động lại Service
Thành công được kết quả lưu lại
Khi cảnh báo Service bị tắt thì service đó sẽ được khởi động lại tự động. Ngoài ra còn rất nhiều các Item và Template khác bạn có thể khám phá nhé, cũng có thể theo dõi tiếp mình sẽ ra những bài viết sâu hơn, bạn có thể custom.
Vậy là chúng ta đã cài đặt và sử dụng zabbix cơ bản. Mình sẽ làm nhiều hướng dẫn hơn về các kỹ năng các tool khác để giúp bạn tối ưu được những tác vụ cũng như tiết kiệm những chi phí khi phát triển phần mềm. Thanks.
Mọi thắc mắc bạn có thể liên hệ:
Email: [email protected]