In dit artikel wordt het project besproken
Om analyses op basis van logs te bekijken, zullen we een dashboard voor Grafana maken.
Wat maakt het uit, welkom onder cat.
Installeer nginx, grafana op de standaardmanier.
Installeer clickhouse-cluster met ansible-playbook van
Een database en tabellen maken in Clickhouse
In deze
We doen elk verzoek beurtelings op elke server van het Clickhouse-cluster.
Belangrijke notitie. In deze regel moet logs_cluster worden vervangen door uw clusternaam uit het bestand clickhouse_remote_servers.xml tussen "remote_servers" en "shard".
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
Nginx-log-collector-rpm installeren en configureren
Nginx-log-collector heeft geen rpm. Hier
Installeer het rpm-pakket 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
Bewerk configuratie /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/
Nginx instellen
Algemene nginx-configuratie:
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;
}
Virtuele host één:
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;
}
}
Voeg virtuele hosts toe aan het bestand /etc/hosts:
ip-адрес-сервера-с-nginx vhost1
HTTP-server-emulator
Als HTTP-serveremulator zullen we gebruiken
nodejs-stub-server heeft geen rpm. Hier
Installeer nodejs-stub-server-pakket op 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
Stress testen
Het testen wordt uitgevoerd met behulp van Apache benchmark.
Installeer het:
yum install -y httpd-tools
We beginnen met testen met behulp van Apache benchmark vanaf 5 verschillende servers:
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
Grafana opzetten
Op de officiële Grafana-website vindt u geen dashboard.
Daarom zullen we het met de hand doen.
Je kunt mijn opgeslagen dashboard vinden
U moet ook een tabelvariabele met de inhoud maken nginx.access_log
.
Singlestat Totaal aantal verzoeken:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Singlestat mislukte verzoeken:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Singlestat falend percentage:
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 gemiddelde responstijd:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Singlestat maximale responstijd:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
Telstatus:
$columns(status, count(*) as c) from $table
Om gegevens als een taart uit te voeren, moet u de plug-in installeren en grafana opnieuw laden.
grafana-cli plugins install grafana-piechart-panel
service grafana-server restart
Taart 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
Verder zal ik verzoeken doen zonder screenshots:
Tel http_user_agent:
$columns(http_user_agent, count(*) c) FROM $table
Goed/slecht tarief:
$rate(countIf(status = 200) AS good, countIf(status != 200) AS bad) FROM $table
reactietijdstip:
$rate(avg(request_time) as request_time) FROM $table
Stroomopwaartse responstijd (1e stroomopwaartse responstijd):
$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table
Tabeltellingsstatus voor alle vhosts:
$columns(status, count(*) as c) from $table
Algemeen overzicht van het dashboard
Avg() en quantile() vergelijken
gemiddelde()
kwantiel()
Conclusie:
Hopelijk raakt de community betrokken bij het ontwikkelen/testen en gebruiken van nginx-log-collector.
En wanneer iemand nginx-log-collector implementeert, zal hij je vertellen hoeveel hij schijf, RAM, CPU heeft bespaard.
Telegram-kanalen:
Milliseconden:
Wie geeft er om milliseconden, schrijf of stem hierin alstublieft
Bron: www.habr.com