
, được thiết kế để thu thập, chuyển đổi và gửi dữ liệu nhật ký, số liệu và sự kiện.
→
Được viết bằng ngôn ngữ Rust, nó được đặc trưng bởi hiệu suất cao và mức tiêu thụ RAM thấp so với các ngôn ngữ tương tự. Ngoài ra, người ta chú ý nhiều đến các chức năng liên quan đến tính chính xác, đặc biệt là khả năng lưu các sự kiện chưa gửi vào bộ đệm trên đĩa và xoay tệp.
Về mặt kiến trúc, Vector là một bộ định tuyến sự kiện nhận tin nhắn từ một hoặc nhiều nguồn, tùy ý áp dụng trên các tin nhắn này phép biến hìnhvà gửi chúng tới một hoặc nhiều cống thoát nước.
Vector là sự thay thế cho filebeat và logstash, nó có thể hoạt động ở cả hai vai trò (nhận và gửi nhật ký), biết thêm chi tiết về chúng .
Nếu trong Logstash chuỗi được xây dựng dưới dạng đầu vào → bộ lọc → đầu ra thì trong Vector nó là → →
Ví dụ có thể được tìm thấy trong tài liệu.
Hướng dẫn này là một hướng dẫn sửa đổi từ . Các hướng dẫn ban đầu chứa xử lý geoip. Khi kiểm tra geoip từ mạng nội bộ, vector đã báo lỗi.
Aug 05 06:25:31.889 DEBUG transform{name=nginx_parse_rename_fields type=rename_fields}: vector::transforms::rename_fields: Field did not exist field=«geoip.country_name» rate_limit_secs=30Nếu ai có nhu cầu xử lý geoip thì tham khảo hướng dẫn gốc từ .
Chúng tôi sẽ định cấu hình kết hợp Nginx (Nhật ký truy cập) → Vector (Máy khách | Filebeat) → Vector (Máy chủ | Logstash) → riêng biệt trong Clickhouse và riêng biệt trong Elaticsearch. Chúng tôi sẽ cài đặt 4 máy chủ. Mặc dù bạn có thể bỏ qua nó với 3 máy chủ.

Đề án này là một cái gì đó như thế này.
Vô hiệu hóa Selinux trên tất cả các máy chủ của bạn
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
rebootChúng tôi cài đặt trình giả lập máy chủ HTTP + tiện ích trên tất cả các máy chủ
Là trình mô phỏng máy chủ HTTP, chúng tôi sẽ sử dụng từ
Nodejs-stub-server không có vòng/phút. tạo vòng/phút cho nó. vòng/phút sẽ được xây dựng bằng cách sử dụng
Thêm kho lưu trữ Antonpatsev/nodejs-stub-server
yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-serverCài đặt nodejs-stub-server, bộ ghép kênh điểm chuẩn Apache và thiết bị đầu cuối màn hình trên tất cả các máy chủ
yum -y install stub_http_server screen mc httpd-tools screenTôi đã sửa thời gian phản hồi stub_http_server trong tệp /var/lib/stub_http_server/stub_http_server.js để có nhiều nhật ký hơn.
var max_sleep = 10;Hãy khởi chạy stub_http_server.
systemctl start stub_http_server
systemctl enable stub_http_servertrên máy chủ 3
ClickHouse sử dụng tập lệnh SSE 4.2, do đó, trừ khi có quy định khác, việc hỗ trợ tập lệnh này trong bộ xử lý được sử dụng sẽ trở thành một yêu cầu bổ sung của hệ thống. Đây là lệnh để kiểm tra xem bộ xử lý hiện tại có hỗ trợ SSE 4.2 hay không:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"Trước tiên, bạn cần kết nối kho lưu trữ chính thức:
sudo yum install -y yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64Để cài đặt các gói, bạn cần chạy các lệnh sau:
sudo yum install -y clickhouse-server clickhouse-clientCho phép clickhouse-server nghe card mạng trong file /etc/clickhouse-server/config.xml
<listen_host>0.0.0.0</listen_host>Thay đổi cấp độ ghi nhật ký từ theo dõi sang gỡ lỗi
gỡ lỗi
Cài đặt nén tiêu chuẩn:
min_compress_block_size 65536
max_compress_block_size 1048576Để kích hoạt tính năng nén Zstd, bạn không nên chạm vào cấu hình mà nên sử dụng DDL.

