Khắc phục sự cố 5 lỗi ELK thường gặp

Bắt đầu với ELK Stack đủ đơn giản và thường chỉ bao gồm một vài lệnh để khởi động và chạy cả ba dịch vụ. Nhưng có một số vấn đề phổ biến có thể khiến người dùng đau khổ.

Tin tốt lành đầu tiên là những vấn đề này thường dễ giải quyết. Một tin vui khác là chúng tôi đã tổng hợp 5 vấn đề phổ biến nhất và hướng dẫn cách khắc phục chúng.

1. Kibana không thể kết nối với Elasticsearch

Bạn đã cài đặt Elasticsearch, Logstash và Kibana. Bạn mở phần sau trong trình duyệt của mình và nhận được màn hình sau:

Kibana không thể kết nối với Elasticsearch

Đừng quá lo lắng. Đây là một vấn đề khá phổ biến và có thể dễ dàng giải quyết.

Như thông báo lỗi đề cập, Kibana không thể thiết lập kết nối đúng cách với Elasticsearch. Có nhiều lý do cho điều này, nhưng thường là vấn đề xác định instance Elasticsearch một cách chính xác trong tệp cấu hình Kibana.

Mở tệp /opt/kibana/config/kibana.yml và xác minh IP và host máy chủ cho thông tin elasticsearch_url đã được cấu hình chính xác chưa (cả URL và port):

Đây là một ví dụ cho một phiên bản Elasticsearch được cài đặt cục bộ:

elasticsearch_url: "http://localhost:9200"

Khởi động lại Kibana:

sudo service kibana restart

Nên làm vậy. Nếu sự cố vẫn tiếp diễn, có thể có sự cố với Elasticsearch. Kiểm tra các phần khắc phục sự cố Elasticsearch bên dưới.

2. Kibana không thể tìm nạp ánh xạ

Trong trường hợp này, Kibana đã thiết lập kết nối với Elasticsearch nhưng không thể tìm nạp ánh xạ cho một index:

Kibana không thể tìm nạp ánh xạ

Như thông báo hiển thị trên nút màu xám ở cuối trang cho biết, Kibana không thể tìm thấy bất kỳ index nào được lưu trữ trong Elasticsearch khớp với mẫu logstash- * mặc định - mẫu mặc định cho dữ liệu được Logstash đưa vào hệ thống (đó là phương thức Kibana giả sử bạn đang sử dụng).

Nếu bạn không sử dụng Logstash để chuyển tiếp dữ liệu vào Elasticsearch hoặc nếu bạn đang sử dụng mẫu không chuẩn trong cấu hình Logstash của mình, hãy nhập lại mẫu index khớp với tên của một hoặc nhiều index Elasticsearch của bạn. Nếu Kibana tìm thấy mẫu index, nút màu xám sẽ chuyển thành màu xanh lá cây, cho phép bạn đưa index vào Kibana.

Nếu bạn đang sử dụng cấu hình Logstash thông thường để gửi dữ liệu, thì rất có thể đã xảy ra sự cố giao tiếp. Nói cách khác, log của bạn không được đưa vào Elasticsearch. Vì một số lý do, Logstash hoặc Elasticsearch có thể không chạy. Xem các phần bên dưới để biết thêm chi tiết về cách đảm bảo rằng các dịch vụ này đang chạy bình thường.

3. Logstash không chạy

Logstash có thể là một thành phần khó quản lý và làm việc. Trước đây chúng tôi đã đề cập đến một số cạm bẫy mà bạn nên chú ý, nhưng có một số lý do khiến Logstash vẫn có thể không chạy ngay cả khi đã cẩn thận tránh những quả mìn này.

Một vấn đề phổ biến khiến Logstash bị lỗi là cấu hình không hợp lệ. Các tệp cấu hình Logstash, nằm trong thư mục /etc/logstash/conf.d, tuân theo các quy tắc cú pháp nghiêm ngặt, nếu bị hỏng, sẽ gây ra lỗi Logstash. Cách tốt nhất để xác thực cấu hình của bạn là sử dụng tham số configtest trong lệnh service:

sudo service logstash configtest

Nếu có lỗi cấu hình, nó sẽ hiển thị trong đầu ra. Sửa cú pháp và thử chạy lại Logstash:

