
, direka untuk mengumpul, mengubah dan menghantar data log, metrik dan peristiwa.
β
Ditulis dalam bahasa Rust, ia dicirikan oleh prestasi tinggi dan penggunaan RAM yang rendah berbanding dengan analognya. Di samping itu, banyak perhatian diberikan kepada fungsi yang berkaitan dengan ketepatan, khususnya, keupayaan untuk menyimpan peristiwa yang tidak dihantar ke penimbal pada cakera dan memutar fail.
Dari segi seni bina, Vektor ialah penghala acara yang menerima mesej daripada satu atau lebih sumber, secara pilihan menggunakan mesej ini transformasi, dan menghantarnya kepada satu atau lebih longkang.
Vektor ialah pengganti untuk filebeat dan logstash, ia boleh bertindak dalam kedua-dua peranan (menerima dan menghantar log), butiran lanjut mengenainya .
Jika dalam Logstash rantai dibina sebagai input β penapis β output maka dalam Vektor ia adalah β β
Contoh boleh didapati dalam dokumentasi.
Arahan ini adalah arahan semakan daripada . Arahan asal mengandungi pemprosesan geoip. Apabila menguji geoip daripada rangkaian dalaman, vektor memberikan ralat.
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=30Jika sesiapa perlu memproses geoip, maka rujuk kepada arahan asal daripada .
Kami akan mengkonfigurasi gabungan Nginx (Log akses) β Vektor (Pelanggan | Filebeat) β Vektor (Pelayan | Logstash) β secara berasingan dalam Clickhouse dan secara berasingan dalam Elasticsearch. Kami akan memasang 4 pelayan. Walaupun anda boleh memintasnya dengan 3 pelayan.

Skimnya adalah seperti ini.
Lumpuhkan Selinux pada semua pelayan anda
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
rebootKami memasang emulator pelayan HTTP + utiliti pada semua pelayan
Sebagai emulator pelayan HTTP kami akan gunakan daripada
Nodejs-stub-server tidak mempunyai rpm. buat rpm untuknya. rpm akan dibina menggunakan
Tambahkan repositori antonpatsev/nodejs-stub-server
yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-serverPasang nodejs-stub-server, penanda aras Apache dan pemultipleks terminal skrin pada semua pelayan
yum -y install stub_http_server screen mc httpd-tools screenSaya membetulkan masa tindak balas stub_http_server dalam fail /var/lib/stub_http_server/stub_http_server.js supaya terdapat lebih banyak log.
var max_sleep = 10;Mari kita lancarkan stub_http_server.
systemctl start stub_http_server
systemctl enable stub_http_serverpada pelayan 3
ClickHouse menggunakan set arahan SSE 4.2, jadi melainkan dinyatakan sebaliknya, sokongan untuknya dalam pemproses yang digunakan menjadi keperluan sistem tambahan. Berikut ialah arahan untuk menyemak sama ada pemproses semasa menyokong SSE 4.2:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"Mula-mula anda perlu menyambungkan repositori rasmi:
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_64Untuk memasang pakej anda perlu menjalankan arahan berikut:
sudo yum install -y clickhouse-server clickhouse-clientBenarkan clickhouse-server mendengar kad rangkaian dalam fail /etc/clickhouse-server/config.xml
<listen_host>0.0.0.0</listen_host>Menukar tahap pengelogan daripada jejak kepada nyahpepijat
debug
Tetapan mampatan standard:
min_compress_block_size 65536
max_compress_block_size 1048576Untuk mengaktifkan pemampatan Zstd, dinasihatkan supaya tidak menyentuh konfigurasi, sebaliknya menggunakan DDL.

