Thứ hai, 29/09/2014 | 00:00 GMT+7

Cách cấu hình giám sát Sensu, RabbitMQ và Redis trên Ubuntu 14.04

Sensu là một công cụ giám sát được viết bằng Ruby sử dụng RabbitMQ làm message broker và Redis để lưu trữ dữ liệu. Nó rất phù hợp để giám sát môi trường cloud .

Sensu kết nối kết quả từ các tập lệnh “kiểm tra” với các tập lệnh “xử lý” để tạo ra một hệ thống giám sát và cảnh báo mạnh mẽ. Kiểm tra tập lệnh có thể chạy trên nhiều nút và báo cáo xem một điều kiện nhất định có được đáp ứng hay không, chẳng hạn như Apache đang chạy. Các tập lệnh xử lý có thể thực hiện một hành động như gửi một email cảnh báo.

Cả tập lệnh “kiểm tra” và tập lệnh “xử lý” đều chạy trên server chính của Sensu, server này chịu trách nhiệm điều phối việc thực thi kiểm tra giữa các server khách Sensu và xử lý kết quả kiểm tra. Nếu một séc kích hoạt một sự kiện, nó sẽ được chuyển cho trình xử lý, trình xử lý sẽ thực hiện một hành động được chỉ định.

Một ví dụ về điều này là kiểm tra giám sát trạng thái của web server Apache. Kiểm tra sẽ được chạy trên các client Sensu. Nếu séc báo cáo một server bị hỏng, server Sensu sẽ chuyển sự kiện cho trình xử lý, có thể kích hoạt một hành động như gửi email hoặc thu thập số liệu thời gian chết.

Trong hướng dẫn này, ta sẽ cài đặt và cấu hình một server chính Sensu và một server khách Sensu.

Yêu cầu

Để cài đặt Sensu, bạn cần :

  • Một nút chính Server chạy Ubuntu 14.04 . Đây là nút bạn sẽ sử dụng để xem tất cả dữ liệu giám sát.
  • Ít nhất một nút bổ sung mà bạn muốn theo dõi, đang chạy Ubuntu 14.04 .

Tạo một user sudo trên mỗi Server. Đầu tiên, tạo user bằng lệnh adduser , thay thế tên user bằng tên bạn muốn sử dụng.

adduser username 

Điều này sẽ tạo user và folder chính và group thích hợp. Bạn sẽ được yêu cầu đặt password cho user mới và xác nhận password . Bạn cũng sẽ được yêu cầu nhập thông tin của user . Xác nhận thông tin user để tạo user .

Tiếp theo, cấp cho user các quyền sudo bằng lệnh visudo .

visudo 

Thao tác này sẽ mở file / etc / sudoers . Trong phần User privilege specification thêm một dòng khác cho user đã tạo để nó trông giống như thế này (với tên user đã chọn của bạn thay vì tên user ):

# User privilege specification root ALL=(ALL:ALL) ALL username ALL=(ALL:ALL) ALL 

Lưu file và chuyển sang user mới.

su - username 

Cập nhật các gói hệ thống và nâng cấp chúng.

sudo apt-get update && sudo apt-get -y upgrade 

Bước một - Cài đặt trên Master

Đầu tiên, ta sẽ cài đặt server chính của Sensu. Điều này yêu cầu bản thân RabbitMQ, Redis, Sensu và console Uchiwa cùng với một số phần mềm hỗ trợ.

Thêm nguồn RabbitMQ vào danh sách nguồn APT.

echo "deb http://www.rabbitmq.com/debian/ testing main" | sudo tee -a /etc/apt/sources.list.d/rabbitmq.list 

Download và thêm khóa ký cho RabbitMQ.

curl -L -o ~/rabbitmq-signing-key-public.asc http://www.rabbitmq.com/rabbitmq-signing-key-public.asc  sudo apt-key add ~/rabbitmq-signing-key-public.asc 

Cài đặt RabbitMQ và Erlang.

