Cách khắc phục sự cố thường gặp của ELK
Hướng dẫn này là hướng dẫn khắc phục sự cố của ELK Stack (Elasticsearch, Logstash, Kibana). Nó giả định bạn đã làm theo hướng dẫn Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên Ubuntu 14.04 , nhưng nó có thể hữu ích cho việc khắc phục sự cố các cài đặt ELK chung khác.Hướng dẫn này được cấu trúc như một loạt các vấn đề phổ biến và các giải pháp tiềm năng cho những vấn đề này, cùng với các bước để giúp bạn xác minh các thành phần khác nhau của ngăn xếp ELK của bạn đang hoạt động bình thường. Vì vậy, hãy thoải mái chuyển sang các phần có liên quan đến vấn đề bạn đang gặp phải.
Sự cố: Kibana Không có cảnh báo về mẫu index mặc định
Khi truy cập Kibana qua trình duyệt web, bạn có thể gặp phải trang có cảnh báo sau:
Kibana warning:Warning No default index pattern. You must select or create one to continue. ... Unable to fetch mapping. Do you have indices matching the pattern?
Đây là ảnh chụp màn hình của cảnh báo:
“Không thể tìm nạp ánh xạ” cho biết rằng Elasticsearch không chứa bất kỳ mục nhập nào trùng với mẫu logstash-*
mặc định. Thông thường, điều này nghĩa là log của bạn không được lưu trữ trong Elasticsearch do sự cố liên lạc từ Logstash đến Elasticsearch và / hoặc từ người gửi log của bạn (ví dụ: Filebeat) tới Logstash. Nói cách khác, log của bạn không được đưa qua chuỗi từ Filebeat, tới Logstash, tới Elasticsearch vì một số lý do.
Để giải quyết các sự cố giao tiếp giữa Logstash và Elasticsearch, hãy chạy qua các phần khắc phục sự cố Logstash . Để giải quyết các sự cố giao tiếp giữa Filebeat và Logstash, hãy chạy qua các phần khắc phục sự cố Filebeat .
Nếu bạn đã cấu hình Logstash để sử dụng mẫu index không mặc định, bạn có thể giải quyết vấn đề bằng cách chỉ định mẫu index thích hợp trong hộp văn bản.
Sự cố: Kibana không thể kết nối với Elasticsearch
Khi truy cập Kibana qua trình duyệt web, bạn có thể gặp phải trang bị lỗi sau:
Kibana error:Fatal Error Kibana: Unable to connect to Elasticsearch Error: Unable to connect to Elasticsearch Error: Bad Gateway ...
Đây là ảnh chụp màn hình của lỗi:
Điều này nghĩa là Kibana không thể kết nối với Elasticsearch. Elasticsearch có thể không chạy hoặc Kibana có thể được cấu hình để tìm kiếm Elasticsearch trên server và cổng không chính xác.
Để giải quyết vấn đề này, hãy đảm bảo Elasticsearch đang chạy theo các phần khắc phục sự cố Elasticsearch. Sau đó, đảm bảo Kibana được cấu hình để kết nối với server và cổng mà Elasticsearch đang chạy.
Ví dụ: nếu Elasticsearch đang chạy trên localhost
trên cổng 9200
, hãy đảm bảo Kibana được cấu hình thích hợp.
Mở file cấu hình Kibana:
- sudo vi /opt/kibana/config/kibana.yml
Thì chắc chắn rằng elasticsearch_url
được cài đặt đúng cách.
/opt/kibana/config/kibana.yml excerpt:# The Elasticsearch instance to use for all your queries. elasticsearch_url: "http://localhost:9200"
Lưu và thoát.
Bây giờ hãy khởi động lại dịch vụ Kibana để đưa các thay đổi vào vị trí:
- sudo service kibana restart
Sau khi Kibana khởi động lại, hãy mở Kibana trong trình duyệt web và xác minh lỗi đã được giải quyết.
Sự cố: Không thể truy cập Kibana
Thành phần Nginx của ngăn xếp ELK đóng role như một Reverse Proxy cho Kibana. Nếu Nginx không chạy hoặc được cấu hình đúng cách, bạn sẽ không thể truy cập giao diện Kibana. Tuy nhiên, vì phần còn lại của các thành phần ELK không dựa vào Nginx, chúng rất có thể hoạt động tốt.
Nguyên nhân: Nginx không chạy
Nếu Nginx không chạy và bạn cố gắng truy cập ngăn xếp ELK của bạn trong trình duyệt web, bạn có thể gặp lỗi tương tự như sau:
Nginx Error:This webpage is not available ERR_CONNECTION_REFUSED
Điều này thường cho biết Nginx không chạy.
Bạn có thể kiểm tra trạng thái của dịch vụ Nginx bằng lệnh này:
- sudo service nginx status
Nếu nó báo cáo rằng dịch vụ không chạy hoặc không được nhận dạng, hãy giải quyết sự cố của bạn theo hướng dẫn của phần Cài đặt Nginx của hướng dẫn ngăn xếp ELK. Nếu nó báo rằng dịch vụ đang chạy, bạn cần phải cấu hình lại Nginx, làm theo các hướng dẫn tương tự.
Nguyên nhân: Nginx đang chạy nhưng không thể kết nối với Kibana
Nếu không thể truy cập Kibana và bạn nhận được lỗi 502 Bad Gateway
, thì Nginx đang chạy nhưng không thể kết nối với Kibana.
Bước đầu tiên để giải quyết vấn đề này là kiểm tra xem Kibana có đang chạy bằng lệnh này hay không:
- sudo service kibana status
Nếu Kibana không chạy hoặc không được nhận dạng, hãy làm theo hướng dẫn của phần Cài đặt Kibana của hướng dẫn ngăn xếp ELK.
Nếu cách đó không giải quyết được sự cố, bạn có thể gặp sự cố với cấu hình Nginx của bạn . Bạn nên xem lại phần cấu hình của phần Cài đặt Nginx của hướng dẫn ngăn xếp ELK. Bạn có thể kiểm tra log lỗi Nginx để tìm manh mối:
- sudo tail /var/log/nginx/error.log
Điều này sẽ cho bạn biết chính xác lý do tại sao Nginx không thể kết nối với Kibana.
Nguyên nhân: Không thể xác thực user
Nếu bạn đã cài đặt xác thực cơ bản và gặp sự cố khi vượt qua bước xác thực, bạn nên xem log lỗi Nginx để xác định chi tiết cụ thể của vấn đề.
Để xem các lỗi Nginx gần đây, hãy sử dụng lệnh sau:
- sudo tail /var/log/nginx/error.log
Nếu bạn gặp lỗi user was not found
user , user đó không tồn tại trong file htpasswd
. Loại lỗi này được chỉ ra bởi mục nhập log sau:
Nginx error logs (user was not found):2015/10/26 12:11:57 [error] 3933#0: *242 user "NonExistentUser" was not found in "/etc/nginx/htpasswd.users", client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"
Nếu bạn thấy lỗi password mismatch
, user tồn tại nhưng bạn đã cung cấp password không chính xác. Loại lỗi này được chỉ ra bởi mục nhập log sau:
Nginx error logs (user password mismatch):2015/10/26 12:12:56 [error] 3933#0: *242 user "kibanaadmin": password mismatch, client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"
Giải pháp cho hai lỗi này là cung cấp thông tin đăng nhập thích hợp hoặc sửa đổi file htpasswd
hiện có của bạn với thông tin đăng nhập của user mà bạn mong muốn tồn tại. Ví dụ: để tạo hoặc overrides user có tên là kibanaadmin
trong file htpasswd.users
, hãy sử dụng lệnh này:
- sudo htpasswd /etc/nginx/htpasswd.users kibanaadmin
Sau đó, cung cấp password mong muốn của bạn và xác nhận nó.
Nếu bạn thấy lỗi No such file or directory
, thì file htpasswd
được chỉ định trong cấu hình Nginx không tồn tại. Loại lỗi này được chỉ ra bởi mục nhập log sau:
Nginx error logs (htpasswd file does not exist):2015/10/26 12:17:38 [error] 3933#0: *266 open() "/etc/nginx/htpasswd.users" failed (2: No such file or directory), client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"
Ở đây, bạn nên tạo một mới /etc/nginx/htpasswd.users
file , và thêm một user ( kibanaadmin
trong ví dụ này) với nó, với lệnh này:
sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin
Nhập password mới và xác nhận nó.
Bây giờ, hãy thử xác thực với quyền là user bạn vừa tạo.
Logstash: Cách kiểm tra xem nó có đang chạy hay không
Nếu Logstash không chạy, bạn sẽ không thể nhận và phân tích cú pháp log từ người gửi log , chẳng hạn như Filebeat và lưu trữ log đã xử lý trong Elasticsearch. Phần này sẽ hướng dẫn bạn cách kiểm tra xem Logstash có hoạt động bình thường hay không.
Xác minh dịch vụ đang chạy
Điều cơ bản nhất cần kiểm tra là trạng thái của trạng thái Logstash:
- sudo service logstash status
Nếu Logstash đang chạy, bạn sẽ thấy kết quả này:
Logstash status (OK):logstash is running
Ngược lại, nếu dịch vụ không chạy, bạn sẽ thấy thông báo sau:
Logstash status (Bad):logstash is not running
Nếu Logstash không chạy, hãy thử khởi động nó bằng lệnh sau:
- sudo service logstash start
Sau đó, hãy kiểm tra lại trạng thái của nó, sau vài giây. Logstash là một ứng dụng Java và nó sẽ báo cáo là “đang chạy” trong vài giây sau mỗi lần thử khởi động, vì vậy điều quan trọng là phải đợi một vài giây trước khi kiểm tra trạng thái “không chạy”. Nếu nó báo cáo là "không chạy", nó có thể được cấu hình sai. Hai phần tiếp theo trình bày cách khắc phục sự cố Logstash thường gặp.
Sự cố: Logstash không chạy
Nếu Logstash không chạy, có một số nguyên nhân tiềm ẩn. Phần này sẽ đề cập đến nhiều trường hợp phổ biến mà Logstash không chạy được và đề xuất các giải pháp tiềm năng.
Nguyên nhân: Cấu hình chứa lỗi cú pháp
Nếu Logstash có lỗi trong các file cấu hình nằm trong folder /etc/logstash/conf.d
, dịch vụ sẽ không thể khởi động đúng cách. Điều tốt nhất cần làm là kiểm tra log Logstash để biết manh mối về lý do tại sao nó không thành công.
Mở hai phiên terminal vào server của bạn để bạn có thể xem log Logstash trong khi cố gắng khởi động dịch vụ.
Trong phiên terminal đầu tiên, ta sẽ xem xét các bản ghi:
- tail -f /var/log/logstash/logstash.log
Thao tác này sẽ hiển thị một vài mục log cuối cùng, cộng với bất kỳ mục log nào trong tương lai.
Trong phiên terminal thứ hai, hãy thử khởi động dịch vụ Logstash:
- sudo service logstash start
Quay lại phiên terminal đầu tiên để xem các log được tạo khi Logstash đang khởi động.
Nếu bạn thấy các mục nhập log có thông báo lỗi, hãy thử và đọc (các) thông báo để tìm ra điều gì đang xảy ra. Dưới đây là một ví dụ về log lỗi mà bạn có thể thấy nếu cấu hình Logstash có lỗi cú pháp (dấu ngoặc nhọn không khớp):
Logstash logs (Syntax error):... {:timestamp=>"2015-10-28T11:51:09.205000-0400", :message=>"Error: Expected one of #, => at line 12, column 6 (byte 209) after input {\n lumberjack {\n port => 5043\n type => \"logs\"\n ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n \n}\n\n\nfilter {\n if "} {:timestamp=>"2015-10-28T11:51:09.228000-0400", :message=>"You may be interested in the '--configtest' flag which you can\nuse to validate logstash's configuration before you choose\nto restart a running system."}
Thông báo cuối cùng nói rằng ta có thể quan tâm đến việc xác thực cấu hình cho biết rằng cấu hình có lỗi cú pháp. Thông báo trước cung cấp một thông báo lỗi cụ thể hơn, trong trường hợp này là thiếu dấu ngoặc nhọn đóng trong phần input
của cấu hình. Để giải quyết vấn đề này, hãy chỉnh sửa phần vi phạm của cấu hình Logstash của bạn:
- sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf
Tìm dòng có mục nhập sai và sửa nó, sau đó lưu và thoát.
Bây giờ, trên terminal thứ hai, hãy bắt đầu dịch vụ Logstash:
- sudo service logstash start
Nếu sự cố đã được giải quyết, sẽ không có mục nhập log mới (Logstash không ghi log khởi động thành công). Sau vài giây, hãy kiểm tra trạng thái của dịch vụ Logstash:
- sudo service logstash status
Nếu nó đang chạy, bạn đã giải quyết được sự cố.
Bạn có thể gặp sự cố cấu hình khác với ví dụ của ta . Ta sẽ đề cập đến một số vấn đề cấu hình Logstash phổ biến khác. Như mọi khi, nếu bạn có thể tìm ra lỗi nghĩa là gì, hãy thử và tự sửa lỗi.
Nguyên nhân: Tệp SSL không tồn tại
Một nguyên nhân phổ biến khác khiến Logstash không chạy là sự cố với certificate SSL và các file khóa. Ví dụ: nếu chúng không tồn tại ở nơi cấu hình Logstash của bạn chỉ định chúng, log của bạn sẽ hiển thị lỗi như sau:
Logstash logs (SSL key file does not exist):{:timestamp=>"2017-12-01T16:51:31.656000+0000", :message=>"Invalid setting for beats input plugin:\n\n input {\n beats {\n # This setting must be a path\n # File does not exist or cannot be opened /etc/pki/tls/certs/logstash-forwarder.crt\n ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n ...\n }\n }", :level=>:error} {:timestamp=>"2017-12-01T16:51:31.671000+0000", :message=>"Invalid setting for beats input plugin:\n\n input {\n beats {\n # This setting must be a path\n # File does not exist or cannot be opened /etc/pki/tls/private/logstash-forwarder.key\n ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n ...\n }\n }", :level=>:error} {:timestamp=>"2017-12-01T16:51:31.685000+0000", :message=>"Error: Something is wrong with your configuration.", :level=>:error}
Để giải quyết vấn đề cụ thể này, bạn cần đảm bảo bạn có file khóa SSL ( tạo một file nếu bạn quên) và file đó được đặt ở vị trí thích hợp ( /etc/pki/tls/private/logstash-forwarder.key
, trong ví dụ). Nếu bạn đã có file khóa, hãy đảm bảo di chuyển file đó đến vị trí thích hợp và đảm bảo cấu hình Logstash đang trỏ đến file đó.
Bây giờ, hãy bắt đầu dịch vụ Logstash:
- sudo service logstash start
Nếu sự cố đã được giải quyết, sẽ không có mục log mới. Sau vài giây, hãy kiểm tra trạng thái của dịch vụ Logstash:
- sudo service logstash status
Nếu nó đang chạy, bạn đã giải quyết được sự cố.
Sự cố: Logstash đang chạy nhưng không lưu trữ log trong Elasticsearch
Nếu Logstash đang chạy nhưng không lưu trữ log trong Elasticsearch, đó là vì nó không thể truy cập Elasticsearch. Thông thường, đây là kết quả của việc Elasticsearch không chạy. Nếu đúng như vậy, log Logstash sẽ hiển thị các thông báo lỗi như sau:
Logstash logs (Elasticsearch isn't running):{:timestamp=>"2017-12-01T16:53:29.571000+0000", :message=>"Connection refused (Connection refused)", :class=>"Manticore::SocketException", :backtrace=>[ruby-backtrace-info-here], :level=>:error}
Trong trường hợp này, hãy đảm bảo Elasticsearch đang chạy theo các bước khắc phục sự cố Elasticsearch.
Bạn cũng có thể thấy các lỗi như sau:
Logstash logs (Logstash is configured to send its output to the wrong host):{:timestamp=>"2017-12-01T16:56:26.274000+0000", :message=>"Attempted to send a bulk request to Elasticsearch configured at '[\"http://localhost:9200/\"]', but Elasticsearch appears to be unreachable or down!", :error_message=>"Connection refused (Connection refused)", :class=>"Manticore::SocketException", :client_config=>{:hosts=>["http://localhost:9200/"], :ssl=>nil, :transport_options=>{:socket_timeout=>0, :request_timeout=>0, :proxy=>nil, :ssl=>{}}, :transport_class=>Elasticsearch::Transport::Transport::HTTP::Manticore, :logger=>nil, :tracer=>nil, :reload_connections=>false, :retry_on_failure=>false, :reload_on_failure=>false, :randomize_hosts=>false}, :level=>:error} {:timestamp=>"2017-12-01T16:57:49.090000+0000", :message=>"SIGTERM received. Shutting down the pipeline.", :level=>:warn}
Điều này cho thấy rằng phần output
của cấu hình Logstash của bạn có thể đang trỏ đến server lưu trữ sai. Để giải quyết vấn đề này, hãy đảm bảo Elasticsearch đang chạy và kiểm tra cấu hình Logstash của bạn:
- sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf
Xác minh dòng hosts => [" localhost:9200 "]
đang trỏ đến server đang chạy Elasticsearch
Logstash output configuration excerptoutput { elasticsearch { hosts => ["localhost:9200"] sniffing => true . . .
Lưu và thoát. Ví dụ này giả định Elasticsearch đang chạy trên localhost
.
Khởi động lại dịch vụ Logstash.
- sudo service logstash restart
Sau đó, kiểm tra log Logstash xem có lỗi nào không.
Filebeat: Cách kiểm tra xem nó có đang chạy hay không
Filebeat chạy trên máy Khách của bạn và gửi log đến server ELK của bạn. Nếu Filebeat không chạy, bạn sẽ không thể gửi các log khác nhau của bạn tới Logstash. Do đó, các bản ghi sẽ không được lưu trữ trong Elasticsearch và chúng sẽ không xuất hiện trong Kibana. Phần này sẽ hướng dẫn bạn cách kiểm tra xem Filebeat có hoạt động bình thường hay không.
Xác minh log được vận chuyển thành công
Cách dễ nhất để biết liệu Filebeat có vận chuyển các bản ghi đến Logstash một cách chính xác hay không là kiểm tra lỗi Filebeat trong log syslog.
- sudo tail /var/log/syslog | grep filebeat
Nếu mọi thứ được cài đặt đúng cách, bạn sẽ thấy một số mục log khi bạn dừng hoặc bắt đầu quá trình Filebeat, ngoài ra không có gì khác.
Nếu bạn không thấy bất kỳ mục log nào, bạn nên xác minh Filebeat đang chạy.
Xác minh dịch vụ đang chạy
Điều cơ bản nhất cần kiểm tra là trạng thái của Filebeat:
- sudo service filebeat status
Nếu Filebeat đang chạy, bạn sẽ thấy kết quả này:
Output* filebeat is running
Ngược lại, nếu dịch vụ không chạy, bạn sẽ thấy thông báo sau:
Output * filebeat is not running
Nếu Filebeat không chạy, hãy thử khởi động nó bằng lệnh sau:
- sudo service filebeat start
Sau đó kiểm tra lại trạng thái. Nếu cách này không giải quyết được sự cố, các phần sau sẽ giúp bạn khắc phục sự cố Filebeat của bạn . Ta sẽ đề cập đến các sự cố Filebeat thường gặp và cách giải quyết chúng.
Sự cố: Filebeat không chạy
Nếu Filebeat không chạy trên máy khách của bạn, có một số nguyên nhân tiềm ẩn. Phần này sẽ đề cập đến nhiều trường hợp phổ biến mà Filebeat sẽ không chạy được và đề xuất các giải pháp tiềm năng.
Nguyên nhân: Cấu hình chứa lỗi cú pháp
Nếu Filebeat có lỗi trong file cấu hình của nó, nằm tại /etc/filebeat/filebeat.yml
, dịch vụ sẽ không thể khởi động đúng cách. Nó sẽ ngay lập tức thoát với các lỗi như sau:
OutputLoading config file error: YAML config parsing failed on /etc/filebeat/filebeat.yml: yaml: line 13: could not find expected ':'. Exiting.
Trong trường hợp này, có lỗi đánh máy trong file cấu hình. Để giải quyết vấn đề này, hãy chỉnh sửa phần vi phạm của cấu hình Filebeat. Để được hướng dẫn, hãy làm theo phần phụ Cấu hình Filebeat của Cài đặt Filebeat (Thêm Server Máy khách) ) của hướng dẫn ngăn xếp ELK.
Sau khi chỉnh sửa cấu hình Filebeat, hãy thử khởi động lại dịch vụ:
- sudo service filebeat start
Nếu bạn không thấy kết quả lỗi, sự cố đã được giải quyết.
Nguyên nhân: Chứng chỉ SSL bị thiếu hoặc không hợp lệ
Giao tiếp giữa Filebeat và Logstash certificate request SSL để xác thực và mã hóa. Nếu Filebeat không khởi động đúng cách, bạn nên kiểm tra log hệ thống để tìm các lỗi tương tự như sau:
OutputError Initialising publisher: open /etc/pki/tls/certs/logstash-forwarder.crt: no such file or directory
Điều này cho biết logstash-forwarder.crt
không ở vị trí thích hợp. Để giải quyết vấn đề này, hãy sao chép certificate SSL từ server ELK sang client của bạn theo các phần phụ thích hợp của phần Cài đặt Filebeat (Thêm Server Máy khách) của hướng dẫn ngăn xếp ELK.
Sau khi đặt file certificate SSL thích hợp vào vị trí thích hợp, hãy thử khởi động lại Filebeat.
Nếu certificate SSL không hợp lệ, log sẽ giống như sau:
syslog (Certificate is invalid):transport.go:125: SSL client failed to connect with: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "elk.example.com")
Lưu ý thông báo lỗi cho biết certificate tồn tại, nhưng không hợp lệ. Trong trường hợp này, bạn cần làm theo phần Tạo Chứng chỉ SSL của hướng dẫn ngăn xếp ELK, sau đó sao chép certificate SSL vào client ( Cài đặt Filebeat (Thêm Server Máy khách) ).
Sau khi đảm bảo certificate hợp lệ và nó ở đúng vị trí, bạn cần khởi động lại Logstash (trên server ELK) để buộc nó sử dụng khóa SSL mới:
- sudo service logstash restart
Sau đó khởi động Filebeat (trên client ):
- sudo service filebeat start
Kiểm tra lại log đảm bảo sự cố đã được giải quyết.
Sự cố: Filebeat không thể kết nối với Logstash
Nếu không thể truy cập Logstash (trên server ELK) bằng Filebeat ( server khách hàng của bạn), bạn sẽ thấy các mục log lỗi như sau:
syslog (Connection refused):transport.go:125: SSL client failed to connect with: dial tcp 203.0.113.4:5044: getsockopt: connection refused
Các lý do phổ biến khiến Logstash không thể truy cập được bao gồm:
- Logstash không chạy (trên server ELK)
- Tường lửa trên một trong hai server đang chặn kết nối trên cổng
5043
- Filebeat không được cấu hình với địa chỉ IP, tên server hoặc cổng thích hợp
Để giải quyết vấn đề này, trước tiên hãy xác minh Logstash đang chạy trên server ELK theo các phần khắc phục sự cố Logstash của hướng dẫn này. Thứ hai, xác minh firewall không chặn lưu lượng mạng. Thứ ba, xác minh Filebeat được cấu hình với địa chỉ IP chính xác (hoặc tên server ) và cổng của server ELK.
Cấu hình Filebeat có thể được chỉnh sửa bằng lệnh này:
- sudo vi /etc/filebeat/filebeat.yml
Sau khi xác minh thông tin kết nối Logstash là chính xác, hãy thử khởi động lại Filebeat:
sudo service filebeat restart
Kiểm tra lại log Filebeat đảm bảo sự cố đã được giải quyết.
Để biết hướng dẫn chung về Filebeat, hãy làm theo phần phụ Cấu hình Filebeat của phần Cài đặt Filebeat (Thêm server client ) của hướng dẫn ngăn xếp ELK.
Elasticsearch: Cách kiểm tra xem nó có đang chạy hay không
Nếu Elasticsearch không chạy, không có ngăn xếp ELK nào của bạn sẽ hoạt động. Logstash sẽ không thể thêm log mới vào Elasticsearch và Kibana sẽ không thể truy xuất log từ Elasticsearch để báo cáo. Phần này sẽ hướng dẫn bạn cách kiểm tra xem Elasticsearch có hoạt động bình thường hay không.
Xác minh dịch vụ đang chạy
Điều cơ bản nhất cần kiểm tra là trạng thái của dịch vụ Elasticsearch:
- sudo service elasticsearch status
Nếu Elasticsearch đang chạy, bạn sẽ thấy kết quả này:
Elasticsearch status (OK): * elasticsearch is running
Ngược lại, nếu dịch vụ không chạy, bạn sẽ thấy thông báo sau:
Elasticsearch status (Bad): * elasticsearch is not running
Trong trường hợp này, bạn nên làm theo một số phần tiếp theo, bao gồm việc khắc phục sự cố Elasticsearch.
Xác minh nó phản hồi các yêu cầu HTTP
Theo mặc định, Elasticsearch phản hồi các yêu cầu HTTP trên cổng 9200
(điều này có thể được tùy chỉnh, trong file cấu hình của nó, bằng cách chỉ định một giá trị http.port
mới). Ta có thể sử dụng curl
để gửi các yêu cầu và truy xuất thông tin hữu ích từ Elasticsearch.
Gửi một yêu cầu HTTP GET bằng cách sử dụng curl với lệnh này (giả sử rằng Elasticsearch của bạn có thể được truy cập tại localhost
):
- curl localhost:9200
Nếu Elasticsearch đang chạy, bạn sẽ thấy một phản hồi trông giống như sau:
Output{ "name" : "Hildegarde", "cluster_name" : "elasticsearch", "cluster_uuid" : "E8q9kr-0RxycYhSLNx8xeA", "version" : { "number" : "2.4.6", "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd", "build_timestamp" : "2017-07-18T12:17:44Z", "build_snapshot" : false, "lucene_version" : "5.5.4" }, "tagline" : "You Know, for Search" }
Bạn cũng có thể kiểm tra tình trạng của cụm Elasticsearch của bạn bằng lệnh này:
curl localhost:9200/_cluster/health?pretty
Đầu ra của bạn sẽ trông giống như sau:
Output{ "cluster_name" : "elasticsearch", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 6, "active_shards" : 6, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 6, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 50.0 }
Lưu ý nếu cụm Elasticsearch của bạn bao gồm một nút duy nhất, cụm của bạn có thể sẽ có trạng thái yellow
. Điều này là bình thường đối với một cụm nút duy nhất; bạn có thể nâng cấp lên trạng thái green
bằng cách thêm ít nhất một nút nữa vào cụm Elasticsearch của bạn .
Sự cố: Elasticsearch không chạy
Nếu Elasticsearch không chạy, có nhiều nguyên nhân tiềm ẩn. Phần này sẽ đề cập đến nhiều trường hợp phổ biến mà Elasticsearch sẽ không chạy và đề xuất các giải pháp tiềm năng.
Nguyên nhân: Nó đã không bao giờ được bắt đầu
Nếu Elasticsearch không chạy, nó có thể chưa được khởi động ngay từ đầu; Elasticsearch không tự động khởi động sau khi cài đặt. Giải pháp cho điều này là khởi động thủ công lần đầu tiên:
- sudo service elasticsearch start
Điều này sẽ báo cáo rằng Elasticsearch đang bắt đầu. Chờ khoảng 10 giây, sau đó kiểm tra lại tình trạng trạng thái Elasticsearch.
Nguyên nhân: Dịch vụ Elasticsearch chưa được bật và server đã khởi động lại
Nếu Elasticsearch đã hoạt động tốt nhưng không hoạt động nữa, nó có thể không được bật đúng cách. Theo mặc định, dịch vụ Elasticsearch không được bật để bắt đầu khi server khởi động , bạn phải bật Elasticsearch để tự động khởi động khi server khởi động :
- sudo update-rc.d elasticsearch defaults 95 10
Elasticsearch bây giờ sẽ tự động bắt đầu khi server khởi động . Kiểm tra xem nó hoạt động bằng cách khởi động lại server của bạn.
Nguyên nhân: Elasticsearch được cấu hình sai
Nếu Elasticsearch có lỗi trong file cấu hình của nó, nằm tại /etc/elasticsearch/elasticsearch.yml
, dịch vụ sẽ không thể khởi động đúng cách. Điều tốt nhất cần làm là kiểm tra log lỗi Elasticsearch để tìm manh mối về lý do tại sao nó không thành công.
Mở hai phiên terminal vào server của bạn để bạn có thể xem log Elasticsearch trong khi cố gắng khởi động dịch vụ.
Trong phiên terminal đầu tiên, ta sẽ xem xét các bản ghi:
- tail -f /var/log/elasticsearch/elasticsearch.log
Thao tác này sẽ hiển thị một vài mục log cuối cùng, cộng với bất kỳ mục log nào trong tương lai.
Trong phiên terminal thứ hai, hãy thử khởi động dịch vụ Elasticsearch:
- sudo service elasticsearch start
Chuyển về phiên terminal đầu tiên để xem log được tạo khi Elasticsearch đang khởi động.
Nếu bạn thấy các mục log cho biết lỗi hoặc ngoại lệ (ví dụ: ERROR
, Exception
hoặc error
), hãy thử và tìm một dòng cho biết nguyên nhân gây ra lỗi. Dưới đây là một ví dụ về log lỗi mà bạn sẽ thấy nếu Elasticsearch network.host
được đặt thành tên server hoặc địa chỉ IP không thể giải quyết được:
Elasticsearch logs (Bad):... [2015-10-27 15:24:43,495][INFO ][node ] [Shadrac] starting ... [2015-10-27 15:24:43,626][ERROR][bootstrap ] [Shadrac] Exception org.elasticsearch.transport.BindTransportException: Failed to resolve host [null] at org.elasticsearch.transport.netty.NettyTransport.bindServerBootstrap(NettyTransport.java:402) at org.elasticsearch.transport.netty.NettyTransport.doStart(NettyTransport.java:283) at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85) at org.elasticsearch.transport.TransportService.doStart(TransportService.java:153) at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85) at org.elasticsearch.node.internal.InternalNode.start(InternalNode.java:257) at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:160) at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:248) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32) Caused by: java.net.UnknownHostException: incorrect_hostname: unknown error ...
Lưu ý dòng cuối cùng của ví dụ các bản ghi cho biết một UnknownHostException: incorrect_hostname
lỗi đã xảy ra. Ví dụ cụ thể này cho biết network.host
được đặt thành incorrect_hostname
, điều này không giải quyết được vấn đề gì. Trong cài đặt Elasticsearch một nút, điều này phải được đặt thành localhost
hoặc 127.0.0.1
.
Để giải quyết vấn đề này, hãy chỉnh sửa file cấu hình Elasticsearch:
- sudo vi /etc/elasticsearch/elasticsearch.yml
Tìm dòng có mục nhập sai và sửa nó. Trong trường hợp của ví dụ, ta nên tìm dòng chỉ định network.host: incorrect_hostname
và thay đổi nó để nó trông giống như sau:
... network.host: localhost ...
Lưu và thoát.
Bây giờ, trên terminal thứ hai, hãy bắt đầu dịch vụ Elasticsearch:
- sudo service elasticsearch start
Nếu sự cố đã được giải quyết, bạn sẽ thấy log không có lỗi cho biết rằng Elasticsearch đã bắt đầu. Nó có thể trông giống như sau:
Elasticsearch logs (Good):... [2015-10-27 15:29:21,980][INFO ][node ] [Garrison Kane] initializing ... [2015-10-27 15:29:22,084][INFO ][plugins ] [Garrison Kane] loaded [], sites [] [2015-10-27 15:29:22,124][INFO ][env ] [Garrison Kane] using [1] data paths, mounts [[/ (/dev/vda1)]], net usable_space [52.1gb], net total_space [58.9gb], types [ext4] [2015-10-27 15:29:24,532][INFO ][node ] [Garrison Kane] initialized [2015-10-27 15:29:24,533][INFO ][node ] [Garrison Kane] starting ... [2015-10-27 15:29:24,646][INFO ][transport ] [Garrison Kane] bound_address {inet[/127.0.0.1:9300]}, publish_address {inet[localhost/127.0.0.1:9300]} [2015-10-27 15:29:24,682][INFO ][discovery ] [Garrison Kane] elasticsearch/WJvkRFnbQ5mLTgOatk0afQ [2015-10-27 15:29:28,460][INFO ][cluster.service ] [Garrison Kane] new_master [Garrison Kane][WJvkRFnbQ5mLTgOatk0afQ][elk-run][inet[localhost/127.0.0.1:9300]], reason: zen-disco-join (elected_as_master) [2015-10-27 15:29:28,561][INFO ][http ] [Garrison Kane] bound_address {inet[/127.0.0.1:9200]}, publish_address {inet[localhost/127.0.0.1:9200]} [2015-10-27 15:29:28,562][INFO ][node ] [Garrison Kane] started ...
Bây giờ nếu bạn kiểm tra trạng thái Elasticsearch, và bạn sẽ thấy rằng nó đang chạy tốt.
Bạn có thể gặp sự cố cấu hình khác với ví dụ của ta . Nếu bạn có thể tìm ra lỗi nghĩa là gì, hãy thử và tự sửa lỗi. Nếu không thành công, hãy thử và tìm kiếm trên Internet các dòng lỗi riêng lẻ không chứa thông tin dành riêng cho server của bạn (ví dụ: địa chỉ IP hoặc tên nút Elasticsearch được tạo tự động).
Kết luận
Hy vọng rằng hướng dẫn khắc phục sự cố này đã giúp bạn giải quyết sự cố nào bạn gặp phải với cài đặt ngăn xếp ELK của bạn . Nếu bạn có câu hỏi hoặc đề xuất nào, hãy để lại trong phần comment bên dưới!
Các tin liên quan