Làm thế nào để giám sát các máy chủ và dịch vụ với Icinga trên Ubuntu 16.04

Giới thiệu

Icinga là một hệ thống giám sát nguồn mở được sử dụng để theo dõi sức khỏe của các máy chủ và dịch vụ được nối mạng. Trong hướng dẫn này, chúng tôi sẽ sử dụng Icinga để thiết lập hai loại cấu hình giám sát khác nhau. Đầu tiên là dựa trên kiểm tra mạng đơn giản của các dịch vụ bên ngoài của máy chủ lưu trữ của bạn, chẳng hạn như thực hiện yêu cầu HTTP định kỳ cho trang web của bạn. Cấu hình khác sử dụng một tác nhân phần mềm chạy trên máy chủ để thu thập thông tin hệ thống chi tiết hơn như tải và số lượng các tiến trình đang chạy.

Điều kiện tiên quyết

Trước khi bắt đầu hướng dẫn này, bạn nên hoàn tất hướng dẫn trước trong loạt bài này, Làm thế nào để cài đặt Icinga và Icinga Web trên Ubuntu 16.04. Điều này sẽ để lại cho bạn với lõi Icinga và giao diện Web Icinga chạy trên một máy chủ duy nhất, mà chúng tôi sẽ gọi là chủ nhân icinga nút trong suốt.

Bạn cũng sẽ cần một số máy chủ để theo dõi. Chúng tôi sẽ sử dụng hai máy chủ Ubuntu 16.04 với Apache được cài đặt cho các ví dụ của chúng tôi. Bạn chỉ có thể sử dụng phần Apache của hướng dẫn LAMP đã đề cập ở trên để thiết lập chúng.

Bước 1 - Thiết lập giám sát máy chủ đơn giản

Một cách đơn giản để giám sát một máy chủ với Icinga là thiết lập kiểm tra thường xuyên các dịch vụ sẵn có bên ngoài của nó. Vì vậy, đối với một máy chủ web, chúng tôi thường xuyên ping địa chỉ IP của máy chủ và cũng cố gắng truy cập một trang web. Điều này sẽ cho chúng tôi biết liệu máy chủ có hoạt động không và máy chủ web có hoạt động chính xác hay không.

Hãy thiết lập giám sát cho máy chủ web. Chọn một trong các máy chủ Apache được đề cập là điều kiện tiên quyết và đảm bảo rằng trang trình giữ chỗ Apache mặc định đang được phân phát đúng cách. Chúng tôi sẽ gọi máy chủ này web-1.example.com. Chúng ta sẽ không cần phải đăng nhập vào nó, tất cả các kiểm tra sức khỏe sẽ được cấu hình và thực thi trên nút chính.

Chú thích: Icinga luôn mặc định sử dụng Tên miền hoàn toàn đủ điều kiện (FQDN) của bất kỳ máy chủ lưu trữ nào đang xử lý. FQDN là tên máy chủ cộng với tên miền của nó, vì vậy web-1.example.com, ví dụ. Nếu bạn không có một miền thích hợp được thiết lập cho một máy chủ, FQDN sẽ giống như web-1.localdomain.

Những điều này là tốt để sử dụng, chỉ cần nhất quán, và nếu bạn không có một "thực" FQDN luôn luôn sử dụng địa chỉ IP của máy chủ trong bất kỳ Icinga address trường bạn định cấu hình.

Đăng nhập vào nút chính. Để thêm một máy chủ mới, chúng tôi cần chỉnh sửa Icinga hosts.conf tập tin. Mở nó trong một trình soạn thảo văn bản:

sudo nano /etc/icinga2/conf.d/hosts.conf

Thao tác này sẽ mở một tệp có một số nhận xét giải thích và một máy chủ lưu trữ khối được xác định. Hiện tại object Host NodeName khối cấu hình xác định chủ nhân icinga host, đó là host chúng tôi đã cài đặt Icinga và Icinga Web. Định vị con trỏ của bạn ở cuối tệp và thêm máy chủ lưu trữ mới:

/etc/icinga2/conf.d/hosts.conf

. . .
object Host "web-1.example.com" {
  import "generic-host"
  address = "web-1_server_ip"
  vars.http_vhosts["http"] = {
    http_uri = "/"
  }
  vars.notification["mail"] = {
    groups = [ "icingaadmins" ]
  }
}

Điều này định nghĩa một máy chủ được gọi là web-1.example.com, nhập một số cấu hình máy chủ lưu trữ mặc định từ một mẫu được gọi là generic-host, trỏ Icinga đến địa chỉ IP chính xác và sau đó xác định một vài biến cho Icinga kiểm tra phản hồi HTTP ở gốc (/) URL và thông báo cho icingaadmins nhóm qua email khi xảy ra sự cố.