sudo service logstash restart

Kiểm tra trạng thái của dịch vụ với:

sudo service logstash status

Nếu Logstash vẫn không chạy sau khi bạn khắc phục sự cố, hãy xem nhật ký Logstash tại: /var/log/logstash/logstash.log.

Đọc log và cố gắng khắc phục sự cố như được ghi trong log. Dưới đây là ví dụ về log cảnh báo chúng tôi về cấu hình máy chủ không được dùng nữa:

{:timestamp=>"2016-05-30T08:10:42.303000+0000", :message=>"Error: The setting `host` in plugin `elasticsearch` is obsolete and is no longer available. Please use the 'hosts' setting instead. You can specify multiple entries separated by comma in 'host:port' format. If you have any questions about this, you are invited to visit https://discuss.elastic.co/c/logstash and ask.", :level=>:error}

Như bản thân thông báo đã chỉ ra, hãy sử dụng forum Elastic để tìm kiếm câu trả lời cho vấn đề cụ thể mà bạn gặp phải và như đã báo cáo trong log.

4. Logstash không vận chuyển dữ liệu

Bạn đã thấy Logstash kêu như mèo, nhưng không có dữ liệu nào được chuyển vào Elasticsearch.

Nghi phạm chính trong trường hợp này là Elasticsearch, có thể không chạy vì lý do nào đó hoặc lý do khác. Bạn có thể xác minh điều này bằng cách chạy cURL sau:

curl 'http://localhost:9200'

Bạn sẽ thấy kết quả sau trong thiết bị đầu cuối của mình:

{
  "name": "Jebediah Guthrie",
  "cluster_name": "elasticsearch",
  "version": {
    "number": "2.3.1",
    "build_hash": "bd980929010aef404e7cb0843e61d0665269fc39",
    "build_timestamp": "2016-04-04T12:25:05Z",
    "build_snapshot": false,
    "lucene_version": "5.5.0"
  },
  "tagline": "You Know, for Search"
}

Nếu Elasticsearch vẫn không có dữ liệu, hãy chuyển đến phần khắc phục sự cố Elasticsearch bên dưới để biết thêm lý do khiến Elasticsearch có thể không chạy đúng cách.

Một vấn đề phổ biến khác có thể gây ra lỗi này là cấu hình đầu ra không hợp lệ trong tệp cấu hình Logstash. Mở tệp cấu hình tại: /etc/logstash/conf.d/xxx.conf và xác minh rằng máy chủ Elasticsearch được cấu hình chính xác:

output {
  elasticsearch {}
}

Khởi động lại Logstash:

sudo service logstash restart

5. Elasticsearch không chạy

Làm thế nào để bạn biết Elasticsearch không chạy? Có một số dấu hiệu, và rõ ràng nhất là không có log nào xuất hiện trong Kibana. Như đã nêu ở trên, cách đáng tin cậy nhất để ping dịch vụ Elasticsearch bằng cách sử dụng cURL:

curl 'http://localhost:9200'

Nếu tất cả đều ổn, bạn sẽ thấy kết quả sau trong thiết bị đầu cuối của mình:

{
  "name": "Jebediah Guthrie",
  "cluster_name": "elasticsearch",
  "version": {
    "number": "2.3.1",
    "build_hash": "bd980929010aef404e7cb0843e61d0665269fc39",
    "build_timestamp": "2016-04-04T12:25:05Z",
    "build_snapshot": false,
    "lucene_version": "5.5.0"
  },
  "tagline": "You Know, for Search"
}

Nếu không, đầu ra sẽ trông như thế này:

curl: (7) Failed to connect to localhost port 9200: Connection refused

Bây giờ, có một số lý do có thể khiến Elasticsearch không chạy.

Trước tiên, nếu bạn vừa cài đặt Elasticsearch, bạn cần khởi động dịch vụ theo cách thủ công vì nó không được khởi động tự động khi cài đặt:

sudo service elasticsearch start
# elasticsearch is running

Nếu bạn vẫn nhận được thông báo rằng Elasticsearch không chạy, bạn sẽ phải tìm hiểu sâu hơn. Như với Logstash, nơi tốt nhất để thử và gỡ lỗi dịch vụ là file log: /var/log/elasticsearch/elasticsearch.log.

