Giám sát máy chủ với Munin và Monit trên Debian

theanh

Administrator
Nhân viên
Trong bài viết này, tôi sẽ mô tả cách bạn có thể giám sát máy chủ Debian 10 (Buster) của mình bằng Munin và Monit. Munin tạo ra các biểu đồ nhỏ gọn về hầu hết mọi khía cạnh của máy chủ (tải trung bình, sử dụng bộ nhớ, sử dụng CPU, thông lượng MySQL, lưu lượng mạng, v.v.) mà không cần cấu hình nhiều, trong khi Monit kiểm tra tính khả dụng của các dịch vụ như Apache, MySQL, Postfix và thực hiện hành động thích hợp như khởi động lại nếu thấy dịch vụ không hoạt động như mong đợi. Kết hợp cả hai sẽ cho bạn khả năng giám sát hoàn chỉnh: biểu đồ cho phép bạn xem các vấn đề hiện tại hoặc sắp xảy ra (ví dụ: "Chúng tôi cần một máy chủ lớn hơn sớm thôi, tải trung bình của chúng tôi đang tăng nhanh chóng.") và một chương trình giám sát đảm bảo tính khả dụng của các dịch vụ được giám sát.

Mặc dù bạn có thể giám sát nhiều máy chủ bằng Munin, chúng tôi sẽ chỉ thảo luận về việc giám sát hệ thống được cài đặt Munin tại đây.

Hướng dẫn này được viết cho Debian 10 (Buster), nhưng cấu hình cũng có thể áp dụng cho các bản phân phối khác như Ubuntu với một số thay đổi nhỏ.

1 Lưu ý sơ bộ​

Tất cả các lệnh trong hướng dẫn này đều được chạy dưới dạng người dùng root. Đăng nhập vào máy chủ của bạn dưới dạng root bằng SSH hoặc mở cửa sổ terminal. Nếu bạn đăng nhập với tư cách là người dùng khác với root, hãy sử dụng lệnh
Mã:
su -
để trở thành người dùng root trước khi tiếp tục.

Tên máy chủ của hệ thống của chúng tôi là server1.example.com và chúng tôi có một trang web www.example.com trên đó với gốc tài liệu /var/www/www.example.com/web.

Đảm bảo rằng hệ thống được cập nhật trước khi bạn bắt đầu cài đặt Munin, hãy chạy:
Mã:
apt cập nhật
apt upgrade
Apache được sử dụng để hiển thị các trang Munin, mô-đun apache fcgid là bắt buộc đối với tính năng thu phóng đồ thị Munin. Cài đặt apache và module fcgid bằng apt.
Mã:
apt install apache2 libcgi-fast-perl libapache2-mod-fcgid
Kích hoạt module fcgid trong apache.
Mã:
a2enmod fcgid

2 Cài đặt và cấu hình Munin​

Để cài đặt Munin trên Debian, chúng ta thực hiện như sau:
Mã:
apt install munin munin-node munin-plugins-extra
Khi máy chủ đang chạy MySQL hoặc MariaDB, hãy kích hoạt một số plugin Munin bổ sung để theo dõi MySQL:
Mã:
cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/mysql_ mysql_
ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes
ln -s /usr/share/munin/plugins/mysql_innodb mysql_innodb
ln -s /usr/share/munin/plugins/mysql_isam_space_ mysql_isam_space_
ln -s /usr/share/munin/plugins/mysql_queries mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads mysql_threads
Tiếp theo, chúng ta phải chỉnh sửa tệp cấu hình Munin /etc/munin/munin.conf. Bỏ chú thích các dòng dbdir, htmldir, logdir, rundir và tmpldir (các giá trị mặc định là ổn). Chúng tôi muốn Munin sử dụng tên server1.example.com thay vì localhost.localdomain trong đầu ra HTML, do đó chúng tôi thay thế localhost.localdomain bằng server1.example.com trong phần cây máy chủ đơn giản. Nếu không có các bình luận, tệp đã thay đổi trông như thế này:
Mã:
nano /etc/munin/munin.conf
Mã:
# Tệp cấu hình ví dụ cho Munin, được tạo bởi 'make build'

# Ba biến tiếp theo chỉ định vị trí của cơ sở dữ liệu RRD
#, đầu ra HTML, nhật ký và tệp khóa/pid. Tất cả
# phải có thể ghi được bởi người dùng đang chạy munin-cron. Tất cả đều được
# mặc định theo các giá trị bạn thấy ở đây.
#
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin

# Tìm kiếm các mẫu HTML ở đâu
#
tmpldir /etc/munin/templates