sudo apt-get update && sudo apt-get install -y rabbitmq-server erlang-nox 

Dịch vụ RabbitMQ sẽ tự động bắt đầu. Nếu không, hãy bắt đầu bằng lệnh sau.

sudo service rabbitmq-server start 

Sensu sử dụng SSL để giao tiếp an toàn giữa các thành phần của nó và RabbitMQ. Mặc dù có thể sử dụng Sensu mà không cần SSL nhưng nó rất không được khuyến khích. Để tạo certificate , hãy download trình tạo certificate của Sensu vào thư mục / tmp và tạo certificate SSL.

cd /tmp && wget http://sensuapp.org/docs/0.13/tools/ssl_certs.tar && tar -xvf ssl_certs.tar  cd ssl_certs && ./ssl_certs.sh generate 

Tạo một folder RabbitMQ SSL và sao chép các certificate .

sudo mkdir -p /etc/rabbitmq/ssl && sudo cp /tmp/ssl_certs/sensu_ca/cacert.pem /tmp/ssl_certs/server/cert.pem /tmp/ssl_certs/server/key.pem /etc/rabbitmq/ssl 

Tạo và chỉnh sửa file /etc/rabbitmq/rabbitmq.config .

sudo vi /etc/rabbitmq/rabbitmq.config 

Thêm các dòng sau vào file . Điều này cấu hình trình nghe RabbitMQ SSL để lắng nghe trên cổng 5671 và sử dụng tổ chức phát hành certificate và certificate server đã tạo. Nó cũng sẽ xác minh kết nối và không thành công nếu không có certificate .

[     {rabbit, [     {ssl_listeners, [5671]},     {ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},                    {certfile,"/etc/rabbitmq/ssl/cert.pem"},                    {keyfile,"/etc/rabbitmq/ssl/key.pem"},                    {verify,verify_peer},                    {fail_if_no_peer_cert,true}]}   ]} ]. 

Khởi động lại RabbitMQ.

sudo service rabbitmq-server restart 

Tạo server và user ảo RabbitMQ cho Sensu. Thay đổi password ( pass ). Bạn cần password này sau khi cấu hình server Sensu và các client được giám sát.

sudo rabbitmqctl add_vhost /sensu sudo rabbitmqctl add_user sensu pass sudo rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*" 

Cài đặt Redis.

sudo apt-get -y install redis-server 

Dịch vụ Redis sẽ tự động khởi động. Nếu không, hãy bắt đầu bằng lệnh sau. ( Lưu ý nếu Redis đã chạy, bạn sẽ nhận được lỗi: “Khởi động redis-server: không thành công.”)

sudo service redis-server start 

Thêm các nguồn và khóa để cài đặt Sensu.

wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -  echo "deb     http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list 

Cài đặt Sensu và Uchiwa (Uchiwa là console giám sát).

sudo apt-get update && sudo apt-get install -y sensu uchiwa 

Sensu cần thông tin kết nối an toàn với RabbitMQ. Tạo một folder SSL cho Sensu và sao chép các certificate đã tạo.

sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem /etc/sensu/ssl 

Bây giờ tất cả các thành phần để giám sát Sensu đã được cài đặt.

Bước hai - Cấu hình trên Master

Bây giờ ta cần cấu hình Sensu. Ta sẽ tạo các file cấu hình riêng lẻ trong folder /etc/sensu/conf.d để dễ đọc và quản lý hơn. Trừ khi bạn đã cấu hình các dịch vụ và thành phần được đề cập trong file cấu hình trên các máy riêng biệt, bạn có thể giữ nguyên hầu hết các giá trị mẫu được hiển thị bên dưới. Ngoài ra, /etc/sensu/config.json.example <^> là một file cấu hình mẫu khác mà bạn có thể sao chép và sử dụng để cấu hình Sensu.

Tạo và chỉnh sửa file Rabbitmq.json .

sudo vi /etc/sensu/conf.d/rabbitmq.json 