Nguyên nhân phổ biến khiến Elasticsearch không chạy là thông tin máy chủ không hợp lệ trong tệp cấu hình. Theo dõi trực tiếp file log trong khi khởi động dịch vụ là một phương pháp tốt để xác định một lỗi cụ thể. Đây là một ví dụ:

2016-05-30 07:40:36,799][ERROR][bootstrap] [Condor] Exception BindTransportException[Failed to bind to [9300-9400]]; nested: ChannelException[Failed to bind to: /192.0.0.1:9400]; nested: BindException[Cannot assign requested address];

Cấu hình máy chủ lưu trữ nằm trong phần network của tệp cấu hình Elasticsearch và nó sẽ giống như sau:

//When Kibana and Elasticsearch are hosted on the same machine
network.host: localhost
http.port: 9200

//When Kibana and Elasticsearch are hosted on different machines
network.bind_host: 0.0.0.0
http.port: 9200
network.publish_host: <ServerIP>

Xác minh cấu hình và khởi động lại dịch vụ:

sudo service elasticsearch restart

Nếu vấn đề không phải là cấu hình máy chủ, log sẽ cung cấp cho bạn dấu hiệu về nguyên nhân gây ra lỗi và sẽ giúp bạn giải quyết nó. Tìm kiếm trên forum Elastic - rất có thể ai đó đã gặp phải sự cố này trước đó.

Và một mẹo cuối cùng (chỉ trên Ubuntu): Nếu bạn đã cài đặt Elasticsearch hoạt động bình thường và nó đột nhiên dừng lại, điều này có thể do khởi động lại máy chủ của bạn vì Elasticsearch không được cấu hình để tự khởi động ngay sau khi Ubuntu khởi động lại. Để thay đổi điều này, bạn có thể sử dụng lệnh:

sudo update-rc.d elasticsearch defaults 95 10

Lưu ý cuối cùng

Tại Comdy.vn, chúng tôi có nhiều kinh nghiệm trong việc khắc phục các lỗi khác nhau trong ELK Stack. Bài viết này đề cập đến 5 vấn đề thiết lập cơ bản và phổ biến mà những người mới sử dụng hệ thống có thể gặp phải. Các mẹo nâng cao hơn bạn có thể tìm thấy trong bài viết:

Elasticsearch Cheatsheet - Các lệnh hữu ích khi gặp rắc rối
Elasticsearch Cheatsheet cung cấp các lệnh Elasticsearch rất hưu ích để bạn xử lý khi có sự cố xảy ra với cụm Elasticsearch của bạn.
ELK StackDevOpsElasticsearchLogstashKibanaBeats
Bài Viết Liên Quan:
5 sai lầm hàng đầu với Elasticsearch và cách tránh
Trung Nguyen 09/07/2021
5 sai lầm hàng đầu với Elasticsearch và cách tránh

Trong hướng dẫn này, chúng ta hãy xem xét kỹ hơn 5 trong số những sai lầm phổ biến và cách bạn có thể tránh mắc phải chúng.

10 khái niệm Elasticsearch bạn cần biết
Trung Nguyen 04/07/2021
10 khái niệm Elasticsearch bạn cần biết

Bài viết này cung cấp cho bạn 10 khái niệm quan trọng nhất trong Elasticsearch. Nắm được những khái niệm này giúp bạn bớt vất vả hơn khi học Elasticsearch.

Truy vấn Elasticsearch - Hướng dẫn chi tiết
Trung Nguyen 04/07/2021
Truy vấn Elasticsearch - Hướng dẫn chi tiết

Trong hướng dẫn này, chúng tôi sẽ giúp bạn các cách viết truy vấn Elasticsearch đầy đủ, chi tiết nhất. Giúp bạn tự tin khi làm việc với Elasticsearch.

Hướng dẫn Elasticsearch cho người mới bắt đầu
Trung Nguyen 04/07/2021
Hướng dẫn Elasticsearch cho người mới bắt đầu

Bài viết này cung cấp cho người dùng mới hướng dẫn cài đặt, lập chỉ mục ban đầu và hướng dẫn xử lý dữ liệu Elasticsearch.