Elaticsearch đang sử dụng quá nhiều dung lượng đĩa


12

Tôi có một máy chủ CentOS 6.5 mà tôi đã cài đặt Elaticsearch 1.3.2 .

elasticsearch.ymlTệp cấu hình của tôi là một sửa đổi tối thiểu của một giao hàng với elaticsearch làm mặc định. Khi đã loại bỏ tất cả các dòng nhận xét, có vẻ như:

cluster.name: xxx-kibana

node:
    name: "xxx"
    master: true
    data: true

index.number_of_shards: 5

index.number_of_replicas: 1

path:
    logs: /log/elasticsearch/log
    data: /log/elasticsearch/data


transport.tcp.port: 9300

http.port: 9200

discovery.zen.ping.multicast.enabled: false

Elaticsearch nên được nén BẬT theo mặc định và tôi đọc các điểm chuẩn khác nhau đặt tỷ lệ nén từ thấp đến 50% đến cao đến 95%. Thật không may, tỷ lệ nén trong trường hợp của tôi là -400%, hay nói cách khác: dữ liệu được lưu trữ với ES chiếm dung lượng đĩa gấp 4 lần so với tệp văn bản có cùng nội dung . Xem:

12K     logstash-2014.10.07/2/translog
16K     logstash-2014.10.07/2/_state
116M    logstash-2014.10.07/2/index
116M    logstash-2014.10.07/2
12K     logstash-2014.10.07/4/translog
16K     logstash-2014.10.07/4/_state
127M    logstash-2014.10.07/4/index
127M    logstash-2014.10.07/4
12K     logstash-2014.10.07/0/translog
16K     logstash-2014.10.07/0/_state
109M    logstash-2014.10.07/0/index
109M    logstash-2014.10.07/0
16K     logstash-2014.10.07/_state
12K     logstash-2014.10.07/1/translog
16K     logstash-2014.10.07/1/_state
153M    logstash-2014.10.07/1/index
153M    logstash-2014.10.07/1
12K     logstash-2014.10.07/3/translog
16K     logstash-2014.10.07/3/_state
119M    logstash-2014.10.07/3/index
119M    logstash-2014.10.07/3
622M    logstash-2014.10.07/  # <-- This is the total!

đấu với:

6,3M    /var/log/td-agent/legacy_api.20141007_0.log
8,0M    /var/log/td-agent/legacy_api.20141007_10.log
7,6M    /var/log/td-agent/legacy_api.20141007_11.log
6,7M    /var/log/td-agent/legacy_api.20141007_12.log
8,0M    /var/log/td-agent/legacy_api.20141007_13.log
7,6M    /var/log/td-agent/legacy_api.20141007_14.log
7,6M    /var/log/td-agent/legacy_api.20141007_15.log
7,7M    /var/log/td-agent/legacy_api.20141007_16.log
5,6M    /var/log/td-agent/legacy_api.20141007_17.log
7,9M    /var/log/td-agent/legacy_api.20141007_18.log
6,3M    /var/log/td-agent/legacy_api.20141007_19.log
7,8M    /var/log/td-agent/legacy_api.20141007_1.log
7,1M    /var/log/td-agent/legacy_api.20141007_20.log
8,0M    /var/log/td-agent/legacy_api.20141007_21.log
7,2M    /var/log/td-agent/legacy_api.20141007_22.log
3,8M    /var/log/td-agent/legacy_api.20141007_23.log
7,5M    /var/log/td-agent/legacy_api.20141007_2.log
7,3M    /var/log/td-agent/legacy_api.20141007_3.log
8,0M    /var/log/td-agent/legacy_api.20141007_4.log
7,5M    /var/log/td-agent/legacy_api.20141007_5.log
7,5M    /var/log/td-agent/legacy_api.20141007_6.log
7,8M    /var/log/td-agent/legacy_api.20141007_7.log
7,8M    /var/log/td-agent/legacy_api.20141007_8.log
7,2M    /var/log/td-agent/legacy_api.20141007_9.log
173M    total

