āĻŽāĻ°āĻŋāĻāĻž āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻ˛ā§āĻāĻž āĻšāĻā§āĻā§, āĻāĻāĻŋāĻ° āĻ ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻāĻā§āĻ˛āĻŋāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻā§āĻ āĻāĻžāĻ°ā§āĻ¯āĻā§āĻˇāĻŽāĻ¤āĻž āĻāĻŦāĻ āĻāĻŽ RAM āĻāĻ°āĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻ¸āĻ āĻŋāĻāĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ āĻ¨ā§āĻ āĻŽāĻ¨ā§āĻ¯ā§āĻ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ, āĻŦāĻŋāĻļā§āĻˇāĻ¤, āĻ āĻĒā§āĻ°ā§āĻ°āĻŋāĻ¤ āĻāĻā§āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻĄāĻŋāĻ¸ā§āĻā§āĻ° āĻŦāĻžāĻĢāĻžāĻ°ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻāĻŦāĻ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻā§āĻ°āĻžāĻ¨ā§āĻ° āĻā§āĻˇāĻŽāĻ¤āĻžāĨ¤
āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯āĻāĻ¤āĻāĻžāĻŦā§, āĻā§āĻā§āĻāĻ° āĻāĻāĻāĻŋ āĻāĻā§āĻ¨ā§āĻ āĻ°āĻžāĻāĻāĻžāĻ° āĻ¯āĻž āĻāĻ āĻŦāĻž āĻāĻāĻžāĻ§āĻŋāĻ āĻĨā§āĻā§ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻā§āĻ°āĻšāĻŖ āĻāĻ°ā§ āĻāĻ¤ā§āĻ¸, āĻāĻā§āĻāĻŋāĻāĻāĻžāĻŦā§ āĻāĻ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻĒāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°, āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ āĻŦāĻž āĻāĻāĻžāĻ§āĻŋāĻ āĻĒāĻžāĻ āĻžāĻā§āĻā§ āĻĄā§āĻ°ā§āĻ¨.
āĻā§āĻā§āĻāĻ° āĻšāĻ˛ āĻĢāĻžāĻāĻ˛āĻŦāĻŋāĻ āĻāĻŦāĻ āĻ˛āĻāĻ¸ā§āĻā§āĻ¯āĻžāĻļā§āĻ° āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨
āĻ˛āĻāĻ¸ā§āĻā§āĻ¯āĻžāĻļā§ āĻā§āĻāĻ¨āĻāĻŋ āĻāĻ¨āĻĒā§āĻ â āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° â āĻāĻāĻāĻĒā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻšāĻ˛ā§ āĻā§āĻā§āĻāĻ°ā§ āĻāĻāĻŋ
āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§.
āĻāĻ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻļā§āĻ§āĻŋāĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ
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
āĻ¯āĻĻāĻŋ āĻā§āĻ āĻāĻŋāĻāĻāĻāĻĒāĻŋ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻŽā§āĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻĒāĻĄāĻŧā§āĻ¨
āĻāĻŽāĻ°āĻž Nginx (āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻ˛āĻ) â āĻā§āĻā§āĻāĻ° (āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ | āĻĢāĻžāĻāĻ˛āĻŦāĻŋāĻ) â āĻā§āĻā§āĻāĻ° (āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° | āĻ˛āĻāĻ¸ā§āĻā§āĻ¯āĻžāĻļ) â āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§ āĻāĻŦāĻ āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻāĻ¸āĻžāĻ°ā§āĻā§ āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻ¸āĻŽāĻ¨ā§āĻŦāĻ¯āĻŧāĻāĻŋ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻŦāĨ¤ āĻāĻŽāĻ°āĻž 4āĻāĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŦāĨ¤ āĻ¯āĻĻāĻŋāĻ āĻāĻĒāĻ¨āĻŋ 3 āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻāĻŋ āĻŦāĻžāĻāĻĒāĻžāĻ¸ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻ¸ā§āĻāĻŋāĻŽāĻāĻŋ āĻāĻ°āĻāĻŽ āĻāĻŋāĻā§āĨ¤
āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻ¸ā§āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻ āĻā§āĻˇāĻŽ āĻāĻ°ā§āĻ¨
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot
āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ HTTP āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻāĻŽā§āĻ˛ā§āĻāĻ° + āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŋ
āĻāĻāĻāĻŋ HTTP āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻāĻŽā§āĻ˛ā§āĻāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ
Nodejs-stub-server āĻāĻ° āĻāĻāĻāĻŋ rpm āĻ¨ā§āĻāĨ¤
āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ antonpatsev/nodejs-stub-server āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-server
āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ nodejs-stub-server, Apache āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨ āĻāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ āĻŽāĻžāĻ˛ā§āĻāĻŋāĻĒā§āĻ˛ā§āĻā§āĻ¸āĻžāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨
yum -y install stub_http_server screen mc httpd-tools screen
āĻāĻŽāĻŋ /var/lib/stub_http_server/stub_http_server.js āĻĢāĻžāĻāĻ˛ā§ stub_http_server āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°ā§āĻāĻŋ āĻ¯āĻžāĻ¤ā§ āĻāĻ°āĻ āĻ˛āĻ āĻāĻŋāĻ˛āĨ¤
var max_sleep = 10;
āĻāĻ¸ā§āĻ¨ stub_http_server āĻāĻžāĻ˛ā§ āĻāĻ°āĻŋāĨ¤
systemctl start stub_http_server
systemctl enable stub_http_server
āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° 3 āĻ
ClickHouse SSE 4.2 āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻ¸ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻ¤āĻžāĻ āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¨āĻž āĻšāĻ˛ā§, āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ°ā§ āĻāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻāĻāĻŋ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧā§ āĻāĻ ā§āĨ¤ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ° SSE 4.2 āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ°āĻ¯āĻŧā§āĻā§:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻ āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
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
āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻšāĻŦā§:
sudo yum install -y clickhouse-server clickhouse-client
āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸-āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°āĻā§ /etc/clickhouse-server/config.xml āĻĢāĻžāĻāĻ˛ā§ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻžāĻ°ā§āĻĄ āĻļā§āĻ¨āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¨
<listen_host>0.0.0.0</listen_host>
āĻā§āĻ°ā§āĻ¸ āĻĨā§āĻā§ āĻĄāĻŋāĻŦāĻžāĻ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ˛āĻāĻŋāĻ āĻ˛ā§āĻā§āĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻĄā§āĻŦāĻžāĻā§ āĻāĻ°āĻž
āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻāĻŽā§āĻĒā§āĻ°ā§āĻļāĻ¨ āĻ¸ā§āĻāĻŋāĻāĻ¸:
min_compress_block_size 65536
max_compress_block_size 1048576
Zstd āĻāĻŽā§āĻĒā§āĻ°ā§āĻļāĻ¨ āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻ¤ā§, āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ¨āĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻŦāĻ°āĻ DDL āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
āĻāĻŽāĻŋ Google-āĻ DDL āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ zstd āĻāĻŽā§āĻĒā§āĻ°ā§āĻļāĻ¨ āĻā§āĻāĻžāĻŦā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ āĻ¤āĻž āĻā§āĻāĻā§ āĻĒāĻžāĻāĻ¨āĻŋāĨ¤ āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻāĻž āĻ¯ā§āĻŽāĻ¨ āĻāĻā§.
āĻ¸āĻšāĻāĻ°ā§āĻŽā§āĻ°āĻž āĻ¯āĻžāĻ°āĻž Clickhouse āĻ zstd āĻāĻŽā§āĻĒā§āĻ°ā§āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨, āĻ āĻ¨ā§āĻā§āĻ°āĻš āĻāĻ°ā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻļā§āĻ¯āĻŧāĻžāĻ° āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻāĻāĻŋ āĻĄā§āĻŽāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§, āĻāĻžāĻ˛āĻžāĻ¨:
service clickhouse-server start
āĻāĻāĻ¨ āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻ¯āĻžāĻ
āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§ āĻ¯āĻžāĻ¨
clickhouse-client -h 172.26.10.109 -m
172.26.10.109 â āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻāĻāĻĒāĻŋ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻāĻā§āĨ¤
āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻā§āĻā§āĻāĻ° āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ
CREATE DATABASE vector;
āĻāĻ° āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻāĻŋāĻ¨āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ.
show databases;
āĻāĻāĻāĻŋ 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;
āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŋ āĻ¯ā§ āĻā§āĻŦāĻŋāĻ˛āĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻ° āĻ˛āĻā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ clickhouse-client
āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻ¸ā§āĻ¨ āĻā§āĻā§āĻāĻ° āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§ āĻ¯āĻžāĻāĨ¤
use vector;
Ok.
0 rows in set. Elapsed: 0.001 sec.
āĻāĻ° āĻā§āĻŦāĻŋāĻ˛ āĻ¤āĻžāĻāĻžāĻ¨.
show tables;
âânameâââââââââââââââââ
â logs â
âââââââââââââââââââââââ
āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻāĻ¸āĻžāĻ°ā§āĻā§ āĻāĻāĻ āĻĄā§āĻāĻž āĻĒāĻžāĻ āĻžāĻ¤ā§ āĻāĻ¤ā§āĻ°ā§āĻĨ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻāĻ¸āĻžāĻ°ā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻāĻāĻŋ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ rpm āĻā§ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
āĻāĻ¸ā§āĻ¨ 2āĻāĻŋ āĻ°ā§āĻĒā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ:
/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
āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻ āĻ¸āĻžāĻ°ā§āĻ āĻāĻŦāĻ āĻāĻŋāĻŦāĻžāĻ¨āĻž āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨
yum install -y kibana elasticsearch
āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ 1 āĻāĻĒāĻŋāĻ¤ā§ āĻĨāĻžāĻāĻŦā§, āĻ¤āĻžāĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤āĻāĻŋ /etc/elasticsearch/elasticsearch.yml āĻĢāĻžāĻāĻ˛ā§ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
discovery.type: single-node
āĻ¯āĻžāĻ¤ā§ āĻā§āĻā§āĻāĻ° āĻ āĻ¨ā§āĻ¯ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĨā§āĻā§ āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻ āĻ¸āĻžāĻ°ā§āĻā§ āĻĄā§āĻāĻž āĻĒāĻžāĻ āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻ¸ā§āĻ¨ network.host āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻŋāĨ¤
network.host: 0.0.0.0
āĻāĻŋāĻŦāĻžāĻ¨āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻ¤ā§, /etc/kibana/kibana.yml āĻĢāĻžāĻāĻ˛ā§ server.host āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°ā§āĻ¨
server.host: "0.0.0.0"
āĻĒā§āĻ°āĻžāĻ¨ā§ āĻāĻŦāĻ āĻ āĻā§āĻ¸ā§āĻāĻžāĻ°ā§āĻā§ āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻ āĻ¸āĻžāĻ°ā§āĻ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°ā§āĻ¨
systemctl enable elasticsearch
systemctl start elasticsearch
āĻāĻŦāĻ āĻāĻŋāĻŦāĻžāĻ¨āĻž
systemctl enable kibana
systemctl start kibana
āĻāĻāĻ-āĻ¨ā§āĻĄ āĻŽā§āĻĄ 1 āĻļāĻžāĻ°ā§āĻĄ, 0 āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻāĻ¸āĻžāĻ°ā§āĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻā§āĻā§āĨ¤ āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻā§ āĻĒā§āĻ°āĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĨāĻžāĻāĻŦā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻĻāĻ°āĻāĻžāĻ° āĻ¨ā§āĻāĨ¤
āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§āĻ° āĻ¸ā§āĻā§āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯, āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ āĻāĻĒāĻĄā§āĻ āĻāĻ°ā§āĻ¨:
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"}}'
āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ āĻā§āĻā§āĻāĻ° āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° 2 āĻ Logstash āĻāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screen
Logstash āĻāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻā§āĻā§āĻāĻ° āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻ¯āĻžāĻāĨ¤ āĻĢāĻžāĻāĻ˛ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž āĻāĻ°āĻž āĻšāĻā§āĻā§ /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"
āĻāĻĒāĻ¨āĻŋ transforms.nginx_parse_add_defaults āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻ¯ā§āĻšā§āĻ¤ā§
āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ:
"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"
āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻ āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻ¸āĻ°āĻ˛ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻāĻ¸ā§āĻ¨ 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
āĻā§āĻŦāĻŋāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻā§āĻā§āĻāĻ° āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
systemctl enable vector
systemctl start vector
āĻā§āĻā§āĻāĻ° āĻ˛āĻ āĻāĻ āĻŽāĻ¤ āĻĻā§āĻāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
journalctl -f -u vector
āĻ˛āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻāĻ°āĻāĻŽ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻĨāĻžāĻāĻž āĻāĻāĻŋāĻ¤
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻā§ (āĻāĻ¯āĻŧā§āĻŦ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°) - ā§§āĻŽ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°
Nginx āĻāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§, āĻāĻĒāĻ¨āĻžāĻā§ ipv6 āĻ¨āĻŋāĻˇā§āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§āĻ° āĻ˛āĻ āĻā§āĻŦāĻŋāĻ˛āĻāĻŋ āĻā§āĻˇā§āĻ¤ā§āĻ°āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ upstream_addr
IPv4, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻŋ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻāĻŋāĻ¤āĻ°ā§ ipv6 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ āĻ¨āĻžāĨ¤ āĻ¯āĻĻāĻŋ ipv6 āĻŦāĻ¨ā§āĻ§ āĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻĨāĻžāĻāĻŦā§:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)
āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻĒāĻžāĻ āĻ, ipv6 āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤
āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ /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
āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻā§āĻā§
sysctl --system
nginx āĻāĻ¨ā§āĻ¸āĻāĻ˛ āĻāĻ°āĻž āĻ¯āĻžāĻāĨ¤
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=true
nginx āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨
yum install -y nginx
āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻŽāĻžāĻĻā§āĻ° /etc/nginx/nginx.conf āĻĢāĻžāĻāĻ˛ā§ Nginx-āĻ āĻ˛āĻ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§
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;
}
āĻāĻĒāĻ¨āĻžāĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻāĻžāĻā§āĻāĻž āĻ¨āĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, Nginx āĻāĻĒāĻ¨āĻžāĻā§ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸_āĻ˛āĻ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻāĻž āĻĨāĻžāĻāĻ¤ā§ āĻĻā§āĻ¯āĻŧ
access_log /var/log/nginx/access.log main; # ĐĄŅĐ°ĐŊĐ´Đ°ŅŅĐŊŅĐš ĐģĐžĐŗ
access_log /var/log/nginx/access.json.log vector; # ĐОвŅĐš ĐģĐžĐŗ в ŅĐžŅĐŧĐ°ŅĐĩ json
āĻ¨āĻ¤ā§āĻ¨ āĻ˛āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ˛āĻāĻ°ā§āĻā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž (āĻ¯āĻĻāĻŋ āĻ˛āĻ āĻĢāĻžāĻāĻ˛āĻāĻŋ .log āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻˇ āĻ¨āĻž āĻšāĻ¯āĻŧ)
/etc/nginx/conf.d/ āĻĨā§āĻā§ default.conf āĻ¸āĻ°āĻžāĻ¨
rm -f /etc/nginx/conf.d/default.conf
āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻšā§āĻ¸ā§āĻ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ /etc/nginx/conf.d/vhost1.conf
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://172.26.10.106:8080;
}
}
āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻšā§āĻ¸ā§āĻ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ /etc/nginx/conf.d/vhost2.conf
server {
listen 80;
server_name vhost2;
location / {
proxy_pass http://172.26.10.108:8080;
}
}
āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻšā§āĻ¸ā§āĻ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ /etc/nginx/conf.d/vhost3.conf
server {
listen 80;
server_name vhost3;
location / {
proxy_pass http://172.26.10.109:8080;
}
}
āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻšā§āĻ¸ā§āĻ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ /etc/nginx/conf.d/vhost4.conf
server {
listen 80;
server_name vhost4;
location / {
proxy_pass http://172.26.10.116:8080;
}
}
/etc/hosts āĻĢāĻžāĻāĻ˛ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻšā§āĻ¸ā§āĻ (āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° 172.26.10.106 āĻāĻāĻĒāĻŋ āĻ¯ā§āĻāĻžāĻ¨ā§ nginx āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻāĻā§) āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨:
172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4
āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻ¸āĻŦāĻāĻŋāĻā§ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻĨāĻžāĻā§
nginx -t
systemctl restart nginx
āĻāĻāĻ¨ āĻāĻ° āĻ¨āĻŋāĻā§āĻ°āĻžāĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻ¯āĻžāĻ
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm
āĻāĻ˛ā§āĻ¨ 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
āĻāĻŦāĻ /etc/vector/vector.toml āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§ Filebeat āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°ā§āĻ¨āĨ¤ IP āĻ āĻŋāĻāĻžāĻ¨āĻž 172.26.10.108 āĻšāĻ˛ āĻ˛āĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° IP āĻ āĻŋāĻāĻžāĻ¨āĻž (āĻā§āĻā§āĻāĻ°-āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°)
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"
āĻā§āĻā§āĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻā§āĻˇā§āĻ ā§āĻ¤ā§ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž āĻ¯āĻžāĻ¤ā§ āĻ¸ā§ āĻ˛āĻ āĻĢāĻžāĻāĻ˛ āĻĒāĻĄāĻŧāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, centos-āĻ nginx adm āĻā§āĻ°ā§āĻĒ āĻ āĻ§āĻŋāĻāĻžāĻ° āĻ¸āĻš āĻ˛āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĨ¤
usermod -a -G adm vector
āĻā§āĻā§āĻāĻ° āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ
systemctl enable vector
systemctl start vector
āĻā§āĻā§āĻāĻ° āĻ˛āĻ āĻāĻ āĻŽāĻ¤ āĻĻā§āĻāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
journalctl -f -u vector
āĻ˛āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻāĻ°āĻāĻŽ āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻĨāĻžāĻāĻž āĻāĻāĻŋāĻ¤
INFO vector::topology::builder: Healthcheck: Passed.
āĻāĻžāĻĒ āĻĒāĻ°ā§āĻā§āĻˇāĻž
Apache āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
httpd-tools āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§
āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ°ā§āĻ¨ā§ 4āĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĨā§āĻā§ Apache āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŋāĨ¤ āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨ āĻāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ āĻŽāĻžāĻ˛ā§āĻāĻŋāĻĒā§āĻ˛ā§āĻā§āĻ¸āĻžāĻ° āĻāĻžāĻ˛ā§ āĻāĻ°āĻŋ, āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻ°āĻž Apache āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŋāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻĒāĻ°ā§āĻĻāĻž āĻ¸āĻā§āĻā§ āĻāĻžāĻ āĻāĻŋāĻāĻžāĻŦā§
ā§§āĻŽ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĨā§āĻā§
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done
ā§§āĻŽ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĨā§āĻā§
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done
ā§§āĻŽ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĨā§āĻā§
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done
ā§§āĻŽ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĨā§āĻā§
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; done
āĻāĻ¸ā§āĻ¨ āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§ āĻĄā§āĻāĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŋ
āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§ āĻ¯āĻžāĻ¨
clickhouse-client -h 172.26.10.109 -m
āĻāĻāĻāĻŋ āĻāĻ¸āĻāĻŋāĻāĻāĻ˛ āĻā§āĻ¯āĻŧā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻā§āĻā§
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 â â
ââââââââââââââââ´ââââââââââââââââââââââ´ââââââââââââââ´ââââââââââ´âââââââââââââââââ´âââââââââââââââââââââ´ââââââââââââââââââââ´ââââââââââââââ´âââââââââââââââââ´âââââââââââââââââ´âââââââââââââââââ´âââââââââââââââ´âââââââââââââââââââ´ââââââââââââââââââ´âââââââââââââââââââââââââââ´ââââââââââââââââââââââââ´ââââââââââââââââ´ââââââââââââââ´ââââââââââââââ´ââââââââââââââââ´ââââââââââââââââ´ââââââââââââââââââââââââââ´ââââââââââââââââââââââ´ââââââââââââââââââââââââ´ââââââââââââââââââââââââ´âââââââââââââââââââââââ´âââââââââââââââââââââââââââ´âââââââââââââââââââââââââ´ââââââââââââââââââ´âââââââââââââââââââââââ
āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻāĻžāĻ° āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°ā§āĻ¨
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;
āĻā§āĻ˛āĻŋāĻāĻšāĻžāĻāĻ¸ā§ āĻāĻ¤ āĻ˛āĻ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻā§ āĻ¤āĻž āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻž āĻ¯āĻžāĻāĨ¤
āĻ˛āĻ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻāĻžāĻ° 857.19 MBāĨ¤
āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻāĻ¸āĻžāĻ°ā§āĻā§ āĻ¸ā§āĻāĻā§ āĻāĻāĻ āĻĄā§āĻāĻžāĻ° āĻāĻāĻžāĻ° 4,5GBāĨ¤
āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°ā§ āĻā§āĻā§āĻāĻ°ā§ āĻĄā§āĻāĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¨āĻž āĻāĻ°ā§āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ Clickhouse āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻāĻ¸āĻžāĻ°ā§āĻā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ 4500/857.19 = 5.24 āĻā§āĻŖ āĻāĻŽ āĻ¨ā§āĻ¯āĻŧāĨ¤
āĻā§āĻā§āĻāĻ°ā§, āĻāĻŽā§āĻĒā§āĻ°ā§āĻļāĻ¨ āĻā§āĻˇā§āĻ¤ā§āĻ°āĻāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻā§āĻ¯āĻžāĻ āĻĻā§āĻŦāĻžāĻ°āĻž
āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻā§āĻ¯āĻžāĻ āĻĻā§āĻŦāĻžāĻ°āĻž
āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻā§āĻ¯āĻžāĻ āĻĻā§āĻŦāĻžāĻ°āĻž "
āĻāĻ¤ā§āĻ¸: www.habr.com