Проследите, что приложение проходит через HAproxy

У меня есть эта установка, где несколько приложений проходят через балансировщик нагрузки (HAproxy) и получают доступ к базе данных MySQL.

Several applications -> HAproxy -> MySQL database

Я хотел бы знать, какое конкретное приложение обращается к базе данных. Когда я сделал список процессов show в базе данных, он показывает IP HAproxy (конечно). Затем я попытался выполнить lsof для базы данных haproxy и mysql, но это не помогло мне (или я просто не знаю, как правильно интерпретировать результаты). И, наконец, я проверил логи haproxy, но они ничего не показали.

Благодарю.

1 ответ

Я также искал способ отследить соединения haproxy с конкретными процессами на разных машинах. Эта изящная маленькая хакерская программа ищет на haproxy-машине хост, который вы ей предоставите. Затем он переходит к исходному компьютеру и ищет соединения с внутренними базами данных.

Самая основная часть работает echo 'show sess' | socat stdio unix-connect:/tmp/haproxy на самом сервере haproxy

#!/bin/bash
# comments here:

haproxy='<your haproxy target>'

if [ $# -ne 1 ]
then
echo ""
echo "usage: db_trace_haproxy_sessions.sh <hostname>"
echo "looks at connections from <hostname> to load balanced database and traces them back to processes"
echo ""
exit
fi

ip=`host $1 | awk '{print $4}' 2>/dev/null`
if [ "$ip" == "found:" ]
then
echo ""
echo "couldn't resolve $1"
echo ""
exit
fi

IFS="
"

for i in `ssh $haproxy "echo 'show sess' | socat stdio unix-connect:/tmp/haproxy | grep     $ip"`
do
# output example:
#0x2cd2780: proto=tcpv4 src=10.210.50.104:50791 fe=mysql be=mysql srv=db302 ts=04 age=1d11m calls=5 rq[f=909202h,l=0,an=00h,rx=7h59m,wx=,ax=] rp[f=109202h,l=0,an=00h,rx=7h59m,wx=,ax=] s0=[7,18h,fd=32,ex=] s1=[7,18h,fd=52,ex=] exp=7h47m

echo ""
db=`echo $i | awk '{print \$6}' | cut -d "=" -f2`
src=`echo $i | awk '{print \$3}' | cut -d "=" -f2`

echo "Source Connection: $src ... connected to $db"

ssh $1 "ps=\`netstat -naltp | grep $src | awk '{print \$7}' | cut -d "/" -f1\`; ps aux |     grep \" \$ps \" | grep -v grep"
done;
echo ""

Вывод выглядит так:

db_trace_haproxy_sessions.sh appserver

Source Connection: 10.210.50.103:37114 ... connected to database319

root     19300  1.0  0.0  53944 16180 pts/0    S+   Feb19  16:02 /usr/bin/perl somePerlScript.pl 

Source Connection: 10.210.50.103:37115 ... connected to database142

root     19301  5.4  0.0  53940 16160 pts/1    D+   Feb19  81:41 someapachethread
Другие вопросы по тегам