Lưu và đóng tệp, sau đó khởi động lại Icinga:

sudo systemctl restart icinga2

Chuyển về giao diện web Icinga trong trình duyệt của bạn. Giao diện tự cập nhật khá nhanh, vì vậy bạn không cần phải làm mới trang. Thông tin máy chủ lưu trữ mới sẽ được điền theo thứ tự ngắn và kiểm tra tình trạng sẽ thay đổi từ Đang chờ xử lý đến Được một khi Icinga thu thập đủ thông tin.

Đây là một cách tuyệt vời để giám sát các dịch vụ bên ngoài trên một máy chủ và có các kiểm tra khác có sẵn cho các máy chủ SSH, SMTP, v.v. Nhưng nó cũng sẽ được tốt đẹp để biết thêm chi tiết về sức khỏe nội bộ của các máy chủ chúng tôi đang theo dõi.

Tiếp theo, chúng tôi sẽ thiết lập giám sát thông qua một đại lý Icinga, vì vậy chúng tôi có thể theo dõi thông tin hệ thống chi tiết hơn.

Bước 2 - Thiết lập Giám sát dựa trên Đại lý

Icinga cung cấp một cơ chế để giao tiếp an toàn giữa nút chính và nút khách để chạy kiểm tra sức khỏe từ xa rộng hơn. Thay vì chỉ biết rằng máy chủ web của chúng tôi đang phục vụ thành công các trang, chúng tôi cũng có thể theo dõi tải CPU, số lượng quy trình, dung lượng đĩa và v.v.

Chúng tôi sẽ thiết lập một máy chủ thứ hai để theo dõi. Chúng tôi sẽ gọi nó web-2.example.com. Chúng ta cần phải cài đặt phần mềm Icinga trên máy từ xa, chạy một số trình thuật sĩ cài đặt để tạo kết nối, sau đó cập nhật một số tệp cấu hình trên nút chính Icinga.

Chú thích: Có rất nhiều cách để kiến ​​trúc sư cài đặt Icinga, hoàn thành với nhiều tầng bậc thầy/vệ tinh/khách hàng các nút, chuyển đổi dự phòng có tính khả dụng cao và nhiều cách để chia sẻ chi tiết cấu hình giữa các nút. Chúng tôi đang thiết lập một cấu trúc hai tầng đơn giản với một bậc thầy nút và nhiều khách hàng nút. Hơn nữa, tất cả cấu hình sẽ được thực hiện trên bậc thầy nút và các lệnh kiểm tra sức khỏe của chúng tôi sẽ được lên lịch trên nút chính và được đẩy tới máy khách. Dự án Icinga gọi thiết lập này Điểm cuối đầu cuối lệnh xuống chế độ.

Thiết lập nút chính

Đầu tiên, chúng ta cần thiết lập nút chính để tạo các kết nối máy khách. Chúng tôi làm điều đó bằng cách chạy thiết lập nút Thuật sĩ trên nút chính của chúng tôi:

sudo icinga2 node wizard

Điều này sẽ bắt đầu một kịch bản yêu cầu chúng tôi một số câu hỏi và thiết lập mọi thứ cho chúng tôi. Trong phần tiếp theo, chúng tôi nhấn ENTER để chấp nhận hầu hết các giá trị mặc định. Các câu trả lời không mặc định được tô sáng. Một số đầu ra thông tin đã bị xóa để làm rõ:

OutputPlease specify if this is a satellite setup ('n' installs a master setup) [Y/n]: n
Starting the Master setup routine...
Please specify the common name (CN) [icinga-master.example.com]: ENTER to accept the default, or type your FQDN
Checking for existing certificates for common name 'icinga-master.example.com'...
Certificates not yet generated. Running 'api setup' now.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
Please specify the API bind host/port (optional): ENTER
Bind Host []: ENTER
Bind Port []: ENTER
Done.

Now restart your Icinga 2 daemon to finish the installation!

Khởi động lại Icinga để hoàn tất việc cập nhật cấu hình:

sudo systemctl restart icinga2

Mở cổng tường lửa để cho phép kết nối bên ngoài với Icinga:

sudo ufw allow 5665

Bây giờ chúng ta sẽ chuyển sang nút máy khách, cài đặt Icinga và chạy cùng một trình hướng dẫn.

Thiết lập nút máy khách

