
, entwickelt zum Sammeln, Umwandeln und Senden von Protokolldaten, Metriken und Ereignissen.
→
Da es in der Rust-Sprache geschrieben ist, zeichnet es sich im Vergleich zu seinen Gegenstücken durch hohe Leistung und geringen RAM-Verbrauch aus. Darüber hinaus wird großen Wert auf Funktionen im Zusammenhang mit der Korrektheit gelegt, insbesondere auf die Möglichkeit, nicht gesendete Ereignisse in einem Puffer auf der Festplatte zu speichern und Dateien zu rotieren.
Architektonisch ist Vector ein Event-Router, der Nachrichten von einem oder mehreren empfängt von Quellen, optional auf diese Nachrichten anwendend Transformationen, und senden Sie sie an einen oder mehrere Abflüsse.
Vector ist ein Ersatz für Filebeat und Logstash, es kann in beiden Rollen agieren (Protokolle empfangen und senden), weitere Details dazu .
Wenn in Logstash die Kette als Eingabe → Filter → Ausgabe aufgebaut ist, dann ist dies in Vector der Fall → →
Beispiele finden Sie in der Dokumentation.
Bei dieser Anleitung handelt es sich um eine überarbeitete Anleitung von . Die Originalanleitung enthält GeoIP-Verarbeitung. Beim Testen von GeoIP aus einem internen Netzwerk gab Vector einen Fehler aus.
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=30Wenn jemand GeoIP verarbeiten muss, lesen Sie die Originalanweisungen von .
Wir werden die Kombination von Nginx (Zugriffsprotokolle) → Vector (Client | Filebeat) → Vector (Server | Logstash) → separat in Clickhouse und separat in Elasticsearch konfigurieren. Wir werden 4 Server installieren. Obwohl Sie es mit 3 Servern umgehen können.

Das Schema ist ungefähr so.
Deaktivieren Sie Selinux auf allen Ihren Servern
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
rebootWir installieren auf allen Servern einen HTTP-Server-Emulator + Dienstprogramme
Als HTTP-Server-Emulator werden wir verwenden aus
Der Nodejs-Stub-Server verfügt über kein RPM. Erstellen Sie rpm dafür. rpm wird mit erstellt
Fügen Sie das Repository antonpatsev/nodejs-stub-server hinzu
yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-serverInstallieren Sie nodejs-stub-server, Apache Benchmark und Screen Terminal Multiplexer auf allen Servern
yum -y install stub_http_server screen mc httpd-tools screenIch habe die Antwortzeit von stub_http_server in der Datei /var/lib/stub_http_server/stub_http_server.js korrigiert, sodass mehr Protokolle vorhanden waren.
var max_sleep = 10;Starten wir stub_http_server.
systemctl start stub_http_server
systemctl enable stub_http_serverauf Server 3
ClickHouse verwendet den SSE 4.2-Befehlssatz. Sofern nicht anders angegeben, ist die Unterstützung dafür im verwendeten Prozessor eine zusätzliche Systemanforderung. Hier ist der Befehl, um zu überprüfen, ob der aktuelle Prozessor SSE 4.2 unterstützt:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"Zuerst müssen Sie das offizielle Repository verbinden:
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_64Um Pakete zu installieren, müssen Sie die folgenden Befehle ausführen:
sudo yum install -y clickhouse-server clickhouse-clientErlauben Sie Clickhouse-Server, die Netzwerkkarte in der Datei /etc/clickhouse-server/config.xml abzuhören
<listen_host>0.0.0.0</listen_host>Ändern der Protokollierungsebene von Trace auf Debug
debuggen
Standardkomprimierungseinstellungen:
min_compress_block_size 65536
max_compress_block_size 1048576Um die Zstd-Komprimierung zu aktivieren, wurde empfohlen, nicht die Konfiguration anzufassen, sondern DDL zu verwenden.