Tôi không thể tìm thấy cách sử dụng tính năng nén zstd qua DDL trong Google. Vì thế tôi để nó như vậy.
Các đồng nghiệp sử dụng tính năng nén zstd trong Clickhouse xin chia sẻ hướng dẫn nhé.
Để khởi động máy chủ dưới dạng daemon, hãy chạy:
service clickhouse-server startBây giờ chúng ta chuyển sang phần setup Clickhouse
Đến Clickhouse
clickhouse-client -h 172.26.10.109 -m172.26.10.109 — IP của máy chủ nơi Clickhouse được cài đặt.
Hãy tạo một cơ sở dữ liệu vector
CREATE DATABASE vector;Hãy kiểm tra xem cơ sở dữ liệu có tồn tại không.
show databases;Tạo bảng vector.logs.
/* Это таблица где хранятся логи как есть */
CREATE TABLE vector.logs
(
`node_name` String,
`timestamp` DateTime,
`server_name` String,
`user_id` String,
`request_full` String,
`request_user_agent` String,
`request_http_host` String,
`request_uri` String,
`request_scheme` String,
`request_method` String,
`request_length` UInt64,
`request_time` Float32,
`request_referrer` String,
`response_status` UInt16,
`response_body_bytes_sent` UInt64,
`response_content_type` String,
`remote_addr` IPv4,
`remote_port` UInt32,
`remote_user` String,
`upstream_addr` IPv4,
`upstream_port` UInt32,
`upstream_bytes_received` UInt64,
`upstream_bytes_sent` UInt64,
`upstream_cache_status` String,
`upstream_connect_time` Float32,
`upstream_header_time` Float32,
`upstream_response_length` UInt64,
`upstream_response_time` Float32,
`upstream_status` UInt16,
`upstream_content_type` String,
INDEX idx_http_host request_http_host TYPE set(0) GRANULARITY 1
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(timestamp)
ORDER BY timestamp
TTL timestamp + toIntervalMonth(1)
SETTINGS index_granularity = 8192;Chúng tôi kiểm tra xem các bảng đã được tạo chưa. Hãy khởi động clickhouse-client và đưa ra yêu cầu.
Hãy đi đến cơ sở dữ liệu vector.
use vector;
Ok.
0 rows in set. Elapsed: 0.001 sec.Chúng ta hãy nhìn vào các bảng.
show tables;
┌─name────────────────┐
│ logs │
└─────────────────────┘Cài đặt elasticsearch trên server thứ 4 để gửi cùng dữ liệu lên Elasticsearch để so sánh với Clickhouse
Thêm khóa vòng/phút công khai
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchHãy tạo 2 repo:
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md/etc/yum.repos.d/kibana.repo
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-mdCài đặt elaticsearch và kibana
yum install -y kibana elasticsearchVì nó sẽ ở dạng 1 bản sao nên bạn cần thêm phần sau vào tệp /etc/elasticsearch/elasticsearch.yml:
discovery.type: single-nodeĐể vectơ đó có thể gửi dữ liệu đến elaticsearch từ một máy chủ khác, hãy thay đổi network.host.
network.host: 0.0.0.0Để kết nối với kibana, hãy thay đổi tham số server.host trong tệp /etc/kibana/kibana.yml
server.host: "0.0.0.0"Cũ và bao gồm elaticsearch trong tự động khởi động
systemctl enable elasticsearch
systemctl start elasticsearchvà kibana
systemctl enable kibana
systemctl start kibanaĐịnh cấu hình Elaticsearch cho chế độ nút đơn 1 phân đoạn, 0 bản sao. Rất có thể bạn sẽ có một cụm gồm một số lượng lớn máy chủ và bạn không cần phải làm điều này.
Đối với các chỉ mục trong tương lai, hãy cập nhật mẫu mặc định:
curl -X PUT http://localhost:9200/_template/default -H 'Content-Type: application/json' -d '{"index_patterns": ["*"],"order": -1,"settings": {"number_of_shards": "1","number_of_replicas": "0"}}' Cài đặt thay thế cho Logstash trên máy chủ 2
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screenHãy thiết lập Vector để thay thế cho Logstash. Chỉnh sửa tệp /etc/vector/vector.toml
# /etc/vector/vector.toml
data_dir = "/var/lib/vector"
[sources.nginx_input_vector]
# General
type = "vector"
address = "0.0.0.0:9876"
shutdown_timeout_secs = 30
[transforms.nginx_parse_json]
inputs = [ "nginx_input_vector" ]
type = "json_parser"
[transforms.nginx_parse_add_defaults]
inputs = [ "nginx_parse_json" ]
type = "lua"
version = "2"
hooks.process = """
function (event, emit)
function split_first(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result[1];
end
function split_last(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result[#result];
end
event.log.upstream_addr = split_first(split_last(event.log.upstream_addr, ', '), ':')
event.log.upstream_bytes_received = split_last(event.log.upstream_bytes_received, ', ')
event.log.upstream_bytes_sent = split_last(event.log.upstream_bytes_sent, ', ')
event.log.upstream_connect_time = split_last(event.log.upstream_connect_time, ', ')
event.log.upstream_header_time = split_last(event.log.upstream_header_time, ', ')
event.log.upstream_response_length = split_last(event.log.upstream_response_length, ', ')
event.log.upstream_response_time = split_last(event.log.upstream_response_time, ', ')
event.log.upstream_status = split_last(event.log.upstream_status, ', ')
if event.log.upstream_addr == "" then
event.log.upstream_addr = "127.0.0.1"
end
if (event.log.upstream_bytes_received == "-" or event.log.upstream_bytes_received == "") then
event.log.upstream_bytes_received = "0"
end
if (event.log.upstream_bytes_sent == "-" or event.log.upstream_bytes_sent == "") then
event.log.upstream_bytes_sent = "0"
end
if event.log.upstream_cache_status == "" then
event.log.upstream_cache_status = "DISABLED"
end
if (event.log.upstream_connect_time == "-" or event.log.upstream_connect_time == "") then
event.log.upstream_connect_time = "0"
end
if (event.log.upstream_header_time == "-" or event.log.upstream_header_time == "") then
event.log.upstream_header_time = "0"
end
if (event.log.upstream_response_length == "-" or event.log.upstream_response_length == "") then
event.log.upstream_response_length = "0"
end
if (event.log.upstream_response_time == "-" or event.log.upstream_response_time == "") then
event.log.upstream_response_time = "0"
end
if (event.log.upstream_status == "-" or event.log.upstream_status == "") then
event.log.upstream_status = "0"
end
emit(event)
end
"""
[transforms.nginx_parse_remove_fields]
inputs = [ "nginx_parse_add_defaults" ]
type = "remove_fields"
fields = ["data", "file", "host", "source_type"]
[transforms.nginx_parse_coercer]
type = "coercer"
inputs = ["nginx_parse_remove_fields"]
types.request_length = "int"
types.request_time = "float"
types.response_status = "int"
types.response_body_bytes_sent = "int"
types.remote_port = "int"
types.upstream_bytes_received = "int"
types.upstream_bytes_send = "int"
types.upstream_connect_time = "float"
types.upstream_header_time = "float"
types.upstream_response_length = "int"
types.upstream_response_time = "float"
types.upstream_status = "int"
types.timestamp = "timestamp"
[sinks.nginx_output_clickhouse]
inputs = ["nginx_parse_coercer"]
type = "clickhouse"
database = "vector"
healthcheck = true
host = "http://172.26.10.109:8123" # Адрес Clickhouse
table = "logs"
encoding.timestamp_format = "unix"
buffer.type = "disk"
buffer.max_size = 104900000
buffer.when_full = "block"
request.in_flight_limit = 20
[sinks.elasticsearch]
type = "elasticsearch"
inputs = ["nginx_parse_coercer"]
compression = "none"
healthcheck = true
# 172.26.10.116 - сервер где установен elasticsearch
host = "http://172.26.10.116:9200"
index = "vector-%Y-%m-%d"Bạn có thể điều chỉnh phần Transforms.nginx_parse_add_defaults.
Như sử dụng các cấu hình này cho một CDN nhỏ và có thể có một số giá trị trong upstream_*
Ví dụ:
"upstream_addr": "128.66.0.10:443, 128.66.0.11:443, 128.66.0.12:443"
"upstream_bytes_received": "-, -, 123"
"upstream_status": "502, 502, 200"Nếu đây không phải là trường hợp của bạn thì phần này có thể được đơn giản hóa
Hãy tạo cài đặt dịch vụ cho systemd /etc/systemd/system/vector.service
# /etc/systemd/system/vector.service
[Unit]
Description=Vector
After=network-online.target
Requires=network-online.target
[Service]
User=vector
Group=vector
ExecStart=/usr/bin/vector
ExecReload=/bin/kill -HUP $MAINPID
Restart=no
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=vector
[Install]
WantedBy=multi-user.targetSau khi tạo bảng, bạn có thể chạy Vector
systemctl enable vector
systemctl start vectorNhật ký vector có thể được xem như thế này:
journalctl -f -u vectorNên có những mục như thế này trong nhật ký
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.Trên máy khách (Máy chủ web) - Máy chủ thứ 1
Trên máy chủ có nginx, bạn cần tắt ipv6, vì bảng nhật ký trong clickhouse sử dụng trường upstream_addr IPv4, vì tôi không sử dụng ipv6 trong mạng. Nếu không tắt ipv6 sẽ xuất hiện lỗi:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)Có lẽ độc giả hãy thêm hỗ trợ ipv6.
Tạo tệp /etc/sysctl.d/98-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1Áp dụng cài đặt
sysctl --systemHãy cài đặt nginx.
Đã thêm tệp kho lưu trữ nginx /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=trueCài đặt gói nginx
yum install -y nginxĐầu tiên, chúng ta cần định cấu hình định dạng nhật ký trong Nginx trong tệp /etc/nginx/nginx.conf
user nginx;
# you must set worker processes based on your CPU cores, nginx does not benefit from setting more than that
worker_processes auto; #some last versions calculate it automatically
# number of file descriptors used for nginx
# the limit for the maximum FDs on the server is usually set by the OS.
# if you don't set FD's then OS settings will be used which is by default 2000
worker_rlimit_nofile 100000;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# provides the configuration file context in which the directives that affect connection processing are specified.
events {
# determines how much clients will be served per worker
# max clients = worker_connections * worker_processes
# max clients is also limited by the number of socket connections available on the system (~64k)
worker_connections 4000;
# optimized to serve many clients with each thread, essential for linux -- for testing environment
use epoll;
# accept as many connections as possible, may flood worker connections if set too low -- for testing environment
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format vector escape=json
'{'
'"node_name":"nginx-vector",'
'"timestamp":"$time_iso8601",'
'"server_name":"$server_name",'
'"request_full": "$request",'
'"request_user_agent":"$http_user_agent",'
'"request_http_host":"$http_host",'
'"request_uri":"$request_uri",'
'"request_scheme": "$scheme",'
'"request_method":"$request_method",'
'"request_length":"$request_length",'
'"request_time": "$request_time",'
'"request_referrer":"$http_referer",'
'"response_status": "$status",'
'"response_body_bytes_sent":"$body_bytes_sent",'
'"response_content_type":"$sent_http_content_type",'
'"remote_addr": "$remote_addr",'
'"remote_port": "$remote_port",'
'"remote_user": "$remote_user",'
'"upstream_addr": "$upstream_addr",'
'"upstream_bytes_received": "$upstream_bytes_received",'
'"upstream_bytes_sent": "$upstream_bytes_sent",'
'"upstream_cache_status":"$upstream_cache_status",'
'"upstream_connect_time":"$upstream_connect_time",'
'"upstream_header_time":"$upstream_header_time",'
'"upstream_response_length":"$upstream_response_length",'
'"upstream_response_time":"$upstream_response_time",'
'"upstream_status": "$upstream_status",'
'"upstream_content_type":"$upstream_http_content_type"'
'}';
access_log /var/log/nginx/access.log main;
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}Để không làm hỏng cấu hình hiện tại của bạn, Nginx cho phép bạn có một số lệnh access_log
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате jsonĐừng quên thêm quy tắc để logrotate cho nhật ký mới (nếu tệp nhật ký không kết thúc bằng .log)
Xóa default.conf khỏi /etc/nginx/conf.d/
rm -f /etc/nginx/conf.d/default.confThêm máy chủ ảo /etc/nginx/conf.d/vhost1.conf
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://172.26.10.106:8080;
}
}Thêm máy chủ ảo /etc/nginx/conf.d/vhost2.conf
server {
listen 80;
server_name vhost2;
location / {
proxy_pass http://172.26.10.108:8080;
}
}Thêm máy chủ ảo /etc/nginx/conf.d/vhost3.conf
server {
listen 80;
server_name vhost3;
location / {
proxy_pass http://172.26.10.109:8080;
}
}Thêm máy chủ ảo /etc/nginx/conf.d/vhost4.conf
server {
listen 80;
server_name vhost4;
location / {
proxy_pass http://172.26.10.116:8080;
}
}Thêm máy chủ ảo (172.26.10.106 ip của máy chủ nơi cài đặt nginx) vào tất cả các máy chủ vào tệp /etc/hosts:
172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4Và nếu mọi thứ đã sẵn sàng thì
nginx -t
systemctl restart nginxBây giờ chúng ta hãy tự cài đặt nó
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpmHãy tạo một tệp cài đặt cho systemd /etc/systemd/system/vector.service
[Unit]
Description=Vector
After=network-online.target
Requires=network-online.target
[Service]
User=vector
Group=vector
ExecStart=/usr/bin/vector
ExecReload=/bin/kill -HUP $MAINPID
Restart=no
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=vector
[Install]
WantedBy=multi-user.targetVà định cấu hình thay thế Filebeat trong cấu hình /etc/vector/vector.toml. Địa chỉ IP 172.26.10.108 là địa chỉ IP của log server (Vector-Server)
data_dir = "/var/lib/vector"
[sources.nginx_file]
type = "file"
include = [ "/var/log/nginx/access.json.log" ]
start_at_beginning = false
fingerprinting.strategy = "device_and_inode"
[sinks.nginx_output_vector]
type = "vector"
inputs = [ "nginx_file" ]
address = "172.26.10.108:9876"Đừng quên thêm vector người dùng vào nhóm thích hợp để nó có thể đọc các tệp nhật ký. Ví dụ: nginx trong centos Tạo nhật ký với quyền quản trị viên nhóm adm.
usermod -a -G adm vectorHãy bắt đầu dịch vụ vector
systemctl enable vector
systemctl start vectorNhật ký vector có thể được xem như thế này:
journalctl -f -u vectorNên có một mục như thế này trong nhật ký
INFO vector::topology::builder: Healthcheck: Passed.Bài kiểm tra về áp lực
Việc kiểm tra được thực hiện bằng cách sử dụng điểm chuẩn Apache.
Gói httpd-tools đã được cài đặt trên tất cả các máy chủ
Chúng tôi bắt đầu thử nghiệm bằng cách sử dụng điểm chuẩn Apache từ 4 máy chủ khác nhau trên màn hình. Đầu tiên, chúng tôi khởi chạy bộ ghép kênh đầu cuối màn hình, sau đó chúng tôi bắt đầu thử nghiệm bằng cách sử dụng điểm chuẩn Apache. Cách làm việc với màn hình bạn có thể tìm thấy trong .
Từ máy chủ thứ nhất
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; doneTừ máy chủ thứ nhất
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; doneTừ máy chủ thứ nhất
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; doneTừ máy chủ thứ nhất
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; doneHãy kiểm tra dữ liệu trong Clickhouse
Đến Clickhouse
clickhouse-client -h 172.26.10.109 -mThực hiện một truy vấn SQL
SELECT * FROM vector.logs;
┌─node_name────┬───────────timestamp─┬─server_name─┬─user_id─┬─request_full───┬─request_user_agent─┬─request_http_host─┬─request_uri─┬─request_scheme─┬─request_method─┬─request_length─┬─request_time─┬─request_referrer─┬─response_status─┬─response_body_bytes_sent─┬─response_content_type─┬───remote_addr─┬─remote_port─┬─remote_user─┬─upstream_addr─┬─upstream_port─┬─upstream_bytes_received─┬─upstream_bytes_sent─┬─upstream_cache_status─┬─upstream_connect_time─┬─upstream_header_time─┬─upstream_response_length─┬─upstream_response_time─┬─upstream_status─┬─upstream_content_type─┐
│ nginx-vector │ 2020-08-07 04:32:42 │ vhost1 │ │ GET / HTTP/1.0 │ 1server │ vhost1 │ / │ http │ GET │ 66 │ 0.028 │ │ 404 │ 27 │ │ 172.26.10.106 │ 45886 │ │ 172.26.10.106 │ 0 │ 109 │ 97 │ DISABLED │ 0 │ 0.025 │ 27 │ 0.029 │ 404 │ │
└──────────────┴─────────────────────┴─────────────┴─────────┴────────────────┴────────────────────┴───────────────────┴─────────────┴────────────────┴────────────────┴────────────────┴──────────────┴──────────────────┴─────────────────┴──────────────────────────┴───────────────────────┴───────────────┴─────────────┴─────────────┴───────────────┴───────────────┴─────────────────────────┴─────────────────────┴───────────────────────┴───────────────────────┴──────────────────────┴──────────────────────────┴────────────────────────┴─────────────────┴───────────────────────Tìm hiểu kích thước bàn trong Clickhouse
select concat(database, '.', table) as table,
formatReadableSize(sum(bytes)) as size,
sum(rows) as rows,
max(modification_time) as latest_modification,
sum(bytes) as bytes_size,
any(engine) as engine,
formatReadableSize(sum(primary_key_bytes_in_memory)) as primary_keys_size
from system.parts
where active
group by database, table
order by bytes_size desc;Hãy cùng tìm hiểu xem Clickhouse đã chiếm bao nhiêu nhật ký.

Kích thước bảng nhật ký là 857.19 MB.

Kích thước của cùng một dữ liệu trong chỉ mục trong Elaticsearch là 4,5GB.
Nếu bạn không chỉ định dữ liệu trong vectơ trong các tham số, Clickhouse mất 4500/857.19 = 5.24 lần so với trong Elaticsearch.
Trong vectơ, trường nén được sử dụng theo mặc định.
Trò chuyện Telegram bởi
Trò chuyện Telegram bởi
Trò chuyện Telegram bởi ""
Nguồn: www.habr.com