Đăng nhập vào máy chủ mà chúng tôi đang gọi web-2.example.com. Chúng ta cần phải cài đặt kho Icinga một lần nữa, và sau đó cài đặt Icinga. Đây là quy trình tương tự chúng tôi đã sử dụng trên nút chính. Trước tiên hãy cài đặt khóa:

curl -sSL https://packages.icinga.com/icinga.key | sudo apt-key add -

Mở icinga.list tập tin:

sudo nano /etc/apt/sources.list.d/icinga.list

Dán vào chi tiết kho lưu trữ:

/etc/apt/sources.list.d/icinga.list

deb https://packages.icinga.com/ubuntu icinga-xenial main

Lưu và đóng tệp, sau đó cập nhật bộ đệm gói:

sudo apt-get update

Sau đó, cài đặt icinga2. Lưu ý rằng chúng tôi không cần các icinga2-ido-mysql gói mà chúng tôi đã cài đặt trên nút chính:

sudo apt-get install icinga2

Bây giờ chúng tôi chạy qua trình hướng dẫn nút trên máy chủ này, nhưng chúng tôi thực hiện vệ tinh cấu hình thay vì bậc thầy:

sudo icinga2 node wizard

OutputPlease specify if this is a satellite setup ('n' installs a master setup) [Y/n]: y
Starting the Node setup routine...
Please specify the common name (CN) [web-2.example.com]: ENTER
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): icinga-master.example.com
Do you want to establish a connection to the master from this node? [Y/n]: y
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN): icinga-master_server_ip
Master endpoint port [5665]: ENTER
Add more master endpoints? [y/N]: ENTER
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host [icinga-master_server_ip]: ENTER
Port [5665]: ENTER

Trình hướng dẫn sẽ tìm nạp chứng chỉ công khai từ nút chính của chúng tôi và hiển thị cho chúng tôi các chi tiết của nó. Xác nhận thông tin, sau đó tiếp tục:

Output. . .
Is this information correct? [y/N]: y
information/cli: Received trusted master certificate.