Thêm các dòng sau, điều này sẽ cho phép Redis kết nối an toàn với version RabbitMQ bằng certificate SSL của bạn. Người dùngthẻ phải là những người bạn đặt cho server ảo RabbitMQ.

{   "rabbitmq": {     "ssl": {       "cert_chain_file": "/etc/sensu/ssl/cert.pem",       "private_key_file": "/etc/sensu/ssl/key.pem"     },     "host": "localhost",     "port": 5671,     "vhost": "/sensu",     "user": "sensu",     "password": "pass"   } } 

Tạo và chỉnh sửa file redis.json .

sudo vi /etc/sensu/conf.d/redis.json 

Thêm các dòng sau, bao gồm thông tin kết nối để Sensu truy cập cá thể Redis.

{   "redis": {     "host": "localhost",     "port": 6379   } } 

Tạo và chỉnh sửa file api.json .

sudo vi /etc/sensu/conf.d/api.json 

Thêm các dòng sau, bao gồm thông tin kết nối để Sensu truy cập dịch vụ API.

{   "api": {     "host": "localhost",     "port": 4567   } } 

Tạo và chỉnh sửa file uchiwa.json .

sudo vi /etc/sensu/conf.d/uchiwa.json 

Thêm các dòng sau. Chúng bao gồm thông tin kết nối cho console Uchiwa để truy cập API Sensu. Bạn có thể tùy chọn tạo tên user và password trong khối uchiwa để xác thực console . Nếu bạn muốn trang tổng quan có thể truy cập , chỉ cần để nguyên.

{     "sensu": [         {             "name": "Sensu",             "host": "localhost",             "ssl": false,             "port": 4567,             "path": "",             "timeout": 5000         }     ],     "uchiwa": {         "port": 3000,         "stats": 10,         "refresh": 10000     } } 

Trong ví dụ này, ta sẽ tự giám sát server chính Sensu như một client . Vì vậy, hãy tạo và chỉnh sửa file client.json .

sudo vi /etc/sensu/conf.d/client.json 

Thêm các dòng sau và chỉnh sửa giá trị tên cho client Sensu. Đây là tên của server mà bạn sẽ thấy trong console Uchiwa. Tên không được có khoảng trắng hoặc ký tự đặc biệt.

Bạn có thể để giá trị địa chỉlocalhost vì ta đang giám sát server này. Ta sẽ tạo lại một file tương tự sau để mọi server khách hàng được theo dõi.

{   "client": {     "name": "server",     "address": "localhost",     "subscriptions": [ "ALL" ]   } } 

Cho phép các dịch vụ Sensu tự động khởi động.

sudo update-rc.d sensu-server defaults sudo update-rc.d sensu-client defaults sudo update-rc.d sensu-api defaults sudo update-rc.d uchiwa defaults 

Khởi động các dịch vụ Sensu.

sudo service sensu-server start sudo service sensu-client start sudo service sensu-api start sudo service uchiwa start 

Đến đây, bạn có thể truy cập Sensu tại địa chỉ http: // ip-address : 3000.

 Control panel  mặc định của Sensu

Bước 3 - Cài đặt trên client

Bạn cần cài đặt Sensu trên mọi client để được theo dõi.

Khi vẫn ở trên server chính của Sensu , hãy sao chép certificate SSL vào folder /tmp của server khách bằng SCP. Thay thế user IP bên dưới bằng user sudo và địa chỉ IP của server khách hàng.

scp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem user@ip:/tmp 

Trên client cần theo dõi, hãy thêm khóa và nguồn Sensu.

wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add - echo "deb     http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list 

Cài đặt Sensu.

sudo apt-get update && sudo apt-get -y install sensu 

Bạn cần cung cấp cho khách hàng thông tin kết nối với RabbitMQ. Tạo một folder SSL cho Sensu và sao chép các certificate trong folder /tmp đã được sao chép từ server chính của Sensu.

sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/cert.pem /tmp/key.pem /etc/sensu/ssl 

Tạo và chỉnh sửa file Rabbitmq.json .

