Skickar Nginx json-loggar med Vector till Clickhouse och Elasticsearch

Skickar Nginx json-loggar med Vector till Clickhouse och Elasticsearch

vektor, designad för att samla in, transformera och skicka loggdata, mÀtvÀrden och hÀndelser.

→ Github

Den Àr skriven pÄ sprÄket Rust och kÀnnetecknas av hög prestanda och lÄg RAM-förbrukning jÀmfört med dess analoger. Dessutom Àgnas mycket uppmÀrksamhet Ät funktioner relaterade till korrekthet, i synnerhet möjligheten att spara osÀnda hÀndelser till en buffert pÄ disken och rotera filer.

Arkitektoniskt Àr Vector en hÀndelserouter som tar emot meddelanden frÄn en eller flera kÀllor, valfritt att tillÀmpa över dessa meddelanden transformationeroch skicka dem till en eller flera avlopp.

Vector Àr en ersÀttning för filebeat och logstash, den kan agera i bÄda rollerna (ta emot och skicka loggar), mer information om dem Online.

Om kedjan i Logstash Ă€r byggd som input → filter → output sĂ„ Ă€r den det i Vector kĂ€llor → transformer → sĂ€nkor

Exempel finns i dokumentationen.

Denna instruktion Àr en reviderad instruktion frÄn Vyacheslav Rakhinsky. De ursprungliga instruktionerna innehÄller geoip-bearbetning. NÀr man testade geoip frÄn ett internt nÀtverk gav vektor ett fel.

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=30

Om nÄgon behöver bearbeta geoip, se originalinstruktionerna frÄn Vyacheslav Rakhinsky.

Vi kommer att konfigurera kombinationen av Nginx (Access logs) → Vector (Client | Filebeat) → Vector (Server | Logstash) → separat i Clickhouse och separat i Elasticsearch. Vi kommer att installera 4 servrar. Även om du kan kringgĂ„ det med 3 servrar.

Skickar Nginx json-loggar med Vector till Clickhouse och Elasticsearch

UpplÀgget Àr ungefÀr sÄ hÀr.

Inaktivera Selinux pÄ alla dina servrar

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot

Vi installerar en HTTP-serveremulator + verktyg pÄ alla servrar

Som en HTTP-serveremulator kommer vi att anvÀnda nodejs-stub-server frÄn Maxim Ignatenko

Nodejs-stub-server har ingen rpm. HÀr skapa rpm för det. rpm kommer att kompileras med hjÀlp av Fedora Copr

LÀgg till antonpatsev/nodejs-stub-server-förrÄdet

yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-server

Installera nodejs-stub-server, Apache benchmark och skÀrmterminalmultiplexer pÄ alla servrar

yum -y install stub_http_server screen mc httpd-tools screen

Jag korrigerade stub_http_server-svarstiden i filen /var/lib/stub_http_server/stub_http_server.js sÄ att det blev fler loggar.

var max_sleep = 10;

LÄt oss starta stub_http_server.

systemctl start stub_http_server
systemctl enable stub_http_server

Clickhouse installation pÄ server 3

ClickHouse anvÀnder SSE 4.2-instruktionsuppsÀttningen, sÄ om inget annat anges blir stöd för det i den processor som anvÀnds ett ytterligare systemkrav. HÀr Àr kommandot för att kontrollera om den aktuella processorn stöder SSE 4.2:

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

Först mÄste du ansluta det officiella förvaret:

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

För att installera paket mÄste du köra följande kommandon:

sudo yum install -y clickhouse-server clickhouse-client

TillÄt clickhouse-server att lyssna pÄ nÀtverkskortet i filen /etc/clickhouse-server/config.xml

<listen_host>0.0.0.0</listen_host>

Ändra loggningsnivĂ„n frĂ„n spĂ„rning till felsökning

felsöka

Standard komprimeringsinstÀllningar:

min_compress_block_size  65536
max_compress_block_size  1048576

För att aktivera Zstd-komprimering rekommenderades det att inte röra konfigurationen, utan att anvÀnda DDL.

Skickar Nginx json-loggar med Vector till Clickhouse och Elasticsearch

Jag kunde inte hitta hur man anvÀnder zstd-komprimering via DDL i Google. SÄ jag lÀmnade det som det Àr.

Kollegor som anvÀnder zstd-komprimering i Clickhouse, vÀnligen dela instruktionerna.