Please specify the request ticket generated on your Icinga 2 master.
 (Hint: # icinga2 pki ticket --cn 'web-2.example.com'):

Tại thời điểm này, hãy quay lại master máy chủ và chạy lệnh thuật sĩ đã nhắc bạn. Đừng quên sudo ở phía trước của nó:

sudo icinga2 pki ticket --cn 'web-2.example.com'

Lệnh sẽ xuất ra một khóa. Sao chép nó vào clipboard của bạn, sau đó chuyển về nút máy khách, dán nó vào và nhấn ENTER để tiếp tục với trình hướng dẫn.

Output. . .
information/cli: Requesting certificate with ticket '5f53864a504a1c42ad69faa930bffa3a12600546'.

Please specify the API bind host/port (optional):
Bind Host []: ENTER
Bind Port []: ENTER
Accept config from master? [y/N]: n
Accept commands from master? [y/N]: y
Done.

Now restart your Icinga 2 daemon to finish the installation!

Bây giờ mở cổng Icinga trên tường lửa của bạn:

sudo ufw allow 5665

Và khởi động lại Icinga để cập nhật đầy đủ cấu hình:

sudo systemctl restart icinga2

Bạn có thể xác minh có kết nối giữa hai máy chủ với netstat:

netstat | grep :5665

Có thể mất một chút thời gian để kết nối được thực hiện. Cuối cùng netstat sẽ xuất ra một dòng hiển thị một ESTABLISHED kết nối trên cổng chính xác.

Outputtcp        0      0 web-2_server_ip:58188     icinga-master_server_ip:5665     ESTABLISHED

Điều này cho thấy các máy chủ của chúng tôi đã kết nối và chúng tôi sẵn sàng định cấu hình kiểm tra ứng dụng khách.

Định cấu hình giám sát tác nhân

Mặc dù chủ nhân và khách hàng hiện đã được kết nối, vẫn còn một số thiết lập để thực hiện trên máy chủ để cho phép theo dõi. Chúng tôi cần thiết lập một tệp lưu trữ mới. Chuyển về nút chính.

Một mức độ quan trọng của tổ chức trong cài đặt Icinga là khái niệm về khu vực. Tất cả các nút máy khách phải tạo vùng riêng của chúng và báo cáo cho một vùng cha, trong trường hợp này là nút chính của chúng ta. Theo mặc định, vùng nút chính của chúng ta được đặt tên theo FQDN của nó. Chúng tôi sẽ tạo một thư mục có tên sau khu vực chính của chúng tôi trong Icinga zones.d danh mục. Điều này sẽ giữ thông tin cho tất cả các khách hàng của khu vực chủ.

Tạo thư mục vùng:

sudo mkdir /etc/icinga2/zones.d/icinga-master.example.com

Chúng ta sẽ tạo một tệp cấu hình dịch vụ. Điều này sẽ xác định một số kiểm tra dịch vụ mà chúng tôi sẽ thực hiện trên bất kỳ nút máy khách từ xa nào. Mở tệp ngay bây giờ:

sudo nano /etc/icinga2/zones.d/icinga-master.example.com/services.conf

Dán vào các mục sau, sau đó lưu và đóng:

services.conf

apply Service "load" {
  import "generic-service"
  check_command = "load"
  command_endpoint = host.vars.client_endpoint
  assign where host.vars.client_endpoint
}

apply Service "procs" {
  import "generic-service"
  check_command = "procs"
  command_endpoint = host.vars.client_endpoint
  assign where host.vars.client_endpoint
}

Điều này xác định hai kiểm tra dịch vụ. Việc đầu tiên sẽ báo cáo về tải CPU, và thứ hai sẽ kiểm tra số lượng các quy trình trên máy chủ. Hai dòng cuối cùng của mỗi định nghĩa dịch vụ là quan trọng. command_endpoint nói với Icinga rằng kiểm tra dịch vụ này cần phải được gửi đến một điểm cuối lệnh từ xa. Các assign where dòng tự động gán kiểm tra dịch vụ cho bất kỳ máy chủ nào có client_endpoint biến được xác định.

Hãy tạo một máy chủ như vậy ngay bây giờ. Mở một tệp mới trong thư mục vùng mà chúng tôi đã tạo trước đó. Ở đây chúng tôi đã đặt tên tệp sau máy chủ từ xa:

sudo nano /etc/icinga2/zones.d/icinga-master.example.com/web-2.example.com<^>.conf

Dán vào cấu hình sau, sau đó lưu và đóng tệp:

web-2.example.com.conf

object Zone "web-2.example.com" {
  endpoints = [ "web-2.example.com" ]
  parent = "icinga-master.example.com"
}

object Endpoint "web-2.example.com" {
  host = "web-2_server_ip"
}

object Host "web-2.example.com" {
  import "generic-host"
  address = "web-2_server_ip"
  vars.http_vhosts["http"] = {
    http_uri = "/"
  }
  vars.notification["mail"] = {
    groups = [ "icingaadmins" ]
  }
  vars.client_endpoint = name
}

Tệp này định nghĩa một vùng cho máy chủ từ xa của chúng ta và liên kết nó trở lại vùng cha. Nó cũng định nghĩa máy chủ làm điểm cuối, và sau đó xác định chính máy chủ, nhập một số quy tắc mặc định từ generic-host bản mẫu. Nó cũng đặt một số vars để tạo kiểm tra HTTP và bật thông báo qua email. Lưu ý rằng vì máy chủ lưu trữ này có vars.client_endpoint = name được xác định, nó cũng sẽ được chỉ định kiểm tra dịch vụ mà chúng tôi vừa xác định services.conf.

Khởi động lại Icinga để cập nhật cấu hình:

sudo systemctl restart icinga2

Chuyển về giao diện web Icinga và máy chủ lưu trữ mới sẽ hiển thị với các kiểm tra Đang chờ xử lý. Sau một lúc, những kiểm tra đó sẽ biến Được. Điều này có nghĩa là nút máy khách của chúng tôi đang chạy kiểm tra thành công cho nút chính.

Phần kết luận

Trong hướng dẫn này, chúng tôi thiết lập hai loại giám sát khác nhau với Icinga, kiểm tra dịch vụ bên ngoài và kiểm tra máy chủ dựa trên đại lý. Có nhiều điều cần tìm hiểu thêm về cách định cấu hình và làm việc với Icinga, vì vậy bạn có thể muốn tìm hiểu sâu hơn về Tài liệu mở rộng của Icinga.

Lưu ý rằng nếu bạn đến một điểm mà bạn yêu cầu tùy chỉnh kiểm tra các lệnh, bạn sẽ cần phải đồng bộ hóa các lệnh này từ nút chính đến các nút máy khách bằng cách sử dụng một -vùng cấu hình toàn cầu. Bạn có thể tìm hiểu thêm về tính năng cụ thể này đây.

Cuối cùng, nếu bạn có một số lượng lớn các máy chủ để theo dõi, bạn có thể xem xét sử dụng phần mềm quản lý cấu hình để tự động cập nhật cấu hình Icinga của bạn. Loạt bài hướng dẫn của chúng tôi Bắt đầu với quản lý cấu hình đưa ra một cái nhìn tổng quan toàn diện về các khái niệm và phần mềm liên quan.

Thêm Bình Luận: