Оваа статија ќе разговара за проектот
За да ја видите аналитиката заснована на дневници, ќе создадеме контролна табла за Grafana.
Секој заинтересиран, добредојде во мачка.
Инсталирајте го nginx, grafana на стандарден начин.
Инсталирање на кластер за кликање користејќи ansible-playbook from
Креирање бази на податоци и табели во Clickhouse
Во ова
Ние го правиме секое барање едно по едно на секој сервер во кластерот Clickhouse.
Важна забелешка. Во оваа линија, logs_cluster треба да се замени со името на вашиот кластер од датотеката clickhouse_remote_servers.xml помеѓу „remote_servers“ и „shard“.
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
Инсталирање и конфигурирање на nginx-log-collector-rpm
Nginx-log-collector нема вртежи во минута. Еве
Инсталирајте го пакетот rpm 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
Уредете ја конфигурацијата /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
Општа конфигурација на nginx:
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;
}
Еден виртуелен домаќин:
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;
}
}
Додајте виртуелни хостови во датотеката /etc/hosts:
ip-адрес-сервера-с-nginx vhost1
Емулатор на HTTP сервер
Како емулатор на HTTP сервер ќе го користиме
Nodejs-stub-server нема вртежи во минута. Еве
Инсталирајте го пакетот nodejs-stub-server на 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
Тестирање на стрес
Ние спроведуваме тестирање користејќи репер Apache.
Инсталирајте го:
yum install -y httpd-tools
Почнуваме да тестираме со користење на Apache репер од 5 различни сервери:
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
Поставување на Графана
Нема да најдете контролна табла на официјалната веб-страница на Графана.
Затоа, тоа ќе го направиме со рака.
Можете да ја најдете мојата зачувана контролна табла
Исто така, треба да креирате променлива на табелата со содржината nginx.access_log
.
Вкупно барања на Singlestat:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Singlestat неуспешни барања:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Процент на неуспех на Singlestat:
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:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Максимално време на одговор на Singlestat:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
Статус на броење:
$columns(status, count(*) as c) from $table
За да излезете податоци како пита, треба да го инсталирате приклучокот и да го рестартирате grafana.
grafana-cli plugins install grafana-piechart-panel
service grafana-server restart
Статус на пита ТОП 5:
SELECT
1, /* fake timestamp value */
status,
sum(status) AS Reqs
FROM $table
WHERE $timeFilter
GROUP BY status
ORDER BY Reqs desc
LIMIT 5
Понатаму ќе дадам барања без слики од екранот:
Наброј http_user_agent:
$columns(http_user_agent, count(*) c) FROM $table
Добра/лоша стапка:
$rate(countIf(status = 200) AS good, countIf(status != 200) AS bad) FROM $table
Време на одговор:
$rate(avg(request_time) as request_time) FROM $table
Време на одговор нагоре (прво време на одговор нагоре):
$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table
Статус на бројот на табели за сите vhost:
$columns(status, count(*) as c) from $table
Општ поглед на контролната табла
Споредба на avg() и quantile()
средна ()
квантил ()
Заклучок:
Се надевам дека заедницата ќе се вклучи во развојот/тестирањето и користењето на nginx-log-collector.
И кога некој ќе го имплементира nginx-log-collector, ќе ви каже колку диск, RAM и CPU заштедил.
Телеграмски канали:
Милисекунди:
На кого милисекундите му се важни, пишете или гласајте во ова
Извор: www.habr.com