본문 바로가기
개발 이야기/Django

Django SQL performance checking & Slack notification

by _ppuing 2020. 12. 9.
반응형

django 에서 한 view 내에서 사용되는 쿼리의 성능 체크를 라이브에서 하고 싶을 때 간단하게 signal callback 을 이용하여 쿼리타임을 계산하고, 일정 threshold 값 이상인 경우 슬랙 노티를 보내는 기능을 구현한다. 

import requests
from django.db import connection

@receiver(request_finished)
def monitor_db_connection(sender, **kwargs):
    def send_slack_message(query, timer):        
        slack_message = {
            'channel': '#{channel_name}',
            "text": '*Elapsed Time*\n{} sec\n*Query*\n```{}```'.format(timer, query),
            'username': u'슬로우 쿼리 알림',
            'mrkdwn': 'true'
        }
        hook_url = 'https://hooks.slack.com/services/{hook_key}'
        requests.post(url=hook_url, data=slack_message)
    
    for q in connection.queries:
        try:
            time = float(q.get('time'))
            if time > 0.07: # 0.07 초가 넘는 쿼리는 슬랙 알림 발송
                send_slack_message(q.get('sql'), q.get('time'))
        except: pass

 

 

반응형

댓글