Ich konnte in Google nicht finden, wie man die ZSTD-Komprimierung über DDL verwendet. Also habe ich es so gelassen, wie es ist.
Kollegen, die die ZSTD-Komprimierung in Clickhouse verwenden, teilen bitte die Anweisungen mit.
Um den Server als Daemon zu starten, führen Sie Folgendes aus:
service clickhouse-server startKommen wir nun zur Einrichtung von Clickhouse
Gehen Sie zu Clickhouse
clickhouse-client -h 172.26.10.109 -m172.26.10.109 – IP des Servers, auf dem Clickhouse installiert ist.
Lassen Sie uns eine Vektordatenbank erstellen
CREATE DATABASE vector;Überprüfen wir, ob die Datenbank vorhanden ist.
show databases;Erstellen Sie eine vector.logs-Tabelle.
/* Это таблица где хранятся логи как есть */
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;Wir prüfen, ob die Tabellen erstellt wurden. Lasst uns starten clickhouse-client und stellen Sie eine Anfrage.
Gehen wir zur Vektordatenbank.
use vector;
Ok.
0 rows in set. Elapsed: 0.001 sec.Schauen wir uns die Tabellen an.
show tables;
┌─name────────────────┐
│ logs │
└─────────────────────┘Installieren Sie Elasticsearch auf dem 4. Server, um dieselben Daten zum Vergleich mit Clickhouse an Elasticsearch zu senden
Fügen Sie einen öffentlichen RPM-Schlüssel hinzu
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchLassen Sie uns zwei Repo erstellen:
/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-mdInstallieren Sie Elasticsearch und Kibana
yum install -y kibana elasticsearchDa es sich um eine Kopie handelt, müssen Sie Folgendes zur Datei /etc/elasticsearch/elasticsearch.yml hinzufügen:
discovery.type: single-nodeDamit dieser Vektor Daten von einem anderen Server an Elasticsearch senden kann, ändern wir network.host.
network.host: 0.0.0.0Um eine Verbindung zu Kibana herzustellen, ändern Sie den Parameter server.host in der Datei /etc/kibana/kibana.yml
server.host: "0.0.0.0"Alt und Elasticsearch in den Autostart einbeziehen
systemctl enable elasticsearch
systemctl start elasticsearchund Kibana
systemctl enable kibana
systemctl start kibanaKonfigurieren von Elasticsearch für den Einzelknotenmodus 1 Shard, 0 Replikat. Höchstwahrscheinlich verfügen Sie über einen Cluster mit einer großen Anzahl von Servern und müssen dies nicht tun.
Aktualisieren Sie für zukünftige Indizes die Standardvorlage:
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"}}' Einstellung als Ersatz für Logstash auf Server 2
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screenLassen Sie uns Vector als Ersatz für Logstash einrichten. Bearbeiten der Datei /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"Sie können den Abschnitt transforms.nginx_parse_add_defaults anpassen.
Als verwendet diese Konfigurationen für ein kleines CDN und es können mehrere Werte in upstream_* vorhanden sein
Zum Beispiel:
"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"Wenn dies nicht der Fall ist, kann dieser Abschnitt vereinfacht werden
Lassen Sie uns Diensteinstellungen für systemd /etc/systemd/system/vector.service erstellen
# /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.targetNachdem Sie die Tabellen erstellt haben, können Sie Vector ausführen
systemctl enable vector
systemctl start vectorVektorprotokolle können wie folgt angezeigt werden:
journalctl -f -u vectorSolche Einträge sollten in den Protokollen vorhanden sein
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.Auf dem Client (Webserver) - 1. Server
Auf dem Server mit Nginx müssen Sie IPv6 deaktivieren, da die Protokolltabelle in Clickhouse das Feld verwendet upstream_addr IPv4, da ich im Netzwerk kein IPv6 verwende. Wenn IPv6 nicht deaktiviert ist, treten folgende Fehler auf:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)Vielleicht, liebe Leser, fügen Sie IPv6-Unterstützung hinzu.
Erstellen Sie die Datei /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 = 1Anwenden der Einstellungen
sysctl --systemLass uns Nginx installieren.
Nginx-Repository-Datei /etc/yum.repos.d/nginx.repo hinzugefügt
[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=trueInstallieren Sie das Nginx-Paket
yum install -y nginxZuerst müssen wir das Protokollformat in Nginx in der Datei /etc/nginx/nginx.conf konfigurieren
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;
}Um Ihre aktuelle Konfiguration nicht zu beschädigen, ermöglicht Ihnen Nginx die Verwendung mehrerer access_log-Anweisungen
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате jsonVergessen Sie nicht, eine Regel zu logrotate für neue Protokolle hinzuzufügen (wenn die Protokolldatei nicht mit .log endet).
Entfernen Sie default.conf aus /etc/nginx/conf.d/
rm -f /etc/nginx/conf.d/default.confFügen Sie den virtuellen Host /etc/nginx/conf.d/vhost1.conf hinzu
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://172.26.10.106:8080;
}
}Fügen Sie den virtuellen Host /etc/nginx/conf.d/vhost2.conf hinzu
server {
listen 80;
server_name vhost2;
location / {
proxy_pass http://172.26.10.108:8080;
}
}Fügen Sie den virtuellen Host /etc/nginx/conf.d/vhost3.conf hinzu
server {
listen 80;
server_name vhost3;
location / {
proxy_pass http://172.26.10.109:8080;
}
}Fügen Sie den virtuellen Host /etc/nginx/conf.d/vhost4.conf hinzu
server {
listen 80;
server_name vhost4;
location / {
proxy_pass http://172.26.10.116:8080;
}
}Fügen Sie allen Servern virtuelle Hosts (IP 172.26.10.106 des Servers, auf dem Nginx installiert ist) zur Datei /etc/hosts hinzu:
172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4Und wenn dann alles fertig ist
nginx -t
systemctl restart nginxJetzt installieren wir es selbst
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpmErstellen wir eine Einstellungsdatei für 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.targetUnd konfigurieren Sie den Filebeat-Ersatz in der Konfiguration /etc/vector/vector.toml. IP-Adresse 172.26.10.108 ist die IP-Adresse des Log-Servers (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"Vergessen Sie nicht, den Benutzervektor der entsprechenden Gruppe hinzuzufügen, damit er Protokolldateien lesen kann. Zum Beispiel nginx in centos Erstellt Protokolle mit Administratorrechten.
usermod -a -G adm vectorStarten wir den Vektordienst
systemctl enable vector
systemctl start vectorVektorprotokolle können wie folgt angezeigt werden:
journalctl -f -u vectorEs sollte einen solchen Eintrag in den Protokollen geben
INFO vector::topology::builder: Healthcheck: Passed.Belastbarkeitstest
Die Tests werden mit dem Apache-Benchmark durchgeführt.
Das httpd-tools-Paket wurde auf allen Servern installiert
Wir beginnen mit dem Testen mithilfe des Apache-Benchmarks von 4 verschiedenen Servern im Bildschirm. Zuerst starten wir den Screen-Terminal-Multiplexer und beginnen dann mit dem Testen mithilfe des Apache-Benchmarks. Wie Sie mit dem Bildschirm arbeiten, erfahren Sie in .
Vom 1. Server
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; doneVom 2. Server
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; doneVom 3. Server
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; doneVom 4. Server
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; doneLassen Sie uns die Daten in Clickhouse überprüfen
Gehen Sie zu Clickhouse
clickhouse-client -h 172.26.10.109 -mErstellen einer SQL-Abfrage
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 │ │
└──────────────┴─────────────────────┴─────────────┴─────────┴────────────────┴────────────────────┴───────────────────┴─────────────┴────────────────┴────────────────┴────────────────┴──────────────┴──────────────────┴─────────────────┴──────────────────────────┴───────────────────────┴───────────────┴─────────────┴─────────────┴───────────────┴───────────────┴─────────────────────────┴─────────────────────┴───────────────────────┴───────────────────────┴──────────────────────┴──────────────────────────┴────────────────────────┴─────────────────┴───────────────────────Finden Sie die Größe der Tische in Clickhouse heraus
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;Lassen Sie uns herausfinden, wie viele Protokolle in Clickhouse beansprucht wurden.

Die Größe der Protokolltabelle beträgt 857.19 MB.

Die Größe derselben Daten im Index in Elasticsearch beträgt 4,5 GB.
Wenn Sie in den Parametern keine Daten im Vektor angeben, benötigt Clickhouse 4500/857.19 = 5.24-mal weniger als in Elasticsearch.
Im Vektor wird standardmäßig das Komprimierungsfeld verwendet.
Telegram-Chat von
Telegram-Chat von
Telegram-Chat von „"
Source: habr.com