Saya tidak dapat mencari cara menggunakan pemampatan zstd melalui DDL dalam Google. Jadi saya biarkan sahaja.
Rakan sekerja yang menggunakan pemampatan zstd dalam Clickhouse, sila kongsi arahan.
Untuk memulakan pelayan sebagai daemon, jalankan:
service clickhouse-server startSekarang mari kita teruskan untuk menyediakan Clickhouse
Pergi ke Clickhouse
clickhouse-client -h 172.26.10.109 -m172.26.10.109 β IP pelayan tempat Clickhouse dipasang.
Mari buat pangkalan data vektor
CREATE DATABASE vector;Mari kita semak bahawa pangkalan data itu wujud.
show databases;Cipta jadual 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;Kami menyemak bahawa jadual telah dibuat. Jom lancarkan clickhouse-client dan membuat permintaan.
Mari pergi ke pangkalan data vektor.
use vector;
Ok.
0 rows in set. Elapsed: 0.001 sec.Mari lihat jadual.
show tables;
ββnameβββββββββββββββββ
β logs β
βββββββββββββββββββββββMemasang elasticsearch pada pelayan ke-4 untuk menghantar data yang sama kepada Elasticsearch untuk perbandingan dengan Clickhouse
Tambah kunci rpm awam
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchMari buat 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-mdPasang elasticsearch dan kibana
yum install -y kibana elasticsearchMemandangkan ia akan berada dalam 1 salinan, anda perlu menambah yang berikut pada fail /etc/elasticsearch/elasticsearch.yml:
discovery.type: single-nodeSupaya vektor boleh menghantar data ke elasticsearch dari pelayan lain, mari tukar network.host.
network.host: 0.0.0.0Untuk menyambung ke kibana, tukar parameter server.host dalam fail /etc/kibana/kibana.yml
server.host: "0.0.0.0"Lama dan sertakan elasticsearch dalam autostart
systemctl enable elasticsearch
systemctl start elasticsearchdan kibana
systemctl enable kibana
systemctl start kibanaMengkonfigurasi Elasticsearch untuk mod satu nod 1 shard, 0 replika. Kemungkinan besar anda akan mempunyai sekumpulan sejumlah besar pelayan dan anda tidak perlu melakukan ini.
Untuk indeks masa hadapan, kemas kini templat lalai:
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"}}' Pemasangan sebagai pengganti Logstash pada pelayan 2
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screenMari sediakan Vektor sebagai pengganti Logstash. Mengedit fail /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"Anda boleh melaraskan bahagian transforms.nginx_parse_add_defaults.
Sebagai menggunakan konfigurasi ini untuk CDN kecil dan mungkin terdapat beberapa nilai di hulu_*
Sebagai contoh:
"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"Jika ini bukan situasi anda, maka bahagian ini boleh dipermudahkan
Mari buat tetapan perkhidmatan untuk 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.targetSelepas mencipta jadual, anda boleh menjalankan Vector
systemctl enable vector
systemctl start vectorLog vektor boleh dilihat seperti ini:
journalctl -f -u vectorPerlu ada entri seperti ini dalam log
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.Pada klien (Pelayan web) - pelayan pertama
Pada pelayan dengan nginx, anda perlu melumpuhkan ipv6, kerana jadual log dalam clickhouse menggunakan medan upstream_addr IPv4, kerana saya tidak menggunakan ipv6 di dalam rangkaian. Jika ipv6 tidak dimatikan, akan terdapat ralat:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)Mungkin pembaca, tambah sokongan ipv6.
Cipta fail /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 = 1Menggunakan tetapan
sysctl --systemMari pasang nginx.
Menambahkan fail repositori 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=truePasang pakej nginx
yum install -y nginxPertama, kita perlu mengkonfigurasi format log dalam Nginx dalam fail /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;
}Untuk tidak memecahkan konfigurasi semasa anda, Nginx membenarkan anda mempunyai beberapa arahan access_log
access_log /var/log/nginx/access.log main; # Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π»ΠΎΠ³
access_log /var/log/nginx/access.json.log vector; # ΠΠΎΠ²ΡΠΉ Π»ΠΎΠ³ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ jsonJangan lupa untuk menambah peraturan untuk logrotate untuk log baharu (jika fail log tidak berakhir dengan .log)
Alih keluar default.conf daripada /etc/nginx/conf.d/
rm -f /etc/nginx/conf.d/default.confTambahkan hos maya /etc/nginx/conf.d/vhost1.conf
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://172.26.10.106:8080;
}
}Tambahkan hos maya /etc/nginx/conf.d/vhost2.conf
server {
listen 80;
server_name vhost2;
location / {
proxy_pass http://172.26.10.108:8080;
}
}Tambahkan hos maya /etc/nginx/conf.d/vhost3.conf
server {
listen 80;
server_name vhost3;
location / {
proxy_pass http://172.26.10.109:8080;
}
}Tambahkan hos maya /etc/nginx/conf.d/vhost4.conf
server {
listen 80;
server_name vhost4;
location / {
proxy_pass http://172.26.10.116:8080;
}
}Tambah hos maya (172.26.10.106 ip pelayan tempat nginx dipasang) ke semua pelayan ke fail /etc/hosts:
172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4Dan jika semuanya sudah siap
nginx -t
systemctl restart nginxSekarang mari kita pasang sendiri
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpmMari buat fail tetapan untuk 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.targetDan konfigurasikan penggantian Filebeat dalam konfigurasi /etc/vector/vector.toml. Alamat IP 172.26.10.108 ialah alamat IP pelayan log (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"Jangan lupa untuk menambah vektor pengguna ke kumpulan yang sesuai supaya ia boleh membaca fail log. Contohnya, nginx dalam centos mencipta log dengan hak kumpulan adm.
usermod -a -G adm vectorMari mulakan perkhidmatan vektor
systemctl enable vector
systemctl start vectorLog vektor boleh dilihat seperti ini:
journalctl -f -u vectorPatutnya ada entry macam ni dalam log
INFO vector::topology::builder: Healthcheck: Passed.Ujian Tekanan
Pengujian dijalankan menggunakan penanda aras Apache.
Pakej httpd-tools telah dipasang pada semua pelayan
Kami mula menguji menggunakan penanda aras Apache daripada 4 pelayan berbeza dalam skrin. Mula-mula, kami melancarkan pemultipleks terminal skrin, dan kemudian kami mula menguji menggunakan penanda aras Apache. Cara bekerja dengan skrin yang anda boleh temui di .
Dari pelayan pertama
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; doneDari pelayan pertama
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; doneDari pelayan pertama
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; doneDari pelayan pertama
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; doneMari semak data dalam Clickhouse
Pergi ke Clickhouse
clickhouse-client -h 172.26.10.109 -mMembuat pertanyaan 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 β β
ββββββββββββββββ΄ββββββββββββββββββββββ΄ββββββββββββββ΄ββββββββββ΄βββββββββββββββββ΄βββββββββββββββββββββ΄ββββββββββββββββββββ΄ββββββββββββββ΄βββββββββββββββββ΄βββββββββββββββββ΄βββββββββββββββββ΄βββββββββββββββ΄βββββββββββββββββββ΄ββββββββββββββββββ΄βββββββββββββββββββββββββββ΄ββββββββββββββββββββββββ΄ββββββββββββββββ΄ββββββββββββββ΄ββββββββββββββ΄ββββββββββββββββ΄ββββββββββββββββ΄ββββββββββββββββββββββββββ΄ββββββββββββββββββββββ΄ββββββββββββββββββββββββ΄ββββββββββββββββββββββββ΄βββββββββββββββββββββββ΄βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββ΄βββββββββββββββββββββββKetahui saiz jadual dalam 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;Mari kita ketahui jumlah log yang digunakan dalam Clickhouse.

Saiz jadual log ialah 857.19 MB.

Saiz data yang sama dalam indeks dalam Elasticsearch ialah 4,5GB.
Jika anda tidak menyatakan data dalam vektor dalam parameter, Clickhouse mengambil 4500/857.19 = 5.24 kali kurang daripada dalam Elasticsearch.
Dalam vektor, medan mampatan digunakan secara lalai.
Sembang telegram oleh
Sembang telegram oleh
Sembang telegram oleh ""
Sumber: www.habr.com
