این مقاله در مورد پروژه بحث خواهد کرد
برای مشاهده تجزیه و تحلیل بر اساس گزارش، اجازه دهید یک داشبورد برای Grafana ایجاد کنیم.
چه کسی اهمیت می دهد، به زیر گربه خوش آمدید.
nginx، grafana را به روش استاندارد نصب کنید.
نصب cluster house with ansible-playbook from
ایجاد پایگاه داده و جداول در کلیک هاوس
در این
ما هر درخواست را به نوبه خود در هر سرور از خوشه 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 rpm ندارد. اینجا
بسته nodejs-stub-server را روی 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
تست استرس
تست با استفاده از معیار آپاچی انجام می شود.
نصبش کن:
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
راه اندازی Grafana
در وب سایت رسمی گرافانا داشبوردی پیدا نخواهید کرد.
بنابراین، ما این کار را با دست انجام خواهیم داد.
می توانید داشبورد ذخیره شده من را پیدا کنید
همچنین باید یک متغیر جدول با محتوا ایجاد کنید 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
وضعیت Pie TOP 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
GoodRate/BadRate:
$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
نمای کلی داشبورد
مقایسه میانگین() و quantile()
avg()
quantile()
نتیجه گیری:
امیدواریم جامعه در توسعه/تست و استفاده از nginx-log-collector مشارکت کند.
و وقتی کسی nginx-log-collector را پیاده سازی می کند، به شما خواهد گفت که چقدر دیسک، رم، CPU ذخیره کرده است.
کانال های تلگرام:
میلی ثانیه:
کسی که به میلی ثانیه اهمیت می دهد، بنویسد یا رأی بدهد، لطفاً در این
منبع: www.habr.com