sudo vi /etc/sensu/conf.d/rabbitmq.json 

Thêm các dòng sau. Chỉnh sửa giá trị server để sử dụng địa chỉ IP của server RabbitMQ; đó là địa chỉ IP của server chính Sensu. Giá trị user mật khẩu phải là giá trị bạn đặt cho server ảo RabbitMQ trên server chính Sensu.

{   "rabbitmq": {     "ssl": {       "cert_chain_file": "/etc/sensu/ssl/cert.pem",       "private_key_file": "/etc/sensu/ssl/key.pem"     },     "host": "1.1.1.1",     "port": 5671,     "vhost": "/sensu",     "user": "sensu",     "password": "pass"   } } 

Cung cấp thông tin cấu hình cho server Sensu này bằng cách tạo và chỉnh sửa file client.json .

sudo vi /etc/sensu/conf.d/client.json 

Thêm các dòng sau. Bạn nên chỉnh sửa giá trị tên thành những gì bạn muốn server này được gọi trong console Uchiwa. Tên không được có khoảng trắng hoặc ký tự đặc biệt.

Bạn có thể để giá trị địa chỉ được đặt thành localhost , vì ta đang giám sát server khách Sensu này.

{   "client": {     "name": "client1",     "address": "localhost",     "subscriptions": [ "ALL" ]   } } 

Bật và khởi động ứng dụng client .

sudo update-rc.d sensu-client defaults  sudo service sensu-client start 

Đến đây bạn sẽ thấy ứng dụng client trên tab Khách hàng trên Control panel Sensu.

Bước 4 - Cài đặt séc

Bây giờ Sensu đang chạy, ta cần thêm kiểm tra trên cả hai server . Ta sẽ tạo một script Ruby để kiểm tra xem Apache có đang chạy hay không.

Nếu bạn chưa cài đặt Apache, hãy cài đặt nó ngay bây giờ trên cả server chính Sensu và server khách Sensu.

sudo apt-get install -y apache2 

Apache sẽ được chạy theo mặc định trên cả hai server .

Trước khi cài đặt gem sensu-plugin, hãy đảm bảo bạn có tất cả các thư viện cần thiết. Cài đặt các thư viện Ruby và thư viện thiết yếu trên cả server chính Sensu và server khách Sensu.

sudo apt-get install -y ruby ruby-dev build-essential 

Cài đặt gem sensu-plugin trên cả server chính Sensu và server khách Sensu.

sudo gem install sensu-plugin 

Tạo file check-apache.rb trong folder plugin Sensu và sửa đổi quyền đối với file trên cả server chính Sensu và server khách Sensu.

sudo touch /etc/sensu/plugins/check-apache.rb && sudo chmod 755 /etc/sensu/plugins/check-apache.rb 

Chỉnh sửa file check-apache.rb trên cả server chính Sensu và server khách Sensu.

sudo vi /etc/sensu/plugins/check-apache.rb 

Thêm các dòng sau, viết kịch bản cho quá trình kiểm tra Apache.

#!/usr/bin/env ruby  procs = `ps aux` running = false procs.each_line do |proc|   running = true if proc.include?('apache2') end if running   puts 'OK - Apache daemon is running'   exit 0 else   puts 'WARNING - Apache daemon is NOT running'   exit 1 end 

Tạo và chỉnh sửa file check_apache.json chỉ trên server chính của Sensu.

sudo vi /etc/sensu/conf.d/check_apache.json 

Thêm các dòng sau sẽ chạy script để kiểm tra Apache sau mỗi 60 giây.

{   "checks": {     "apache_check": {       "command": "/etc/sensu/plugins/check-apache.rb",       "interval": 60,       "subscribers": [ "ALL" ]     }   } } 

Khởi động lại server Sensu và API trên server chính Sensu.

sudo service sensu-server restart && sudo service sensu-api restart 

Khởi động lại client Sensu trên server client Sensu.

sudo service sensu-client restart 