För att starta servern som en demon, kör:

service clickhouse-server start

LÄt oss nu gÄ vidare till att stÀlla in Clickhouse

GĂ„ till Clickhouse

clickhouse-client -h 172.26.10.109 -m

172.26.10.109 — IP för servern dĂ€r Clickhouse Ă€r installerat.

LÄt oss skapa en vektordatabas

CREATE DATABASE vector;

LÄt oss kontrollera att databasen finns.

show databases;

Skapa en vector.logs-tabell.

/* Đ­Ń‚ĐŸ таблОца гЎД Ń…Ń€Đ°ĐœŃŃ‚ŃŃ Đ»ĐŸĐłĐž ĐșаĐș Đ”ŃŃ‚ŃŒ */

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;

Vi kontrollerar att tabellerna har skapats. LÄt oss starta clickhouse-client och gör en begÀran.

LÄt oss gÄ till vektordatabasen.

use vector;

Ok.

0 rows in set. Elapsed: 0.001 sec.

LÄt oss titta pÄ tabellerna.

show tables;

┌─name────────────────┐
│ logs                │
└─────────────────────┘

Installerar elasticsearch pÄ den fjÀrde servern för att skicka samma data till Elasticsearch för jÀmförelse med Clickhouse

LĂ€gg till en offentlig rpm-nyckel

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

LÄt oss skapa 2 repor:

/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-md

Installera elasticsearch och kibana

yum install -y kibana elasticsearch

Eftersom det kommer att finnas i en kopia, mÄste du lÀgga till följande i filen /etc/elasticsearch/elasticsearch.yml:

discovery.type: single-node

SÄ att vektorn kan skicka data till elasticsearch frÄn en annan server, lÄt oss byta network.host.

network.host: 0.0.0.0

För att ansluta till kibana, Àndra parametern server.host i filen /etc/kibana/kibana.yml

server.host: "0.0.0.0"

Gammal och inkluderar elasticsearch i autostart

systemctl enable elasticsearch
systemctl start elasticsearch

och kibana

systemctl enable kibana
systemctl start kibana

Konfigurera Elasticsearch för lÀge med en nod 1 shard, 0 replika. Troligtvis kommer du att ha ett kluster med ett stort antal servrar och du behöver inte göra detta.

För framtida index, uppdatera standardmallen:

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"}}' 

Installation vektor som ersÀttning för Logstash pÄ server 2

yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screen

LÄt oss stÀlla in Vector som en ersÀttning för Logstash. Redigera filen /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"

Du kan justera avsnittet transforms.nginx_parse_add_defaults.

Som Vyacheslav Rakhinsky anvÀnder dessa konfigurationer för ett litet CDN och det kan finnas flera vÀrden i upstream_*

Till exempel:

"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"

Om detta inte Àr din situation kan det hÀr avsnittet förenklas

LÄt oss skapa serviceinstÀllningar för 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.target

Efter att ha skapat tabellerna kan du köra Vector

systemctl enable vector
systemctl start vector

Vektorloggar kan ses sÄ hÀr:

journalctl -f -u vector

Det borde finnas sÄdana hÀr poster i loggarna

INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.

PĂ„ klienten (webbserver) - 1:a server

PÄ servern med nginx mÄste du inaktivera ipv6, eftersom loggtabellen i clickhouse anvÀnder fÀltet upstream_addr IPv4, eftersom jag inte anvÀnder ipv6 i nÀtverket. Om ipv6 inte Àr avstÀngd kommer det att uppstÄ fel:

DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)

Kanske lÀsare, lÀgg till ipv6-stöd.

Skapa filen /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

AnvÀnder instÀllningarna

sysctl --system

LÄt oss installera nginx.

Lade till nginx-förvarsfil /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=true

Installera nginx-paketet

yum install -y nginx

Först mÄste vi konfigurera loggformatet i Nginx i filen /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;
}

För att inte bryta din nuvarande konfiguration lÄter Nginx dig ha flera access_log-direktiv

access_log  /var/log/nginx/access.log  main;            # ĐĄŃ‚Đ°ĐœĐŽĐ°Ń€Ń‚ĐœŃ‹Đč Đ»ĐŸĐł
access_log  /var/log/nginx/access.json.log vector;      # ĐĐŸĐČыĐč Đ»ĐŸĐł ĐČ Ń„ĐŸŃ€ĐŒĐ°Ń‚Đ” json

