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ùng và thẻ 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ỉ là 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.
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 và 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 và 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 .
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.
Các tin liên quan