Cách giám sát server và dịch vụ bằng Icinga trên Ubuntu 16.04
Icinga là một hệ thống giám sát open-souce được sử dụng để theo dõi tình trạng của các server và dịch vụ được nối mạng. Trong hướng dẫn này, ta sẽ sử dụng Icinga để cài đặt hai loại cấu hình giám sát khác nhau. Đầu tiên là dựa trên các kiểm tra mạng đơn giản của các dịch vụ bên ngoài của server của bạn, chẳng hạn như thực hiện một yêu cầu HTTP định kỳ đến trang web . Cấu hình khác sử dụng tác nhân phần mềm chạy trên server để thu thập thông tin hệ thống chi tiết hơn như tải và số lượng các quy trình đang chạy.Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn nên hoàn thành hướng dẫn trước trong loạt bài này, Cách cài đặt Icinga và Icinga Web trên Ubuntu 16.04 . Điều này sẽ để lại cho bạn lõi Icinga và giao diện Web Icinga đang chạy trên một server duy nhất, mà ta sẽ gọi là nút icinga-master xuyên suốt.
Bạn cũng cần một số server để giám sát. Ta sẽ sử dụng hai server Ubuntu 16.04 có cài đặt Apache cho các ví dụ của ta . Bạn chỉ có thể sử dụng phần Apache của hướng dẫn LAMP được đề cập ở trên để cài đặt những điều này.
Bước 1 - Cài đặt Giám sát Server Đơn giản
Một cách đơn giản để theo dõi server với Icinga là cài đặt kiểm tra thường xuyên các dịch vụ có sẵn bên ngoài của nó. Vì vậy, đối với một web server , ta thường xuyên ping địa chỉ IP của server và cũng cố gắng truy cập một trang web. Điều này sẽ cho ta biết server lưu trữ có hoạt động hay không và web server có hoạt động bình thường hay không.
 Hãy  cài đặt  giám sát cho một  web server . Chọn một trong các  server  Apache được đề cập làm  yêu cầu  và  đảm bảo  trang giữ chỗ Apache mặc định đang được cung cấp đúng cách.  Ta  sẽ gọi  server  này là web-1.example.com .  Ta  sẽ không cần phải đăng nhập vào nó, tất cả các kiểm tra tình trạng sẽ được cấu hình và thực thi trên nút chính.
 Lưu ý: Icinga luôn mặc định sử dụng Tên domain  Đủ điều kiện (FQDN) của bất kỳ  server  lưu trữ nào mà nó đang giao dịch. FQDN là một tên  server  cộng với domain  của nó, chẳng hạn như web-1.example.com . Nếu bạn không  cài đặt  domain  thích hợp cho  server , FQDN sẽ giống như web-1 .localdomain .
 Chúng có thể sử dụng, chỉ cần nhất quán và nếu bạn không có FQDN “thực”, hãy luôn sử dụng địa chỉ IP của  server  trong bất kỳ trường address Icinga nào bạn  cấu hình .
 Đăng nhập vào nút chính. Để thêm một  server  mới,  ta  cần phải chỉnh sửa Icinga của hosts.conf  file . Mở nó trong một editor :
