Ovaj članak će raspravljati o projektu
Za pregled analitike prema zapisnicima, napravimo kontrolnu ploču za Grafanu.
Koga briga, dobrodošao pod mačku.
Instalirajte nginx, grafana na standardni način.
Instalirajte clickhouse klaster sa ansible-playbookom iz
Kreiranje baze podataka i tabela u Clickhouse-u
U ovome
Svaki zahtjev pravimo redom na svakom serveru Clickhouse klastera.
Važna napomena. U ovom redu, logs_cluster treba zamijeniti imenom vašeg klastera iz datoteke clickhouse_remote_servers.xml između "remote_servers" i "shard".
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
Instaliranje i konfigurisanje nginx-log-collector-rpm
Nginx-log-collector nema rpm. Evo
Instalirajte rpm paket nginx-log-collector-rpm
yum -y install yum-plugin-copr
yum copr enable antonpatsev/nginx-log-collector-rpm
yum -y install nginx-log-collector
systemctl start nginx-log-collector
Uredite konfiguraciju /etc/nginx-log-collector/config.yaml:
.......
upload:
table: nginx.access_log
dsn: http://ip-адрес-кластера-clickhouse:8123/
- tag: "nginx_error:"
format: error # access | error
buffer_size: 1048576
upload:
table: nginx.error_log
dsn: http://ip-адрес-кластера-clickhouse:8123/
Postavljanje nginxa
Opća nginx konfiguracija:
user nginx;
worker_processes auto;
#error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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 avito_json escape=json
'{'
'"event_datetime": "$time_iso8601", '
'"server_name": "$server_name", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"http_x_real_ip": "$http_x_real_ip", '
'"status": "$status", '
'"scheme": "$scheme", '
'"request_method": "$request_method", '
'"request_uri": "$request_uri", '
'"server_protocol": "$server_protocol", '
'"body_bytes_sent": $body_bytes_sent, '
'"http_referer": "$http_referer", '
'"http_user_agent": "$http_user_agent", '
'"request_bytes": "$request_length", '
'"request_time": "$request_time", '
'"upstream_addr": "$upstream_addr", '
'"upstream_response_time": "$upstream_response_time", '
'"hostname": "$hostname", '
'"host": "$host"'
'}';
access_log syslog_server=unix:/var/run/nginx_log.sock,nohostname,tag=nginx avito_json; #ClickHouse
error_log syslog_server=unix:/var/run/nginx_log.sock,nohostname,tag=nginx_error; #ClickHouse
#access_log /var/log/nginx/access.log main;
proxy_ignore_client_abort on;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
Virtuelni host jedan:
vhost1.conf:
upstream backend {
server ip-адрес-сервера-с-stub_http_server:8080;
server ip-адрес-сервера-с-stub_http_server:8080;
server ip-адрес-сервера-с-stub_http_server:8080;
server ip-адрес-сервера-с-stub_http_server:8080;
server ip-адрес-сервера-с-stub_http_server:8080;
}
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://backend;
}
}
Dodajte virtuelne hostove u /etc/hosts fajl:
ip-адрес-сервера-с-nginx vhost1
Emulator HTTP servera
Kao emulator HTTP servera koristićemo
nodejs-stub-server nema rpm. Evo
Instalirajte paket nodejs-stub-server na upstream nginx rpm
yum -y install yum-plugin-copr
yum copr enable antonpatsev/nodejs-stub-server
yum -y install stub_http_server
systemctl start stub_http_server
Testiranje na stres
Testiranje se vrši pomoću Apache benchmark-a.
Instalirajte ga:
yum install -y httpd-tools
Počinjemo testiranje koristeći Apache benchmark sa 5 različitih servera:
while true; do ab -H "User-Agent: 1server" -c 10 -n 10 -t 10 http://vhost1/; sleep 1; done
while true; do ab -H "User-Agent: 2server" -c 10 -n 10 -t 10 http://vhost1/; sleep 1; done
while true; do ab -H "User-Agent: 3server" -c 10 -n 10 -t 10 http://vhost1/; sleep 1; done
while true; do ab -H "User-Agent: 4server" -c 10 -n 10 -t 10 http://vhost1/; sleep 1; done
while true; do ab -H "User-Agent: 5server" -c 10 -n 10 -t 10 http://vhost1/; sleep 1; done
Postavljanje Grafane
Na službenoj web stranici Grafane nećete pronaći kontrolnu ploču.
Stoga ćemo to uraditi ručno.
Možete pronaći moju sačuvanu kontrolnu tablu
Također morate kreirati varijablu tabele sa sadržajem nginx.access_log
.
Ukupni pojedinačni zahtjevi:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Singlestat neuspjeli zahtjevi:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Postotak neuspjeha pojedinačnih statistika:
SELECT
1 as t, (sum(status = 500 or status = 499)/sum(status = 200 or status = 201 or status = 401))*100 FROM $table
WHERE $timeFilter GROUP BY t
Singlestat prosječno vrijeme odgovora:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Maksimalno vrijeme odziva jednog statusa:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
Status brojanja:
$columns(status, count(*) as c) from $table
Za izlaz podataka kao kolač, morate instalirati dodatak i ponovo učitati grafanu.
grafana-cli plugins install grafana-piechart-panel
service grafana-server restart
Pita TOP 5 Status:
SELECT
1, /* fake timestamp value */
status,
sum(status) AS Reqs
FROM $table
WHERE $timeFilter
GROUP BY status
ORDER BY Reqs desc
LIMIT 5
Dalje ću dati zahtjeve bez snimaka ekrana:
Broj http_user_agent:
$columns(http_user_agent, count(*) c) FROM $table
GoodRate/BadRate:
$rate(countIf(status = 200) AS good, countIf(status != 200) AS bad) FROM $table
vrijeme odgovora:
$rate(avg(request_time) as request_time) FROM $table
Vrijeme odgovora uzvodno (vrijeme odgovora 1. uzvodno):
$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table
Status broja tablica za sve vhostove:
$columns(status, count(*) as c) from $table
Opšti pogled na instrument tablu
Poređenje avg() i quantile()
prosječno()
kvantil()
Zaključak:
Nadamo se da će se zajednica uključiti u razvoj/testiranje i korištenje nginx-log-collector-a.
A kada neko implementira nginx-log-collector, on će vam reći koliko je uštedio disk, RAM, CPU.
Telegram kanali:
Milisekunde:
Koga briga za milisekunde, pišite ili glasajte, molim vas, u ovome
izvor: www.habr.com