요청을 추적하기 위해 AWS X-Ray에서 mysql-connector-python 일괄 처리 시도

6599 단어 MySQLx-rayAWSPython

입문


AWS X-Ray를 사용하여 애플리케이션에서 처리하는 다양한 요청을 추적합니다.
요청 처리에 사용되는 라이브러리에서 X-Ray SDK는 기본적으로 AWS SDK를 포함한 여러 라이브러리를 지원하므로 어플리케이션 패치를 간단히 추적하여 처리할 수 있습니다.
이번에는 Python에서 DB를 조작하는 프로그램을 가정합니다. X-ray SDK for Python에서 지원하는 mysql-connector-python 프로그램 패치를 시도합니다.
AWS X-Ray 구현 - 라이브러리를 다운스트림으로 패치하여 호출

환경


검증은 로컬에서 이루어집니다.
OS: macOS High Sierra
Python: 3.6.5
MySQL: 5.6

실행


ySQL 서버


적당히 준비하다.이번에는 Docker에서 mysql:5.6 이미지를 추출하여 실행합니다.

데이터베이스 및 테이블 준비


다음 질의를 수행합니다.
# データベース
create database xray_test;

# テーブル
create table user (id char(10), name char(20));

X선 데몬


추적된 정보를 AWS의 X-Ray 서비스에 버리려면 X-Ray 데몬 프로세스를 실행해야 합니다.
이번에는 로컬에서 검증했기 때문에macOS에서 실행할 수 있는 스크립트를 삭제하고 -o 옵션을 실행합니다.
AWS X-Ray - 로컬에서 X-Ray 데몬 실행
./xray_mac -o

Python 스크립트 실행


이번에는 SELECT·INSERT·DELETE를 추적해 보자.

import mysql.connector

from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch

# パッチ適用  patch_allでも可
libraries = ('mysql',)
patch(libraries)

# X Ray の設定
xray_recorder.configure(service='mysql-connector',
                        daemon_address="127.0.0.1:2000")

# mysql セグメント開始
segment = xray_recorder.begin_segment('mysql')

# 接続
conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1', database='xray_test')
cur = conn.cursor()

# INSERT
cur.execute("insert into user values ('01', 'hoge');")
conn.commit()

# SELECT
cur.execute("select * from user;")
for row in cur.fetchall():
    print(row[0],row[1])

# DELETE
cur.execute("delete from user where id = '01';")
conn.commit()

cur.close()
conn.close()

# mysql セグメント終了
xray_recorder.end_segment()

결과


AWS 콘솔에서 확인합니다.
상세한 추적, 이렇게 세 가지 요구가 있습니다.

색상 띠 세그먼트를 선택하면 SQL 레이블이 나타납니다.데이터베이스 유형, 버전 및 연결된 사용자 이름이 열립니다.
이 정보는 SELECT, INSERT, DELETE와 같습니다.

주의사항


X-Ray 추적을 위해서는 mysql.connector.connect 함수를 사용하여 연결을 설정해야 합니다.
당초 연결 탱크 조작을 위해 사용mysql.connector.pooling.MySQLConnectionPool했지만 추적이 전혀 없었다
일괄 처리 라이브러리에도 지원되는 함수/지원되지 않는 함수가 있는 것 같습니다. 주의하십시오.

총결산


이렇게 하면 MySQL 서버에 대한 요청을 추적할 수 있지만 기본적으로 연결부와 처리 시간 정도만 추적하기 때문에 더 자세한 정보를 얻으려면 SQLalchemy ORM을 사용해야 한다.나는 다시 한 번 별도로 검증하고 싶다.

참고 자료


MySQL Connector/Python Developer Guide
aws/aws-xray-sdk-python - GitHub
Python에서 MySQL로 연결

좋은 웹페이지 즐겨찾기