Giám sát máy chủ với Munin và Monit trên Debian 10
Trong bài viết này, tôi 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 các biểu đồ nhỏ tiện lợi về hầu hết mọi khía cạnh của máy chủ của bạn (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à lấy hành động thích hợp như khởi động lại nếu phát hiện thấy một dịch vụ không hoạt động như mong đợi. Kết hợp cả hai sẽ mang lại cho bạn khả năng giám sát hoàn chỉnh: biểu đồ cho phép bạn thấy các vấn đề hiện tại hoặc sắp xảy ra (ví dụ: “Chúng tôi sớm cần một máy chủ lớn hơn, mức trung bình tải của chúng tôi đang tăng nhanh”) và một cơ quan 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 hơn một máy chủ với Munin, chúng tôi sẽ chỉ thảo luận về việc giám sát hệ thống mà nó được cài đặt tại đây.
Hướng dẫn này được viết cho Debian 10 (Buster), nhưng cấu hình cũng nên áp dụng cho các bản phân phối khác như Ubuntu với những thay đổi nhỏ.
1 Ghi chú sơ bộ
Tất cả các lệnh trong hướng dẫn này được chạy với tư cách người dùng root. Đăng nhập vào máy chủ của bạn với quyền root bằng SSH hoặc mở cửa sổ dòng lệnh. Nếu bạn đăng nhập với tư cách người dùng khác với root, hãy sử dụng lệnh
su -
để trở thành người dùng root, trước khi bạn 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 tài liệu root /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:
apt update
apt upgrade
Apache được sử dụng để hiển thị các trang Munin, cần có mô-đun apache fcgid cho tính năng thu phóng đồ thị Munin. Cài đặt apache và mô-đun fcgid bằng apt.
apt install apache2 libcgi-fast-perl libapache2-mod-fcgid
Bật mô-đun fcgid trong apache.
a2enmod fcgid
2 Cài đặt và cấu hình Munin
Để cài đặt Munin trên Debian, chúng tôi thực hiện như sau:
apt install munin munin-node munin-plugins-extra
Khi máy chủ đang chạy MySQL hoặc MariaDB, hãy bật một vài plugin Munin bổ sung để giám sát MySQL:
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ỏ ghi chú các dòng dbdir , htmldir , logdir , rundir và tmpldir (các giá trị mặc định là tốt). 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ủ lưu trữ đơn giản . Nếu không có nhận xét, tệp đã thay đổi trông giống như sau:
nano /etc/munin/munin.conf
# Tệp cấu hình mẫu cho Munin, được tạo bởi 'make build'
# Ba biến tiếp theo chỉ định vị trí của RRD
# cơ sở dữ liệu, đầu ra HTML, nhật ký và tệp lock / pid. Tất cả họ đều
# phải được người dùng chạy munin-cron ghi được. Họ là tất cả
# được mặc định thành 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
# Nơi để tìm các mẫu HTML
#
tmpldir / etc / munin / templates
# Tìm tệp www tĩnh ở đâu
#
#staticdir / etc / munin / static
# 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à không ai 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ừ. includeir /etc/munin/munin-conf.d [...] # cây chủ đơn giản
[server1.example.com]
địa chỉ 127.0.0.1
use_node_name vâng [...]
Chúng tôi sẽ tìm thấy tệp cấu hình Apache 2.4 cho Munin /etc/munin/apache24.conf – nó xác định bí danh gọi là munin cho thư mục đầu ra HTML của Munin / var / cache / munin / www , nghĩa là chúng tôi 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-enable 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 để kích hoạt và tải cấu hình vào apache.
cd / etc / apache2 / conf-enable /
ln -s /etc/munin/apache24.conf munin.conf
khởi động lại dịch vụ apache2
Đảm bảo bạn nhận xét dòng Yêu cầu cục bộ và thêm Yêu cầu tất cả được cấp và Tùy chọn FollowSymLinks SymLinksIfOwnerMatch thay thế (nếu không bạn sẽ chỉ có thể truy cập đầu ra Munin từ localhost ):
nano /etc/munin/apache24.conf
Bí danh / munin / var / cache / munin / www
<Thư mục / var / cache / munin / www>
# Yêu cầu địa phương
Yêu cầu tất cả được cấp
Tùy chọn Theo dõiSymLinks SymLinksIfOwnerMatch
</Directory>
ScriptAlias / munin-cgi / munin-cgi-graph / usr / lib / munin / cgi / munin-cgi-graph
<Vị trí / munin-cgi / munin-cgi-graph>
# Yêu cầu địa phương
Yêu cầu tất cả được cấp
Tùy chọn Theo dõiSymLinks SymLinksIfOwnerMatch
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule! Mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>
Khởi động lại Apache:
systemctl restart apache2.service
Sau đó khởi động lại Munin:
systemctl restart munin-node.service
Bây giờ, hãy đợi vài phút để Munin có thể tạo ra kết quả đầu tiên, sau đó truy cập http://www.example.com/munin/ trong trình duyệt của bạn và bạn sẽ thấy thống kê đầu tiên:
(Đây chỉ là một đoạn trích nhỏ trong số rất nhiều đồ họa mà munin tạo ra …)
3 Bảo vệ bằng mật khẩu Thư mục đầu ra Munin (Tùy chọn nhưng rất được khuyến khích)
Bây giờ bạn nên bảo vệ bằng mật khẩu thư mục đầu ra munin trừ khi bạn muốn mọi người có thể xem mọi thống kê nhỏ về máy chủ của bạn.
Để 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 tôi muốn đăng nhập bằng quản trị viên tên người dùng, vì vậy chúng tôi thực hiện việc này:
htpasswd -c /etc/munin/munin-htpasswd admin
Nhập mật khẩu cho quản trị viên . Sau đó mở lại /etc/munin/apache24.conf …
nano /etc/munin/apache24.conf
… comment out “Yêu cầu tất cả được cấp và thêm các dòng mà tôi đã đánh dấu màu đỏ: Quảng cáo
Bí danh / munin / var / cache / munin / www
<Thư mục / var / cache / munin / www>
# Yêu cầu địa phương
# Yêu cầu tất cả được cấp
AuthUserFile / etc / munin / munin-htpasswd
AuthName "Munin"
AuthType Basic
Yêu cầu người dùng hợp lệ
Tùy chọn Không có
</Directory>
ScriptAlias / munin-cgi / munin-cgi-graph / usr / lib / munin / cgi / munin-cgi-graph
<Vị trí / munin-cgi / munin-cgi-graph>
# Yêu cầu địa phương
# Yêu cầu tất cả được cấp
AuthUserFile / etc / munin / munin-htpasswd
AuthName "Munin"
AuthType Basic
Yêu cầu người dùng hợp lệ
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule! Mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>
Sau đó khởi động lại Apache:
systemctl restart apache2.service
4 Bật các mô-đun 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 mô-đun Munin bổ sung có thể được bật trên máy chủ. Chạy:
munin-node-configure --suggest
Đầu ra phải tương tự như sau:
Cột “đã sử dụng” hiển thị nếu một mô-đun được bật, cột “Đề xuất” hiển thị nếu máy chủ chạy một dịch vụ mà mô-đun này có thể giám sát. Tạo liên kết biểu tượng cho mô-đun trong / etc / munin / plugins để kích hoạt nó.
Ở đây tôi sẽ kích hoạt các mô-đun apache_ *, ví dụ:
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.
systemctl restart munin-node.service
5 Cài đặt và cấu hình Monit
Monit có sẵn từ kho lưu trữ backports của Debian Buster. Kho lưu trữ này không được kích hoạt theo mặc định, vì vậy chúng tôi phải thêm nó vào trước. Chạy lệnh này:
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 với:
apt update
Để cài đặt Monit, chúng tôi thực hiện như sau:
apt install monit
Bây giờ chúng ta phải chỉnh sửa / etc /osystem / monitrc . Mặc định / etc /osystem / monitrc có rất nhiều ví dụ và bạn có thể tìm thêm các ví dụ 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 quản trị viên và mật khẩu howtoforge , và tôi muốn Monit gửi cảnh báo qua email tới [email protected] , vì vậy tệp của tôi trông giống như thế này (Tôi đã thêm 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):
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
nano /etc/monit/monitrc
thiết lập daemon 60
đặt logfile cơ sở nhật ký hệ thống log_daemon
đặt máy chủ địa phương mailserver
đặt định dạng thư {from: [email protected]}
đặt cảnh báo [email được bảo vệ]
đặt cổng httpd 2812 và
BẬT SSL
PEMFILE /var/certs/monit.pem
cho phép quản trị viên: howtoforge
kiểm tra quá trình sshd với pidfile /var/run/sshd.pid
bắt đầu chương trình "/ usr / sbin / service ssh start"
dừng chương trình "/ usr / sbin / service ssh stop"
nếu không thành công cổng 22 giao thức ssh thì khởi động lại
nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
kiểm tra quy trình apache bằng pidfile /var/run/apache2/apache2.pid
nhóm www
start program = "/ usr / sbin / service apache2 start"
stop program = "/ usr / sbin / service apache2 stop"
nếu không thành công máy chủ lưu trữ địa phương cổng 80 giao thức http
và yêu cầu "/ flags / 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 trẻ em> 250 thì khởi động lại
nếu loadavg (5 phút) lớn hơn 10 trong 8 chu kỳ thì dừng lại
nếu 3 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
# ------------------------------------------------- --------------------------------------------
# LƯU Ý: Thay thế 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ủ
# ------------------------------------------------- --------------------------------------------
#check process mysql với pidfile /var/lib/mysql/example.pid
# cơ sở dữ liệu nhóm
# start program = "/ usr / sbin / service mysql start"
# stop program = "/ usr / sbin / service mysql stop"
# nếu máy chủ không thành công 127.0.0.1 cổng 3306 thì khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#check process proftpd với pidfile /var/run/proftpd.pid
# start program = "/ usr / sbin / service proftpd start"
# stop program = "/ usr / sbin / service proftpd stop"
# nếu không thành công giao thức cổng 21 ftp thì khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
#check process postfix bằng pidfile /var/spool/postfix/pid/master.pid
# thư nhóm
# start program = "/ usr / sbin / service postfix start"
# stop program = "/ usr / sbin / service postfix stop"
# nếu không thành công giao thức cổng 25 smtp thì khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
#check process nginx with pidfile /var/run/nginx.pid
# start program = "/ usr / sbin / service nginx start"
# stop program = "/ usr / sbin / service nginx stop"
# nếu máy chủ không thành công 127.0.0.1 cổng 80 thì khởi động lại
#
#check process memcached với pidfile /var/run/memcached.pid
# start program = "/ usr / sbin / service memcached start"
# stop program = "/ usr / sbin / service memcached stop"
# nếu máy chủ không thành công 127.0.0.1 cổng 11211 thì khởi động lại
#
#check process pureftpd với pidfile /var/run/pure-ftpd/pure-ftpd.pid
# start program = "/ usr / sbin / service pure-ftpd-mysql start"
# stop program = "/ usr / sbin / service pure-ftpd-mysql stop"
# nếu không thành công giao thức cổng 21 ftp thì khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
# kiểm tra quy trình được đặt tên bằng pidfile /var/run/name/name.pid
# start program = "/ usr / sbin / service bind9 start"
# stop program = "/ usr / sbin / service bind9 stop"
# nếu máy chủ không thành công 127.0.0.1 cổng 53 loại giao thức tcp dns rồi khởi động lại
# nếu máy chủ bị lỗi 127.0.0.1 cổng 53, loại giao thức udp dns rồi khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
#check process ntpd with pidfile /var/run/ntpd.pid
# start program = "/ usr / sbin / service ntp start"
# stop program = "/ usr / sbin / service ntp stop"
# nếu máy chủ không thành công 127.0.0.1 cổng 123 gõ udp rồi khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
#check process mailman với pidfile /var/run/mailman/mailman.pid
# thư nhóm
# start program = "/ usr / sbin / service mailman start"
# stop program = "/ usr / sbin / service mailman stop"
#
#check process amavisd với pidfile /var/run/amavis/amavisd.pid
# thư nhóm
# start program = "/ usr / sbin / service amavis start"
# stop program = "/ usr / sbin / service amavis stop"
# nếu cổng 10024 bị lỗi giao thức smtp thì khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
#check process courier-imap with pidfile /var/run/courier/imapd.pid
# thư nhóm
# start program = "/ usr / sbin / service courier-imap start"
# stop program = "/ usr / sbin / service courier-imap stop"
# if not host localhost port 143, nhập giao thức tcp imap rồi khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
#check process courier-imap-ssl with pidfile /var/run/courier/imapd-ssl.pid
# thư nhóm
# start program = "/ usr / sbin / service courier-imap-ssl start"
# stop program = "/ usr / sbin / service courier-imap-ssl stop"
# nếu không thành công máy chủ lưu trữ cục bộ cổng 993 nhập giao thức tcpssl sslauto imap rồi khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
#check process courier-pop3 với pidfile /var/run/courier/pop3d.pid
# thư nhóm
# start program = "/ usr / sbin / service courier-pop start"
# stop program = "/ usr / sbin / service courier-pop stop"
# if host localhost port 110 bị lỗi, gõ giao thức tcp bật lên rồi khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
#check process courier-pop3-ssl with pidfile /var/run/courier/pop3d-ssl.pid
# thư nhóm
# start program = "/ usr / sbin / service courier-pop-ssl start"
# stop program = "/ usr / sbin / service courier-pop-ssl stop"
# nếu không thành công máy chủ lưu trữ cục bộ cổng 995, nhập giao thức tcpssl sslauto bật lên rồi khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
#
#check process dovecot với pidfile /var/run/dovecot/master.pid
# thư nhóm
# start program = "/ usr / sbin / service dovecot start"
# stop program = "/ usr / sbin / service dovecot dừng"
# nếu không thành công máy chủ lưu trữ cục bộ cổng 993 nhập giao thức tcpssl sslauto imap rồi khởi động lại
# nếu 5 khởi động lại trong vòng 5 chu kỳ thì hết thời gian
Tệp cấu hình khá tự giải thích; 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 tìm thấy điều này:
nếu không thành công máy chủ lưu trữ địa phương cổng 80 giao thức http và yêu cầu "/ flags / token", sau đó khởi động lại
điều đó có nghĩa là Monit cố gắng kết nối với localhost trên cổng 80 và cố gắng truy cập vào tệp /osystem / token là / var / www / html /osystem / token bởi vì tài liệu gốc 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 nó. Bây giờ chúng ta phải tạo tệp / var / www / html /osystem / token và viết một số chuỗi ngẫu nhiên vào đó:
mkdir /var/www/html/monit
echo "hello" > /var/www/html/monit/token
Tiếp theo, chúng tôi tạo cert pem ( /var/certs/monit.pem ) chúng tôi cần cho giao diện web Monit được mã hóa SSL:
mkdir /var/certs
cd /var/certs
Chúng tôi 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:
nano /var/certs/monit.cnf
# tạo chứng chỉ RSA - Máy chủ [yêu cầu] default_bits = 2048 mã hóa_key = có Distribute_name = req_dn x509_extensions = cert_type [req_dn] countryName = Tên quốc gia (mã 2 chữ cái) countryName_default = MO stateOrProvinceName = Tên Tiểu bang hoặc Tỉnh (tên đầy đủ) stateOrProvinceName_default = Monitoria localName = Tên địa phương (ví dụ: thành phố) localName_default = Monittown OrganizationName = Tên tổ chức (ví dụ: công ty) OrganizationName_default = Monit Inc. OrganisationUnitName = Tên đơn vị tổ chức (ví dụ: phần) OrganisationUnitName_default = Phòng Công nghệ Giám sát commonName = Tên chung (FQDN của máy chủ của bạn) commonName_default = server.monit.mo emailAddress = Địa chỉ Email emailAddress_default = [email được bảo vệ] [cert_type] nsCertType = máy chủ
Bây giờ chúng ta tạo chứng chỉ như sau:
openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem
openssl dhparam 2048 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 600 /var/certs/monit.pem
Cuối cùng, chúng ta có thể bắt đầu Monit:
service monit restart
Bây giờ, hãy trỏ trình duyệt của bạn đến 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 Monit. Nó sẽ giố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 / signal / monitrc, các dịch vụ của bạn sẽ khởi động lại 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.
Để có trạng thái Monit trên shell, hãy chạy lệnh “trạng thái theo dõi”:
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
- munin: http://munin-monitoring.org/
- theo dõi: http://mmonit.com/monit/