یہ مضمون اس منصوبے پر بحث کرے گا
لاگز پر مبنی تجزیات دیکھنے کے لیے، ہم گرافانا کے لیے ایک ڈیش بورڈ بنائیں گے۔
کوئی بھی دلچسپی رکھتا ہے، بلی میں خوش آمدید۔
nginx، گرافانا کو معیاری طریقے سے انسٹال کریں۔
جوابی پلے بک کا استعمال کرتے ہوئے کلک ہاؤس کلسٹر انسٹال کرنا
کلک ہاؤس میں ڈیٹا بیس اور ٹیبل بنانا
اس میں
ہم کلک ہاؤس کلسٹر میں ہر سرور پر ایک ایک کرکے ہر درخواست کرتے ہیں۔
اہم نوٹ. اس لائن میں، "remote_servers" اور "shard" کے درمیان clickhouse_remote_servers.xml فائل سے logs_cluster کو آپ کے کلسٹر کے نام سے تبدیل کرنے کی ضرورت ہے۔
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
nginx-log-collector-rpm کو انسٹال اور کنفیگر کرنا
Nginx-log-colector کے پاس rpm نہیں ہے۔ یہاں
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 نہیں ہے۔ یہاں
اپ اسٹریم nginx rpm پر nodejs-stub-server پیکیج انسٹال کریں۔
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
ہم 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
.
سنگل اسٹیٹ کل درخواستیں:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
سنگل اسٹیٹ کی ناکام درخواستیں:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
سنگل اسٹیٹ میں ناکامی کا فیصد:
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
سنگل اسٹیٹ اوسط جوابی وقت:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
سنگل اسٹیٹ زیادہ سے زیادہ رسپانس ٹائم:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
شمار کی حیثیت:
$columns(status, count(*) as c) from $table
پائی کی طرح ڈیٹا آؤٹ پٹ کرنے کے لیے، آپ کو پلگ ان انسٹال کرنے اور گرافانا کو دوبارہ شروع کرنے کی ضرورت ہے۔
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
ڈیش بورڈ کا عمومی منظر
اوسط () اور مقدار () کا موازنہ
اوسط()
مقدار ()
: اختتام
مجھے امید ہے کہ کمیونٹی nginx-log-colector کو تیار کرنے/ٹیسٹ کرنے اور استعمال کرنے میں شامل ہو جائے گی۔
اور جب کوئی nginx-log-colector کو لاگو کرتا ہے، تو وہ آپ کو بتائے گا کہ انہوں نے ڈسک، RAM، اور CPU پر کتنی بچت کی ہے۔
ٹیلیگرام چینلز:
ملی سیکنڈز:
جس کے لیے ملی سیکنڈز اہم ہیں، براہ کرم اس میں لکھیں یا ووٹ دیں۔
ماخذ: www.habr.com