- sudo nano /etc/icinga2/conf.d/hosts.conf 
Thao tác này sẽ mở một file  với một số  comment  giải thích và một khối  server  duy nhất được xác định. object Host NodeName cấu hình object Host NodeName hiện có xác định  server  icinga-master , là  server  mà  ta  đã cài đặt Icinga và Icinga Web trên đó. Định vị con trỏ của bạn ở cuối file  và thêm  server  mới:
. . . 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 xác định  server  lưu trữ có tên là web-1.example.com , nhập một số cấu hình  server  lưu trữ mặc định từ một mẫu có tên là generic-host , trỏ Icinga đến địa chỉ IP chính xác, sau đó xác định một số biến yêu cầu Icinga kiểm tra phản hồi HTTP tại URL root  ( / ) và thông báo cho  group  icingaadmins qua email khi có sự cố.
Lưu file , sau đó khởi động lại Icinga:
- sudo systemctl restart icinga2 
Chuyển trở lại giao diện Icinga Web 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 server mới sẽ được điền theo thứ tự ngắn gọn và việc kiểm tra sức khỏe sẽ thay đổi từ Đang chờ xử lý thành Ok sau khi Icinga thu thập đủ thông tin.
Đây là một cách tốt để giám sát các dịch vụ bên ngoài trên server lưu trữ và có các cách kiểm tra khác dành cho server SSH, SMTP, v.v. Nhưng cũng rất vui nếu biết thêm chi tiết về tình trạng bên trong của các server mà ta đang theo dõi.
Tiếp theo, ta sẽ cài đặt giám sát thông qua đại lý Icinga, vì vậy ta có thể theo dõi thông tin hệ thống chi tiết hơn.
Bước 2 - Cài đặt Giám sát dựa trên tác nhân
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 để thực hiện kiểm tra sức khỏe từ xa rộng rãi hơn. Thay vì chỉ biết rằng web server của ta đang phục vụ thành công các trang, ta cũng có thể theo dõi tải CPU, số lượng quá trình, dung lượng đĩa, v.v.
  Ta  sẽ  cài đặt  một  server  thứ hai để giám sát.  Ta  sẽ gọi nó là web-2.example.com .  Ta  cần cài đặt phần mềm Icinga trên máy từ xa, chạy một số trình hướng dẫn  cài đặt  để tạo kết nối, sau đó cập nhật một số file  cấu hình trên nút chính Icinga.
 Lưu ý: Có nhiều cách để kiến trúc cài đặt Icinga, hoàn chỉnh với nhiều tầng nút chính / vệ tinh / máy khách , 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 node .  Ta  đang  cài đặt  một cấu trúc hai tầng đơn giản với nút một tổng thể và nhiều nút client. Hơn nữa, tất cả các cấu hình sẽ được thực hiện trên  các node  chính, và các lệnh kiểm tra sức khỏe của  ta  sẽ được sắp xếp vào  các node  chính và đẩy cho khách hàng. Dự án Icinga gọi  cài đặt  này là chế độ Điểm cuối lệnh từ trên xuống .
Cài đặt nút chính
Đầu tiên, ta cần cài đặt nút chính để tạo kết nối client . Ta làm điều đó bằng cách chạy trình hướng dẫn cài đặt nút trên nút chính của ta :
- sudo icinga2 node wizard 
Điều này sẽ bắt đầu một tập lệnh hỏi  ta  một số câu hỏi và  cài đặt  mọi thứ cho  ta . Trong phần sau,  ta  nhấn ENTER để chấp nhận hầu hết các giá trị mặc định. Câu trả lời không mặc định được đánh dấu. Một số  kết quả  thông tin đã bị xóa để rõ ràng:
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 cập nhật cấu hình:
- sudo systemctl restart icinga2 
Mở cổng firewall để cho phép kết nối bên ngoài với Icinga:
- sudo ufw allow 5665 
Bây giờ ta sẽ chuyển sang nút client , cài đặt Icinga và chạy cùng một trình hướng dẫn.
Cài đặt nút client
Đăng nhập vào server mà ta đang gọi là web-2.example.com . Ta cần cài đặt lại repository Icinga và sau đó cài đặt chính Icinga. Đây là quy trình tương tự mà ta đã sử dụng trên nút chính. Đầu tiên hãy cài đặt khóa:
- curl -sSL https://packages.icinga.com/icinga.key | sudo apt-key add - 
Mở file  icinga.list :
- sudo nano /etc/apt/sources.list.d/icinga.list 
Dán vào chi tiết repository :
deb https://packages.icinga.com/ubuntu icinga-xenial main Lưu file , sau đó cập nhật bộ nhớ cache của gói:
- sudo apt-get update 
Sau đó, cài đặt icinga2 .  Lưu ý   ta  không cần icinga2-ido-mysql mà  ta  đã cài đặt trên nút chính:
- sudo apt-get install icinga2 
Bây giờ ta chạy qua trình hướng dẫn nút trên server này, nhưng ta thực hiện cấu hình vệ tinh thay vì chính :
- 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 Bây giờ trình hướng dẫn sẽ lấy public certificate từ nút chính của ta và hiển thị cho ta 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'):  Đến đây,  hãy chuyển về  server  master của bạn và chạy lệnh mà trình hướng dẫn đã 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 trở lại nút client , 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ờ, hãy mở cổng Icinga trên firewall 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  server  bằng netstat :
- netstat | grep :5665 
Có thể mất một lúc để 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ị kết nối ESTABLISHED trên đúng cổng.
Outputtcp        0      0 web-2_server_ip:58188     icinga-master_server_ip:5665     ESTABLISHED Điều này cho thấy rằng các server của ta đã kết nối và ta đã sẵn sàng cấu hình các kiểm tra của ứng dụng client .
Cấu hình Giám sát tác nhân
Mặc dù cái chính và client hiện đã được kết nối, vẫn còn một số cài đặt cần thực hiện trên cái chính để cho phép giám sát. Ta cần cài đặt một file server mới. Chuyển trở lại nút chính.
 Một cấp độ tổ chức quan trọng trong cài đặt Icinga là khái niệm về vùng . Tất cả  các node  client  phải tạo vùng riêng của chúng và báo cáo cho vùng mẹ, trong trường hợp này là nút chính của  ta . Theo mặc định, vùng của nút chính của  ta  được đặt tên theo FQDN của nó.  Ta  sẽ tạo một folder  được đặt tên theo khu vực chính của  ta  trong folder  zone.d của zones.d . Đ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ính.
