Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách thêm máy chủ mới để Icinga 2 giám sát và cách các dịch vụ của máy chủ, chẳng hạn như máy chủ web HTTP, có thể được Icinga giám sát. Tôi cũng sẽ chỉ cho bạn cách tạo lệnh plugin Icinga tùy chỉnh của riêng bạn để giám sát các dịch vụ UDP trong cơ sở hạ tầng mạng của bạn.
Icinga 2 cung cấp cơ sở hạ tầng plug-in cho phép triển khai kiểm tra máy chủ và dịch vụ cũng như thông báo dễ dàng. Thực tế này cho phép quản trị viên hệ thống và lập trình viên xây dựng chức năng mới cho Icinga 2 và tạo các lệnh đặc biệt chuyên xác minh các khía cạnh khác nhau của máy chủ, dịch vụ mạng hoặc chức năng mạng.
Icinga 2 lưu trữ các định nghĩa Máy chủ với các thuộc tính đối tượng được sử dụng cho các quy tắc dịch vụ, thông báo, sự phụ thuộc và các đối tượng thời gian chết theo lịch trình trong tệp hosts.conf nằm trong thư mục /etc/icinga2/conf.d/. Trong tệp này, bạn có thể thêm một định nghĩa máy chủ mới để quy trình giám sát Icinga2 kiểm tra. Trong ví dụ bên dưới, chúng tôi sẽ thêm một định nghĩa mới để Icinga2 có thể kiểm tra bộ định tuyến cổng mặc định của chúng tôi theo định kỳ để xem nó có trực tuyến hay không thông qua các kiểm tra ICMP.
Đi đến cuối tệp và thêm các dòng sau để thêm định nghĩa máy chủ mới.
Ví dụ, trên bộ định tuyến chính, chúng tôi cũng muốn kiểm tra trạng thái của máy chủ web HTTP được sử dụng để xác thực và thiết lập. Các dòng bên dưới sẽ kiểm tra máy chủ web trên bộ định tuyến để xem máy chủ HTTP có hoạt động không và phản hồi bằng mã HTTP phù hợp.
Để Icinga 2 chọn các định nghĩa Máy chủ mới và bắt đầu giám sát định kỳ tài nguyên mới, bạn cần khởi động lại quy trình bằng cách phát lệnh sau.
Để xác minh trạng thái của máy chủ mới được thêm vào, trong trường hợp này là bộ định tuyến, hãy đăng nhập vào bảng điều khiển Web Icinga 2 và điều hướng đến Tổng quan -> Máy chủ. Ở mặt phẳng bên phải, bạn sẽ thấy trạng thái của máy chủ mới được thêm vào, như minh họa trong hình ảnh bên dưới mô tả trạng thái bộ định tuyến của chúng tôi. Kiểm tra máy chủ về cơ bản được thực hiện thông qua giao thức ICMP và Icinga2 sẽ hiển thị thời gian khứ hồi trung bình cho một máy chủ trong bảng điều khiển web.
Nếu bạn muốn hiển thị trạng thái kiểm tra dịch vụ HTTP của máy chủ, hãy điều hướng đến Tổng quan -> Nhóm dịch vụ và nhấn vào Kiểm tra HTTP. Ở mặt phẳng bên phải, bạn sẽ thấy trạng thái của dịch vụ HTTP của bộ định tuyến, như minh họa trong ảnh chụp màn hình sau.
Icinga 2 đi kèm với một loạt các lệnh được xác định trước có thể được sử dụng để giám sát nhiều dịch vụ khác nhau. Nhưng những lệnh mặc định đó đôi khi không đủ để kiểm tra các dịch vụ tùy chỉnh. Trong trường hợp này, một cách tiếp cận là tạo tập lệnh lệnh tùy chỉnh của riêng bạn mà Icinga 2 có thể gọi để giám sát dịch vụ. Trong ví dụ bên dưới, chúng tôi sẽ chỉ cho bạn cách thêm tập lệnh lệnh tùy chỉnh mới để xác minh trạng thái của các dịch vụ UDP khác nhau trên mạng của bạn. Lệnh tùy chỉnh phải được tham số hóa và phải chứa ít nhất hai tham số, dưới dạng –H tên máy chủ hoặc IP và –p số cổng. Tập lệnh lệnh tùy chỉnh để xác minh cổng dịch vụ UDP phải được đặt trong thư mục /usr/lib/nagios/plugins/ và phải có nội dung như đã khai báo trong mẫu bên dưới.
check_udpport .
Chúng ta hãy thử tìm hiểu cách thức hoạt động của tập lệnh này. Như bạn thấy, plugin này không gì khác ngoài một tập lệnh Bash đơn giản. Chúng ta sử dụng biểu thức điều khiển while để lặp qua hai tham số được xác định bởi các chữ cái H và p. Hai chữ cái biến shell H và p được tham số hóa và phân tích cú pháp dưới dạng đối số dòng lệnh bằng cách sử dụng câu lệnh case. Câu lệnh case sẽ kiểm tra xem các tham số có tồn tại không và sẽ khai báo chúng cho các biến addr và port. Tiếp theo, các biến $addr và $port sẽ được thêm vào dưới dạng tùy chọn lệnh cho lệnh netcat, đổi lại sẽ thăm dò xem số cổng, được xác định trong biến $port, có được mở cho máy chủ có địa chỉ IP được xác định bởi biến $addr hay không. Đầu ra của lệnh netcat và các lỗi cuối cùng không có lợi cho plugin này, vì vậy nó sẽ bị loại bỏ khỏi tệp Linux blackhole /dev/null. Những gì chúng ta cần là mã thoát lệnh netcat. Sau khi netcat kiểm tra cổng trên máy chủ, sẽ luôn trả về mã thoát 0 trong trường hợp cổng UDP được thăm dò được mở. Phần còn lại của lệnh khá đơn giản. Câu lệnh điều kiện trường hợp if-else sẽ in ra nội dung sau: nếu cổng UDP được mở trên địa chỉ IP đã chỉ định, hãy in chuỗi có nội dung 'cổng được mở' cho địa chỉ IP của máy chủ đó cùng với việc thêm mã thoát 0. Mã thoát 0 luôn là mã trả về thành công hoặc không có lỗi của một quy trình trong Linux. Nếu cổng UDP không mở (mã thoát của netcat sẽ khác 0), hãy in chuỗi có nội dung 'cổng không mở' cho máy chủ và thêm mã thoát là 2. Mã thoát được thêm vào sau mỗi chuỗi được in echo trong tập lệnh này có ý nghĩa rất lớn đối với các lần kiểm tra Icinga2, như được giải thích bên dưới.
Mã trả về của plugin lệnh cho trạng thái dịch vụ hoặc trạng thái máy chủ trong Icinga 2:
0 = OK đối với các dịch vụ và LÊN đối với các máy chủ
1 = CẢNH BÁO đối với các dịch vụ và LÊN hoặc XUỐNG/KHÔNG THỂ ĐẠT ĐƯỢC đối với các máy chủ (máy chủ đang dao động hoặc thay đổi trạng thái thường xuyên)
2 = QUAN TRỌNG đối với các dịch vụ và XUỐNG/KHÔNG THỂ ĐẠT ĐƯỢC đối với các máy chủ
3 = KHÔNG XÁC ĐỊNH XUỐNG/KHÔNG THỂ ĐẠT ĐƯỢC
Về cơ bản, Icinga 2 sẽ thực thi tập lệnh này với tham số máy chủ và cổng và nó sẽ trả về hai trạng thái: hoặc là cổng UDP không thể truy cập được và sẽ cảnh báo bạn rằng dịch vụ UDP của máy chủ là Quan trọng hoặc là cổng UDP có thể truy cập được và sẽ thông báo cho bạn rằng dịch vụ UDP đang chạy trong điều kiện tốt và ổn.
Sau khi bạn đã chỉnh sửa tệp tập lệnh, hãy lưu và đóng tệp và đảm bảo tệp có thể được khởi chạy trong quá trình thực thi bằng cách thêm quyền thực thi bằng lệnh sau.
Sau đó, để kiểm tra xem tập lệnh có hoạt động như mong đợi hay không, hãy chạy lệnh trên một cổng UDP đã mở và một cổng UDP đã đóng trên một máy chủ trong mạng của bạn bằng cách đưa ra cú pháp bên dưới.
Tại đây, máy chủ TFTP được kiểm tra đối với máy chủ 192.168.1.2.
Mô phỏng các lần kiểm tra đối với một cổng UDP mà bạn biết chắc chắn là đã đóng
Để plugin tùy chỉnh mới này được sử dụng rộng rãi trong Icinga 2, hãy thêm định nghĩa lệnh mới vào tệp cấu hình lệnh Icinga 2, như được hiển thị trong ví dụ bên dưới.
Đi đến cuối tệp này và thêm định nghĩa lệnh như sau:
Tên lệnh sẽ được sử dụng trong cấu hình Icinga 2 để gọi lệnh ckeck_udpport sẽ là “myudp”. Chúng ta không cần chỉ định địa chỉ khi gọi lệnh để định nghĩa máy chủ dịch vụ vì địa chỉ này được mã hóa cứng bởi biến macro $address$ của Icinga 2.
Để kiểm tra xem lệnh có hoạt động như mong đợi hay không, hãy thêm định nghĩa dịch vụ mới cho máy chủ để kiểm tra xem dịch vụ UDP cụ thể có được mở trên máy chủ đó hay không. Ví dụ, để kiểm tra xem cổng DHCP có được mở cho máy chủ 192.168.1.2 hay không, hãy thêm định nghĩa bên dưới vào tệp hosts.conf của Icinga2.
Sau đó, khởi động lại Icinga 2 để phản ánh các thay đổi và điều hướng đến bảng điều khiển Web của Icinga 2, Tổng quan -> Máy chủ, nhấp vào máy chủ cụ thể của bạn và xác minh trạng thái của trạng thái dịch vụ UDP, như được hiển thị trong ảnh chụp màn hình bên dưới.
Vậy là xong! Bạn đã thêm thành công một máy chủ và các dịch vụ của máy chủ đó sẽ được ứng dụng giám sát mạng Icinga 2 kiểm tra định kỳ. Để biết các cấu hình tùy chỉnh khác liên quan đến công cụ giám sát Icinga 2 và tập lệnh lệnh tùy chỉnh, hãy truy cập trang tài liệu theo địa chỉ sau: https://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check-commands
Icinga 2 cung cấp cơ sở hạ tầng plug-in cho phép triển khai kiểm tra máy chủ và dịch vụ cũng như thông báo dễ dàng. Thực tế này cho phép quản trị viên hệ thống và lập trình viên xây dựng chức năng mới cho Icinga 2 và tạo các lệnh đặc biệt chuyên xác minh các khía cạnh khác nhau của máy chủ, dịch vụ mạng hoặc chức năng mạng.
Icinga 2 lưu trữ các định nghĩa Máy chủ với các thuộc tính đối tượng được sử dụng cho các quy tắc dịch vụ, thông báo, sự phụ thuộc và các đối tượng thời gian chết theo lịch trình trong tệp hosts.conf nằm trong thư mục /etc/icinga2/conf.d/. Trong tệp này, bạn có thể thêm một định nghĩa máy chủ mới để quy trình giám sát Icinga2 kiểm tra. Trong ví dụ bên dưới, chúng tôi sẽ thêm một định nghĩa mới để Icinga2 có thể kiểm tra bộ định tuyến cổng mặc định của chúng tôi theo định kỳ để xem nó có trực tuyến hay không thông qua các kiểm tra ICMP.
Mã:
nano /etc/icinga2/conf.d/hosts.conf
Mã:
object Host "Router" {
address = "192.168.1.1"
check_command = "hostalive"
}
Mã:
object Service "http" {
host_name = "Router"
check_command = "http"
}
Để Icinga 2 chọn các định nghĩa Máy chủ mới và bắt đầu giám sát định kỳ tài nguyên mới, bạn cần khởi động lại quy trình bằng cách phát lệnh sau.
Mã:
systemctl restart icinga2.service
Nếu bạn muốn hiển thị trạng thái kiểm tra dịch vụ HTTP của máy chủ, hãy điều hướng đến Tổng quan -> Nhóm dịch vụ và nhấn vào Kiểm tra HTTP. Ở mặt phẳng bên phải, bạn sẽ thấy trạng thái của dịch vụ HTTP của bộ định tuyến, như minh họa trong ảnh chụp màn hình sau.
Icinga 2 đi kèm với một loạt các lệnh được xác định trước có thể được sử dụng để giám sát nhiều dịch vụ khác nhau. Nhưng những lệnh mặc định đó đôi khi không đủ để kiểm tra các dịch vụ tùy chỉnh. Trong trường hợp này, một cách tiếp cận là tạo tập lệnh lệnh tùy chỉnh của riêng bạn mà Icinga 2 có thể gọi để giám sát dịch vụ. Trong ví dụ bên dưới, chúng tôi sẽ chỉ cho bạn cách thêm tập lệnh lệnh tùy chỉnh mới để xác minh trạng thái của các dịch vụ UDP khác nhau trên mạng của bạn. Lệnh tùy chỉnh phải được tham số hóa và phải chứa ít nhất hai tham số, dưới dạng –H tên máy chủ hoặc IP và –p số cổng. Tập lệnh lệnh tùy chỉnh để xác minh cổng dịch vụ UDP phải được đặt trong thư mục /usr/lib/nagios/plugins/ và phải có nội dung như đã khai báo trong mẫu bên dưới.
Mã:
trích đoạn tệp nano /usr/lib/nagios/plugins/check_udpport
Mã:
#!/bin/bash
while getopts H:p: option
do
case "${option}"
in
H) addr=${OPTARG};;
p) port=${OPTARG};;
esac
done
/bin/nc -vz -u "$addr" "$port" > /dev/null 2>&1
stat=`echo $?`
nếu kiểm tra $stat -eq 0; thì
echo "Cổng $port được mở trên $addr"
thoát 0
nếu không
echo "Cổng $port không được mở trên $addr"
thoát 2
fi
Chúng ta hãy thử tìm hiểu cách thức hoạt động của tập lệnh này. Như bạn thấy, plugin này không gì khác ngoài một tập lệnh Bash đơn giản. Chúng ta sử dụng biểu thức điều khiển while để lặp qua hai tham số được xác định bởi các chữ cái H và p. Hai chữ cái biến shell H và p được tham số hóa và phân tích cú pháp dưới dạng đối số dòng lệnh bằng cách sử dụng câu lệnh case. Câu lệnh case sẽ kiểm tra xem các tham số có tồn tại không và sẽ khai báo chúng cho các biến addr và port. Tiếp theo, các biến $addr và $port sẽ được thêm vào dưới dạng tùy chọn lệnh cho lệnh netcat, đổi lại sẽ thăm dò xem số cổng, được xác định trong biến $port, có được mở cho máy chủ có địa chỉ IP được xác định bởi biến $addr hay không. Đầu ra của lệnh netcat và các lỗi cuối cùng không có lợi cho plugin này, vì vậy nó sẽ bị loại bỏ khỏi tệp Linux blackhole /dev/null. Những gì chúng ta cần là mã thoát lệnh netcat. Sau khi netcat kiểm tra cổng trên máy chủ, sẽ luôn trả về mã thoát 0 trong trường hợp cổng UDP được thăm dò được mở. Phần còn lại của lệnh khá đơn giản. Câu lệnh điều kiện trường hợp if-else sẽ in ra nội dung sau: nếu cổng UDP được mở trên địa chỉ IP đã chỉ định, hãy in chuỗi có nội dung 'cổng được mở' cho địa chỉ IP của máy chủ đó cùng với việc thêm mã thoát 0. Mã thoát 0 luôn là mã trả về thành công hoặc không có lỗi của một quy trình trong Linux. Nếu cổng UDP không mở (mã thoát của netcat sẽ khác 0), hãy in chuỗi có nội dung 'cổng không mở' cho máy chủ và thêm mã thoát là 2. Mã thoát được thêm vào sau mỗi chuỗi được in echo trong tập lệnh này có ý nghĩa rất lớn đối với các lần kiểm tra Icinga2, như được giải thích bên dưới.
Mã trả về của plugin lệnh cho trạng thái dịch vụ hoặc trạng thái máy chủ trong Icinga 2:
0 = OK đối với các dịch vụ và LÊN đối với các máy chủ
1 = CẢNH BÁO đối với các dịch vụ và LÊN hoặc XUỐNG/KHÔNG THỂ ĐẠT ĐƯỢC đối với các máy chủ (máy chủ đang dao động hoặc thay đổi trạng thái thường xuyên)
2 = QUAN TRỌNG đối với các dịch vụ và XUỐNG/KHÔNG THỂ ĐẠT ĐƯỢC đối với các máy chủ
3 = KHÔNG XÁC ĐỊNH XUỐNG/KHÔNG THỂ ĐẠT ĐƯỢC
Về cơ bản, Icinga 2 sẽ thực thi tập lệnh này với tham số máy chủ và cổng và nó sẽ trả về hai trạng thái: hoặc là cổng UDP không thể truy cập được và sẽ cảnh báo bạn rằng dịch vụ UDP của máy chủ là Quan trọng hoặc là cổng UDP có thể truy cập được và sẽ thông báo cho bạn rằng dịch vụ UDP đang chạy trong điều kiện tốt và ổn.
Sau khi bạn đã chỉnh sửa tệp tập lệnh, hãy lưu và đóng tệp và đảm bảo tệp có thể được khởi chạy trong quá trình thực thi bằng cách thêm quyền thực thi bằng lệnh sau.
Mã:
chmod +x /usr/lib/nagios/plugins/check_udpport
Tại đây, máy chủ TFTP được kiểm tra đối với máy chủ 192.168.1.2.
Mã:
/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 69
Mã:
/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 68
Để plugin tùy chỉnh mới này được sử dụng rộng rãi trong Icinga 2, hãy thêm định nghĩa lệnh mới vào tệp cấu hình lệnh Icinga 2, như được hiển thị trong ví dụ bên dưới.
Mã:
nano /etc/icinga2/conf.d/commands.conf
Mã:
object CheckCommand "myudp" {
command = [ PluginDir + "/check_udpport" ]
arguments = {
"-H" = "$addr$"
"-p" = "$port$"
}
vars.addr = "$address$"
}
Tên lệnh sẽ được sử dụng trong cấu hình Icinga 2 để gọi lệnh ckeck_udpport sẽ là “myudp”. Chúng ta không cần chỉ định địa chỉ khi gọi lệnh để định nghĩa máy chủ dịch vụ vì địa chỉ này được mã hóa cứng bởi biến macro $address$ của Icinga 2.
Để kiểm tra xem lệnh có hoạt động như mong đợi hay không, hãy thêm định nghĩa dịch vụ mới cho máy chủ để kiểm tra xem dịch vụ UDP cụ thể có được mở trên máy chủ đó hay không. Ví dụ, để kiểm tra xem cổng DHCP có được mở cho máy chủ 192.168.1.2 hay không, hãy thêm định nghĩa bên dưới vào tệp hosts.conf của Icinga2.
Mã:
object Service "dhcp" {
host_name = "Pi.hole"
check_command = "myudp"
vars.port = "67"
}
Sau đó, khởi động lại Icinga 2 để phản ánh các thay đổi và điều hướng đến bảng điều khiển Web của Icinga 2, Tổng quan -> Máy chủ, nhấp vào máy chủ cụ thể của bạn và xác minh trạng thái của trạng thái dịch vụ UDP, như được hiển thị trong ảnh chụp màn hình bên dưới.
Vậy là xong! Bạn đã thêm thành công một máy chủ và các dịch vụ của máy chủ đó sẽ được ứng dụng giám sát mạng Icinga 2 kiểm tra định kỳ. Để biết các cấu hình tùy chỉnh khác liên quan đến công cụ giám sát Icinga 2 và tập lệnh lệnh tùy chỉnh, hãy truy cập trang tài liệu theo địa chỉ sau: https://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check-commands