Tôi đang làm gì sai? Tại sao dữ liệu không được nén?

Tôi đã thêm tạm thời vào index.store.compress.stored: 1tệp cấu hình của mình, vì tôi thấy rằng trong elasticsearch 0.19.5ghi chú phát hành (đó là khi storenén xuất hiện trước), nhưng tôi chưa thể biết liệu nó có tạo ra sự khác biệt hay không và dù sao thì nén cũng phải BẬT mặc định, ngày nay ...


Bạn đã bao giờ xem xét chi phí cần thiết để lưu trữ và lập chỉ mục dữ liệu đó chưa? Đây là nơi khác biệt đến từ.
mailq

@mailq - AFAIK, Đàn hồi nén cả dữ liệu và chỉ mục, và bạn vẫn sẽ nhận thấy việc giảm dung lượng sử dụng trên đĩa của mình, so với nhật ký văn bản. Tôi cho rằng số dặm có thể thay đổi theo cấu trúc nhật ký, nhưng bản chất các bản ghi thường rất lặp đi lặp lại, do đó, việc lập chỉ mục không nên tốn nhiều không gian nhất cho các hoạt động. ... Hay tôi đang hiểu sai điều này?
mac

Nhật ký không thực sự lặp đi lặp lại. Người dùng A đăng nhập tại thời điểm 1. Người dùng B đăng nhập tại thời điểm 2. Điều gì lặp đi lặp lại? Cả hai bộ dữ liệu phải được lập chỉ mục và lưu trữ riêng biệt. Ngoài các mục nhật ký chính nó.
mailq

1

@mailq - Supercool maliq, cảm ơn bạn rất nhiều. Nếu bạn mở rộng nhận xét của mình và viết câu trả lời thích hợp, tôi rất vui lòng đánh dấu nó là được chấp nhận (nếu không tôi sẽ thực hiện sau, nhưng không muốn đánh cắp sấm sét của bạn!).
mac

Câu trả lời:


16

Elaticsearch không thu nhỏ dữ liệu của bạn một cách tự động. Điều này đúng với bất kỳ cơ sở dữ liệu nào. Bên cạnh việc lưu trữ dữ liệu thô, mỗi cơ sở dữ liệu phải lưu trữ siêu dữ liệu cùng với nó. Cơ sở dữ liệu thông thường chỉ lưu trữ một chỉ mục (để tìm kiếm nhanh hơn) cho các cột mà quản trị viên db đã chọn trả trước. Theo mặc định, ElasticSearch khác nhau khi nó lập chỉ mục cho mỗi cột. Do đó, làm cho chỉ số cực kỳ lớn, nhưng mặt khác cho hiệu suất hoàn hảo trong khi lấy dữ liệu.

Trong cấu hình bình thường, bạn sẽ thấy tăng gấp 4 đến 6 lần dữ liệu thô sau khi lập chỉ mục. Mặc dù nó phụ thuộc rất nhiều vào dữ liệu thực tế. Nhưng đây thực sự là hành vi dự định.

Vì vậy, để giảm kích thước cơ sở dữ liệu, bạn phải thực hiện theo cách khác như bạn đã làm trong RDBMs: Loại trừ các cột khỏi bị lập chỉ mục hoặc lưu trữ mà bạn không cần phải lập chỉ mục.

Ngoài ra, bạn có thể bật tính năng nén, nhưng điều này sẽ chỉ cải thiện khi "tài liệu" của bạn lớn, điều này có thể không đúng với các mục nhập tệp nhật ký.

Có một số so sánh và lời khuyên hữu ích ở đây: https://github.com/jordansissel/experiment/tree/master/elaticsearch/disk

Nhưng hãy nhớ rằng: Tìm kiếm đi kèm với một chi phí. Chi phí phải trả là dung lượng đĩa. Nhưng bạn có được sự linh hoạt. Nếu kích thước lưu trữ của bạn vượt quá, sau đó phát triển theo chiều ngang! Đây là nơi mà FlexSearch chiến thắng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.