Tạo folder vùng:
- sudo mkdir /etc/icinga2/zones.d/icinga-master.example.com 
Ta sẽ tạo một file 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à ta sẽ thực hiện trên bất kỳ nút client từ xa nào. Mở file ngay bây giờ:
- sudo nano /etc/icinga2/zones.d/icinga-master.example.com/services.conf 
Dán vào phần sau, sau đó lưu và đóng:
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ụ. Đầu tiên sẽ báo cáo về tải CPU và thứ hai sẽ kiểm tra số lượng tiến trình trên  server . Hai dòng cuối cùng của mỗi định nghĩa dịch vụ là quan trọng. command_endpoint cho Icinga biết rằng kiểm tra dịch vụ này cần được gửi đến một điểm cuối lệnh từ xa. Dòng assign where tự động chỉ định kiểm tra dịch vụ cho bất kỳ  server  lưu trữ nào có biến client_endpoint được xác định.
Hãy tạo một server lưu trữ như vậy ngay bây giờ. Mở một file mới trong folder vùng mà ta đã tạo trước đó. Ở đây ta đã đặt tên file theo tên server 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 file :
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 xác định một vùng cho  server  từ xa của  ta  và liên kết nó trở lại vùng mẹ. Nó cũng xác định  server  lưu trữ như một điểm cuối, sau đó xác định chính  server  lưu trữ, nhập một số  luật  mặc định từ mẫu generic-host . Nó cũng đặt một số vars để tạo kiểm tra HTTP và kích hoạt thông báo qua email.  Lưu ý  vì  server  này đã định nghĩa vars.client_endpoint = name , nó cũng sẽ được gán các kiểm tra dịch vụ mà  ta  vừa định nghĩa trong services.conf .
Khởi động lại Icinga để cập nhật cấu hình:
- sudo systemctl restart icinga2 
Chuyển trở lại giao diện Icinga Web và server 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ẽ chuyển thành Ok . Điều này nghĩa là nút client của ta đang chạy kiểm tra thành công nút chính.
Kết luận
Trong hướng dẫn này, ta cài đặt 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 server dựa trên tác nhân. Còn nhiều điều cần tìm hiểu về cách cấu hình và làm việc với Icinga, vì vậy bạn có thể cần tìm hiểu sâu hơn về tài liệu mở rộng của Icinga .
Lưu ý nếu bạn đến một điểm mà bạn yêu cầu các lệnh kiểm tra tùy chỉnh, bạn cần phải đồng bộ hóa các lệnh này từ nút chính với các node client bằng cách sử dụng vùng cấu hình chung . Bạn có thể tìm hiểu thêm về tính năng cụ thể này tại đây .
Cuối cùng, nếu bạn có một số lượng lớn server cần 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 ta Bắt đầu với Quản lý Cấu hình cung cấp 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.
Các tin liên quan
Cách thiết lập đồng bộ hóa thời gian trên Ubuntu 16.042017-04-28
Cách quản lý log với Graylog 2 trên Ubuntu 16.04
2017-04-25
Cách cài đặt Webmin trên Ubuntu 16.04
2017-04-21
Cách cài đặt và cấu hình OrientDB trên Ubuntu 16.04
2017-03-24
Cách cài đặt và cấu hình Postfix trên Ubuntu 16.04
2017-03-16
how-to-monitor-system-metrics-with-the-tick-stack-on-ubuntu-16-04
2017-03-16
Cách cấu hình client FreeIPA trên Ubuntu 16.04
2017-03-08
Cách cài đặt Moodle trên Ubuntu 16.04
2017-03-02
Cách cài đặt và bảo mật MongoDB trên Ubuntu 16.04
2017-02-24
Cách cài đặt ionCube trên Ubuntu 16.04
2017-01-11
 