Sau một vài phút, bạn sẽ thấy séc xuất hiện trên tab “Kiểm tra” trong Control panel Sensu.

Dừng dịch vụ Apache trên một trong hai server để kiểm tra xem tập lệnh có hoạt động không.

sudo service apache2 stop 

Thông báo sẽ hiển thị trên trang tổng quan Sự kiện sau vài phút. Bấm vào cảnh báo để xem thêm thông tin và thực hiện hành động như im lặng hoặc giải quyết nó.

Trong hình ảnh này, Apache đã bị dừng trên server khách hàng. Đây là trang Khách hàng .

Ứng dụng khách trên console  Sensu

Khởi động dịch vụ Apache để dừng các cảnh báo.

sudo service apache2 start 

Bước 5 - Cài đặt trình xử lý

Người xử lý có thể gửi email thông báo hoặc gửi dữ liệu đến các ứng dụng khác như Graphite dựa trên các sự kiện. Ở đây, ta sẽ tạo một trình xử lý gửi email nếu kiểm tra Apache không thành công. Xin lưu ý server của bạn cần được cấu hình để gửi email. Bạn có thể sử dụng Hướng dẫn Postfix này để cài đặt một server thư đơn giản. (Bạn có thể cần gửi thư đến user trên server chính của Sensu để cấu hình dễ dàng nhất.)

Trên server chính của Sensu, tạo và chỉnh sửa file handler_email.json .

sudo vi /etc/sensu/conf.d/handler_email.json 

Thêm các dòng sau, thay thế email@address.com bằng địa chỉ email mà bạn muốn nhận thông báo. Tùy thuộc vào cài đặt server thư của bạn, có thể dễ dàng nhất đặt điều này thành alias cho user trên server chính Sensu. Trình xử lý này được gọi là “email” và sẽ sử dụng trình thư để gửi một email cảnh báo với chủ đề “sự kiện sensu” đến địa chỉ email được chỉ định.

{   "handlers": {     "email": {       "type": "pipe",       "command": "mail -s 'sensu event' email@address.com"     }   } } 

Chỉnh sửa check_apache.json .

sudo vi /etc/sensu/conf.d/check_apache.json 

Thêm dòng trình xử lý mới với trình xử lý email trong khối apache_check .

 {   "checks": {     "apache_check": {       "command": "/etc/sensu/plugins/check-apache.rb",       "interval": 60,       "handlers": ["default", "email"],       "subscribers": [ "ALL" ]     }   } } 

Khởi động lại sensu-api và sensu-server.

sudo service sensu-api restart && sudo service sensu-server restart 

Dừng lại dịch vụ Apache để kiểm tra cảnh báo qua email. Bạn sẽ nhận được một trong mỗi 60 giây.

sudo service apache2 stop 

Email của bạn sẽ giống như sau:

Return-Path: <sensu@sensu-master> ... Subject: sensu event To: <alerts@sensu-master.com> ... From: sensu@sensu-master (Sensu Monitoring Framework)  {"id":"481c85c4-485d-4f25-b835-cea5aef02c69","client":{"name":"Sensu-Master-Server","address":"localhost","subscriptions":["ALL"],"version":"0.13.1","timestamp":1411681990},"check":{"command":"/etc/sensu/plugins/check-apache.rb","interval":60,"handlers":["default","email"],"subscribers":["ALL"],"name":"apache_check","issued":1411682001,"executed":1411682001,"duration":0.023,"output":"WARNING - Apache daemon is NOT running\n","status":1,"history":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"]},"occurrences":1,"action":"create"} 

Khởi động lại dịch vụ Apache để ngừng nhận thông báo qua email.

sudo service apache2 start 

Kết luận

Sensu là một công cụ giám sát đa năng với các plugin của nó và các tập lệnh tùy chỉnh mà bạn có thể viết cho nó. Bạn cũng có thể tạo trình xử lý để thực hiện hầu hết mọi thứ với dữ liệu. Tiếp tục khám phá để làm cho nó phù hợp với bạn.


Tags:

Các tin liên quan