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
 