# Tìm kiếm các tệp www tĩnh ở đâu
#
#staticdir /etc/munin/static

# Các tệp cgi tạm thời ở đây. lưu ý rằng nó phải được ghi bởi
# người dùng cgi (thường là nobody hoặc httpd).
#
# cgitmpdir /var/lib/munin/cgi-tmp# (Chính xác là một) thư mục để bao gồm tất cả các tệp từ đó.includedir /etc/munin/munin-conf.d[...]# một cây máy chủ đơn giản
[server1.example.com]
 địa chỉ 127.0.0.1
 use_node_name có[...]
Chúng ta cần tìm tệp cấu hình Apache 2.4 cho Munin /etc/munin/apache24.conf - tệp này định nghĩa một bí danh có tên là munin cho thư mục đầu ra HTML của Munin /var/cache/munin/www, nghĩa là chúng ta có thể truy cập munin từ tất cả các trang web trên máy chủ này bằng cách sử dụng đường dẫn tương đối /munin (ví dụ: http://www.example.com/munin).

Cấu hình Apache Munin không được bật theo mặc định, cấu hình này đã được thay đổi từ DebianWheezy thành Jessie. Thư mục cấu hình mới là /etc/apache2/conf-enabled thay vì /etc/apache2/conf.d được sử dụng trong các phiên bản cũ hơn như Wheezy và Squeeze.

Chạy các lệnh này để bật và tải cấu hình vào apache.
Mã:
cd/etc/apache2/conf-enabled/
ln -s /etc/munin/apache24.conf munin.conf
service apache2 restart
Hãy đảm bảo rằng bạn bình luận dòng Require localvà thêm Require all grantedvà Options FollowSymLinks SymLinksIfOwnerMatch thay vào đó (nếu không, bạn sẽ chỉ có thể truy cập đầu ra Munin từ localhost):
Mã:
nano /etc/munin/apache24.conf
Mã:
Alias /munin /var/cache/munin/www

 # Yêu cầu cục bộ
 Yêu cầu tất cả đã cấp
 Tùy chọn FollowSymLinks SymLinksIfOwnerMatch


ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph

 # Yêu cầu cục bộ
 Yêu cầu tất cả đã cấp
 Tùy chọn FollowSymLinks SymLinksIfOwnerMatch
 
 SetHandler fcgid-script
 
 
 SetHandler cgi-script
Khởi động lại Apache:
Mã:
systemctl restart apache2.service
Sau đó khởi động lại Munin:
Mã:
systemctl restart munin-node.service
Bây giờ hãy đợi vài phút để Munin có thể tạo ra đầu ra đầu tiên của nó, sau đó hãy truy cập http://www.example.com/munin/ trong trình duyệt của bạn và bạn sẽ thấy số liệu thống kê đầu tiên:



(Đây chỉ là một đoạn trích nhỏ trong số nhiều đồ họa mà munin tạo ra...)

3 Bảo vệ bằng mật khẩu cho thư mục đầu ra của Munin (Tùy chọn nhưng được khuyến nghị cao)​

Bây giờ, bạn nên bảo vệ bằng mật khẩu cho thư mục đầu ra của Munin trừ khi bạn muốn mọi người có thể xem mọi số liệu thống kê nhỏ về máy chủ của mình.

Để thực hiện việc này, chúng ta phải tạo tệp mật khẩu /etc/munin/munin-htpasswd. Chúng ta muốn đăng nhập bằng tên người dùng admin, vì vậy chúng ta thực hiện như sau:
Mã:
htpasswd -c /etc/munin/munin-htpasswd admin
Nhập mật khẩu cho admin. Sau đó mở lại /etc/munin/apache24.conf...
Mã:
nano /etc/munin/apache24.conf
... bình luận "Require all granted" và thêm các dòng mà tôi đã đánh dấu màu đỏ:
Mã:
Alias /munin /var/cache/munin/www

 # Require local
 # Require all granted
 AuthUserFile /etc/munin/munin-htpasswd
 AuthName "Munin"
 AuthType Basic
 Require valid-user
 Options None


ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph

 # Yêu cầu cục bộ
 # Yêu cầu tất cả đã cấp
 AuthUserFile /etc/munin/munin-htpasswd
 AuthName "Munin"
 AuthType Basic
 Yêu cầu người dùng hợp lệ
 
 SetHandler fcgid-script
 
 
 SetHandler cgi-script
Sau đó khởi động lại Apache:
Mã:
systemctl restart apache2.service

4 Bật các module bổ sung trong Munin​

Lệnh Munin "munin-node-configure --suggest" có thể được sử dụng để nhận các đề xuất cho các module Munin bổ sung có thể được bật trên máy chủ. Chạy:
Mã:
munin-node-configure --suggest
Đầu ra sẽ tương tự như sau:



Cột "đã sử dụng" hiển thị liệu một mô-đun có được bật hay không, cột "Gợi ý" hiển thị liệu máy chủ có chạy dịch vụ có thể được mô-đun này giám sát hay không. Tạo một liên kết tượng trưng cho mô-đun trong /etc/munin/plugins để bật nó.

Ở đây tôi sẽ bật các mô-đun apache_* chẳng hạn:
Mã:
cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volume
Khởi động lại Munin để tải cấu hình mới.
Mã:
systemctl restart munin-node.service

5 Cài đặt và cấu hình Monit​

Monit có sẵn trong kho lưu trữ backport Debian Buster. Kho lưu trữ này không được bật theo mặc định, vì vậy chúng ta phải thêm nó trước. Chạy lệnh này:
Mã:
echo 'deb http://ftp.de.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.list
và sau đó cập nhật danh sách gói bằng:
Mã:
apt update
Để cài đặt Monit, chúng ta thực hiện như sau:
Mã:
apt install monit
Bây giờ chúng ta phải chỉnh sửa /etc/monit/monitrc. /etc/monit/monitrc mặc định có rất nhiều ví dụ và bạn có thể tìm thêm các ví dụ về cấu hình trên http://mmonit.com/monit/documentation/. Tuy nhiên, trong trường hợp của tôi, tôi muốn theo dõi proftpd, sshd, mysql, apache và postfix, tôi muốn bật giao diện web Monit trên cổng 2812, tôi muốn có giao diện web https, tôi muốn đăng nhập vào giao diện web bằng tên người dùng admin và mật khẩu howtoforge, và tôi muốn Monit gửi cảnh báo qua email đến root@localhost, vì vậy tệp của tôi trông như thế này (tôi đã thêm các ví dụ cho các daemon khác vào cấu hình để bạn có thể điều chỉnh tệp theo nhu cầu của mình):
Mã:
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
nano /etc/monit/monitrc
Mã:
đặt daemon 60
đặt logfile syslog facility log_daemon
đặt mailserver localhost
đặt mail-format { từ: [emailprotected] }
đặt alert root@localhost
đặt httpd port 2812 và
BẬT SSL
PEMFILE /var/certs/monit.pem
cho phép admin:howtoforge

kiểm tra tiến trình sshd với pidfile /var/run/sshd.pid
khởi động chương trình "/usr/sbin/service ssh start"
dừng chương trình "/usr/sbin/service ssh stop"
nếu cổng 22 giao thức ssh bị lỗi thì khởi động lại
nếu khởi động lại 5 lần trong 5 chu kỳ thì hết thời gian chờ

kiểm tra tiến trình apache với pidfile /var/run/apache2/apache2.pid
nhóm www
khởi động chương trình = "/usr/sbin/service apache2 start"
dừng chương trình = "/usr/sbin/service apache2 stop"
 nếu lỗi máy chủ lưu trữ cục bộ cổng 80 giao thức http
 và yêu cầu "/monit/token" sau đó khởi động lại
 nếu cpu lớn hơn 60% trong 2 chu kỳ thì cảnh báo
 nếu cpu > 80% trong 5 chu kỳ thì khởi động lại
 nếu totalmem > 500 MB trong 5 chu kỳ thì khởi động lại
 nếu children > 250 sau đó khởi động lại
 nếu loadavg(5min) lớn hơn 10 trong 8 chu kỳ thì dừng
 nếu 3 lần khởi động lại trong vòng 5 chu kỳ thì hết thời gian chờ
 
# ------------------------------------------------------------------------------------------------
# LƯU Ý: Thay example.pid bằng tên pid của máy chủ của bạn, tên phụ thuộc vào tên máy chủ
# ------------------------------------------------------------------------------------------------
#kiểm tra quy trình mysql bằng tệp pid /var/lib/mysql/example.pid
# nhóm cơ sở dữ liệu
# bắt đầu chương trình = "/usr/sbin/dịch vụ mysql bắt đầu"
# dừng chương trình = "/usr/sbin/dịch vụ mysql dừng"
# nếu máy chủ 127.0.0.1 cổng 3306 bị lỗi thì khởi động lại
# nếu 5 lần khởi động lại trong vòng 5 chu kỳ thì hết thời gian chờ

#kiểm tra quy trình proftpd bằng tệp pid /var/run/proftpd.pid
# bắt đầu chương trình = "/usr/sbin/service proftpd start"
# stop program = "/usr/sbin/service proftpd stop"
# nếu giao thức ftp cổng 21 bị lỗi thì khởi động lại
# nếu 5 lần khởi động lại trong vòng 5 chu kỳ thì hết thời gian chờ
#
# kiểm tra tiến trình postfix với tệp pid /var/spool/postfix/pid/master.pid
# group mail
# start program = "/usr/sbin/service postfix start"
# stop program = "/usr/sbin/service postfix stop"
# nếu giao thức smtp cổng 25 bị lỗi thì khởi động lại
# nếu 5 lần khởi động lại trong vòng 5 chu kỳ thì hết thời gian chờ
#
# kiểm tra tiến trình nginx với tệp pid /var/run/nginx.pid
# start program = "/usr/sbin/service nginx start"
# stop program = "/usr/sbin/service nginx dừng lại"
# nếu máy chủ 127.0.0.1 cổng 80 bị lỗi thì khởi động lại
#
#kiểm tra quy trình memcached với pidfile /var/run/memcached.pid
# bắt đầu chương trình = "/usr/sbin/dịch vụ memcached bắt đầu"
# dừng chương trình = "/usr/sbin/dịch vụ memcached dừng lại"
# nếu máy chủ 127.0.0.1 cổng 11211 bị lỗi thì khởi động lại
#
#kiểm tra quy trình pureftpd với pidfile /var/run/pure-ftpd/pure-ftpd.pid
# bắt đầu chương trình = "/usr/sbin/dịch vụ pure-ftpd-mysql bắt đầu"
# dừng chương trình = "/usr/sbin/dịch vụ pure-ftpd-mysql dừng lại"
# nếu cổng 21 giao thức ftp bị lỗi thì khởi động lại
# nếu 5 lần khởi động lại trong vòng 5 chu kỳ thì timeout
#
#kiểm tra tiến trình được đặt tên bằng pidfile /var/run/named/named.pid
# start program = "/usr/sbin/service bind9 start"
# stop program = "/usr/sbin/service bind9 stop"
# nếu host 127.0.0.1 cổng 53 lỗi, nhập giao thức tcp dns rồi khởi động lại
# nếu host 127.0.0.1 cổng 53 lỗi, nhập giao thức udp dns rồi khởi động lại
# nếu khởi động lại 5 lần trong 5 chu kỳ thì timeout
#
#kiểm tra tiến trình ntpd bằng pidfile /var/run/ntpd.pid
# start program = "/usr/sbin/service ntp start"
# stop program = "/usr/sbin/service ntp stop"
# nếu host 127.0.0.1 cổng 123 lỗi, nhập udp rồi khởi động lại
# nếu 5 lần khởi động lại trong vòng 5 chu kỳ thì hết thời gian chờ
#
#kiểm tra tiến trình mailman với pidfile /var/run/mailman/mailman.pid
# group mail
# start program = "/usr/sbin/service mailman start"
# stop program = "/usr/sbin/service mailman stop"
#
#kiểm tra tiến trình amavisd với pidfile /var/run/amavis/amavisd.pid
# group mail
# start program = "/usr/sbin/service amavis start"
# stop program = "/usr/sbin/service amavis stop"
# nếu cổng 10024 giao thức smtp bị lỗi thì khởi động lại
# nếu 5 lần khởi động lại trong vòng 5 chu kỳ thì hết thời gian chờ
#
#kiểm tra tiến trình courier-imap với pidfile /var/run/courier/imapd.pid
# group mail
# start program = "/usr/sbin/service courier-imap start"
# stop program = "/usr/sbin/service courier-imap stop"
# nếu lỗi máy chủ cục bộ cổng 143, nhập tcp giao thức imap rồi khởi động lại
# nếu 5 lần khởi động lại trong vòng 5 chu kỳ thì hết thời gian chờ
#
#kiểm tra quy trình courier-imap-ssl với tệp pid /var/run/courier/imapd-ssl.pid
# nhóm thư
# start program = "/usr/sbin/service courier-imap-ssl start"
# stop program = "/usr/sbin/service courier-imap-ssl stop"
# nếu lỗi máy chủ cục bộ cổng 993, nhập tcpssl sslauto giao thức imap rồi khởi động lại
# nếu 5 lần khởi động lại trong vòng 5 chu kỳ thì hết thời gian chờ
#
#kiểm tra quy trình courier-pop3 với tệp pid /var/run/courier/pop3d.pid
# group mail
# start program = "/usr/sbin/service courier-pop start"
# stop program = "/usr/sbin/service courier-pop stop"
# nếu lỗi máy chủ cục bộ cổng 110 nhập giao thức tcp pop sau đó khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ sau đó hết thời gian chờ
#
# kiểm tra quy trình courier-pop3-ssl với tệp pid /var/run/courier/pop3d-ssl.pid
# group mail
# start program = "/usr/sbin/service courier-pop-ssl start"
# stop program = "/usr/sbin/service courier-pop-ssl stop"
# nếu lỗi máy chủ cục bộ cổng 995 nhập giao thức tcpssl sslauto pop sau đó khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ sau đó timeout
#
#kiểm tra tiến trình dovecot với pidfile /var/run/dovecot/master.pid
# thư nhóm
# bắt đầu chương trình = "/usr/sbin/dịch vụ dovecot bắt đầu"
# dừng chương trình = "/usr/sbin/dịch vụ dovecot dừng"
# nếu máy chủ cục bộ cổng 993 lỗi, nhập tcpssl sslauto giao thức imap sau đó khởi động lại
# nếu khởi động lại 5 lần trong 5 chu kỳ thì timeout
Tệp cấu hình khá dễ hiểu; nếu bạn không chắc chắn về một tùy chọn, hãy xem tài liệu Monit: http://mmonit.com/monit/documentation/monit.html

Trong phần apache của cấu hình Monit, bạn sẽ thấy nội dung sau:
Mã:
nếu máy chủ cục bộ không thành công, giao thức http cổng 80 và yêu cầu "/monit/token" thì hãy khởi động lại
điều này có nghĩa là Monit sẽ cố gắng kết nối với máy chủ cục bộ trên cổng 80 và cố gắng truy cập tệp /monit/token là /var/www/html/monit/token vì thư mục gốc tài liệu của trang web của chúng tôi là /var/www/html.Nếu Monit không thành công, điều đó có nghĩa là Apache không chạy và Monit sẽ khởi động lại Apache. Bây giờ chúng ta phải tạo tệp /var/www/html/monit/token và viết một chuỗi ngẫu nhiên vào đó:
Mã:
mkdir /var/www/html/monit
echo "hello" > /var/www/html/monit/token
Tiếp theo, chúng ta tạo chứng chỉ pem (/var/certs/monit.pem) cần thiết cho giao diện web Monit được mã hóa SSL:
Mã:
mkdir /var/certs
cd /var/certs
Chúng ta cần tệp cấu hình OpenSSL để tạo chứng chỉ của mình. Nó có thể trông như thế này:
Mã:
nano /var/certs/monit.cnf
Mã:
# create RSA certs - Server[ req ]default_bits = 2048encrypt_key = yesdistinguished_name = req_dnx509_extensions = cert_type[ req_dn ]countryName = Tên quốc gia (mã 2 chữ cái)countryName_default = MOstateOrProvinceName = Tên tiểu bang hoặc tỉnh (tên đầy đủ)stateOrProvinceName_default = MonitorialocalityName = Tên địa phương (ví dụ: thành phố)localityName_default = MonittownorganizationName = Tên tổ chức (ví dụ: công ty)organizationName_default = Monit Inc.organizationalUnitName = Tên đơn vị tổ chức (ví dụ: bộ phận)organizationalUnitName_default = Bộ phận công nghệ giám sátcommonName = Tên chung (FQDN của server)commonName_default = server.monit.moemailAddress = Địa chỉ emailemailAddress_default = [emailprotected][ cert_type ]nsCertType = server
Bây giờ chúng ta tạo chứng chỉ như thế này:
Mã:
openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem
Mã:
openssl dhparam 2048 >> /var/certs/monit.pem
Mã:
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
Mã:
chmod 600 /var/certs/monit.pem
Cuối cùng, chúng ta có thể khởi động Monit:
Mã:
service monit restart
Bây giờ hãy trỏ trình duyệt của bạn tới https://www.example.com:2812/ (đảm bảo rằng cổng 2812 không bị tường lửa của bạn chặn), đăng nhập bằng admin và howtoforge, và bạn sẽ thấy giao diện web của Monit. Nó sẽ trông như thế này:



(Màn hình chính)





(Trang trạng thái SSHd)

Tùy thuộc vào cấu hình của bạn trong /etc/monit/monitrc, monit sẽ khởi động lại các dịch vụ của bạn nếu chúng bị lỗi và gửi email thông báo nếu ID quy trình của các dịch vụ thay đổi, v.v.

Để biết trạng thái Monit trên shell, hãy chạy lệnh "monit status":
Mã:
monit status
Lệnh sẽ hiển thị trạng thái của tất cả các dịch vụ được giám sát.


6 Liên kết​

 
Back
Bên trên