Glöm inte att lÀgga till en regel för att logrotera för nya loggar (om loggfilen inte slutar med .log)

Ta bort default.conf frÄn /etc/nginx/conf.d/

rm -f /etc/nginx/conf.d/default.conf

LÀgg till virtuell vÀrd /etc/nginx/conf.d/vhost1.conf

server {
    listen 80;
    server_name vhost1;
    location / {
        proxy_pass http://172.26.10.106:8080;
    }
}

LÀgg till virtuell vÀrd /etc/nginx/conf.d/vhost2.conf

server {
    listen 80;
    server_name vhost2;
    location / {
        proxy_pass http://172.26.10.108:8080;
    }
}

LÀgg till virtuell vÀrd /etc/nginx/conf.d/vhost3.conf

server {
    listen 80;
    server_name vhost3;
    location / {
        proxy_pass http://172.26.10.109:8080;
    }
}

LÀgg till virtuell vÀrd /etc/nginx/conf.d/vhost4.conf

server {
    listen 80;
    server_name vhost4;
    location / {
        proxy_pass http://172.26.10.116:8080;
    }
}

LÀgg till virtuella vÀrdar (172.26.10.106 ip för servern dÀr nginx Àr installerat) till alla servrar till filen /etc/hosts:

172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4

Och om allt Àr klart dÄ

nginx -t 
systemctl restart nginx

LÄt oss nu installera det sjÀlva vektor

yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm

LÄt oss skapa en instÀllningsfil 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.target

Och konfigurera Filebeat-ersÀttningen i /etc/vector/vector.toml config. IP-adress 172.26.10.108 Àr IP-adressen för loggservern (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"

Glöm inte att lÀgga till anvÀndarvektorn i lÀmplig grupp sÄ att den kan lÀsa loggfiler. Till exempel nginx i centos skapar loggar med administratörsgruppsrÀttigheter.

usermod -a -G adm vector

LÄt oss starta vektortjÀnsten

systemctl enable vector
systemctl start vector

Vektorloggar kan ses sÄ hÀr:

journalctl -f -u vector

Det borde finnas en sÄdan post i loggarna

INFO vector::topology::builder: Healthcheck: Passed.

Stresstestning

Vi utför tester med Apache benchmark.

Paketet httpd-tools installerades pÄ alla servrar

Vi börjar testa med Apache benchmark frÄn 4 olika servrar pÄ skÀrmen. Först startar vi skÀrmterminalmultiplexern och sedan börjar vi testa med Apache-riktmÀrket. Hur man arbetar med skÀrm hittar du i artikeln.

FrÄn 1:a servern

while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done

FrÄn 2:a servern

while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done

FrÄn 3:a servern

while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done

FrÄn 4:a servern

while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; done

LÄt oss kontrollera data i Clickhouse

GĂ„ till Clickhouse

clickhouse-client -h 172.26.10.109 -m

Göra en SQL-frÄga

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 │                       │
└──────────────┮─────────────────────┮─────────────┮─────────┮────────────────┮────────────────────┮───────────────────┮─────────────┮────────────────┮────────────────┮────────────────┮──────────────┮──────────────────┮─────────────────┮──────────────────────────┮───────────────────────┮───────────────┮─────────────┮─────────────┮───────────────┮───────────────┮─────────────────────────┮─────────────────────┮───────────────────────┮───────────────────────┮──────────────────────┮──────────────────────────┮────────────────────────┮─────────────────┮───────────────────────

Ta reda pÄ storleken pÄ borden i 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;

LÄt oss ta reda pÄ hur mycket stockar tog upp i Clickhouse.

Skickar Nginx json-loggar med Vector till Clickhouse och Elasticsearch

Loggtabellens storlek Àr 857.19 MB.

Skickar Nginx json-loggar med Vector till Clickhouse och Elasticsearch

Storleken pÄ samma data i indexet i Elasticsearch Àr 4,5 GB.

Om du inte anger data i vektorn i parametrarna tar Clickhouse 4500/857.19 = 5.24 gÄnger mindre Àn i Elasticsearch.

I vektor anvÀnds komprimeringsfÀltet som standard.

Telegramchatt av Klickhus
Telegramchatt av Elasticsearch
Telegramchatt av "Insamling och analys av system meddelanden"

KĂ€lla: will.com

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster