Den här artikeln kommer att diskutera projektet
För att se analyser baserade på loggar kommer vi att skapa en instrumentpanel för Grafana.
Alla som är intresserade, välkomna till katt.
Installera nginx, grafana på standard sätt.
Installera ett klickhuskluster med ansible-playbook från
Skapa databaser och tabeller i Clickhouse
i detta
Vi gör varje begäran en efter en på varje server i Clickhouse-klustret.
Viktig notering. På den här raden måste logs_cluster ersättas med ditt klusternamn från filen clickhouse_remote_servers.xml mellan "remote_servers" och "shard".
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
Installera och konfigurera nginx-log-collector-rpm
Nginx-log-collector har inget rpm. Här
Installera rpm-paketet 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
Redigera konfigurationen /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/
Konfigurera nginx
Allmän nginx-konfiguration:
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;
}
En virtuell värd:
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;
}
}
Lägg till virtuella värdar till filen /etc/hosts:
ip-адрес-сервера-с-nginx vhost1
HTTP-serveremulator
Som en HTTP-serveremulator kommer vi att använda
Nodejs-stub-server har ingen rpm. Här
Installera paketet nodejs-stub-server på uppströms 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
Stresstestning
Vi utför tester med Apache benchmark.
Installera det:
yum install -y httpd-tools
Vi börjar testa med Apache benchmark från 5 olika servrar:
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
Installerar Grafana
Du hittar ingen instrumentpanel på den officiella Grafana-webbplatsen.
Därför kommer vi att göra det för hand.
Du kan hitta min sparade instrumentpanel
Du måste också skapa en tabellvariabel med innehållet nginx.access_log
.
Singlestat totalt antal förfrågningar:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Singlestat misslyckade förfrågningar:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Singlestat misslyckande procent:
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 Genomsnittlig svarstid:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Singlestat Max svarstid:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
Räknestatus:
$columns(status, count(*) as c) from $table
För att mata ut data som en paj måste du installera plugin-programmet och starta om grafana.
grafana-cli plugins install grafana-piechart-panel
service grafana-server restart
Paj 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
Vidare kommer jag att ge förfrågningar utan skärmdumpar:
Räkna 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
Svarstidpunkt:
$rate(avg(request_time) as request_time) FROM $table
Uppströms svarstid (första uppströms svarstid):
$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table
Tabellräkningsstatus för alla vhost:
$columns(status, count(*) as c) from $table
Allmän vy av instrumentpanelen
Jämförelse av avg() och quantile()
avg()
quantile()
Slutsats:
Jag hoppas att communityn kommer att engagera sig i att utveckla/testa och använda nginx-log-collector.
Och när någon implementerar nginx-log-collector, kommer de att berätta hur mycket de sparat på disk, RAM och CPU.
Telegramkanaler:
Millisekunder:
För vem millisekunder spelar roll, skriv eller rösta i detta
Källa: will.com