Datadog Log Management를 사용하여 RDS의 SlowQuery 시각화
개요
RDS로 출력하는 Slow Query를 Datadog Log Management에서 시각화했으므로 그 절차를 씁니다.
로그의 Parse에 고전했으므로 좋으면 참고로 해 주세요.
환경
사전 준비
Slow Query 로그를 CloudWatch Logs로 출력
미리 RDS에서 Slow Query 로그를 CloudWatch Logs에 출력해야 합니다.
자세한 내용은 여기 참조
CloudWatch Logs를 Slow Query를 Datadog로 전송
CloudWatch Logs로 출력된 Slow Query를 Datadog로 전송해야 합니다.
작동 방식은 Lambda 함수를 만들고 Lambda 함수를 사용하여 로그를 수집하고 Datadog로 보냅니다. 이쪽도 이미 절차가 있으므로 생략합니다.
자세한 내용은 여기 참조
절차
여기에서 Datadog 설정입니다.
위의 단계를 수행하면 아무 것도 Parse되지 않은 상태에서 Log Management로 전송되었음을 확인할 수 있습니다.
로그 샘플은 이쪽
# Time: 2019-06-28T03:52:11.487326Z
# User@Host: username[username] @ [172.31.xxx.xxx] Id: 6825
# Query_time: 2.492360 Lock_time: 0.000149 Rows_sent: 1 Rows_examined: 12269468
SET timestamp=1561693931;
SELECT
hogehoge
FROM
fugafuga
이번에는 이 로그를 Parse해 갑니다.
파이프라인 만들기
Datadog에 로그인하고 Log Explorer
→ → Configuration
→ → New Pipline
로 파이프 라인을 만듭니다.
파이프라인은 전송된 로그를 필터링하여 후술하는 프로세서에 적용합니다.
설정 예)
프로세서 작성
만든 파이프라인을 선택하고 Add Processor
를 클릭하여 프로세서를 추가합니다.
프로세서에서 의미 있는 정보와 속성을 반구조화된 텍스트에서 추출하여 후술하는 패싯으로 재사용할 수 있습니다.Select the processor type
는 Grok Parser
를 선택하고 Define 1 or multiple parsing rules
는 다음과 같이 수행했습니다.
MyRule ^\# Time: %{date("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"):date}\n+\# User@Host: %{notSpace: user1}\[%{notSpace: user2}\] @ \[%{ip: host}\] Id:[\x20\t]+%{number: id}\n+\# Query_time: %{number: query_time} Lock_time: %{number: lock_time} Rows_sent: %{number: rows_sent} Rows_examined: %{number: rows_examined}\n+ *SET timestamp=%{number: timestamp};\n+%{regex("[a-zA-Z].*"):query}.
꽤 보기 힘들지만 포인트는
여기에서 Datadog 설정입니다.
위의 단계를 수행하면 아무 것도 Parse되지 않은 상태에서 Log Management로 전송되었음을 확인할 수 있습니다.
로그 샘플은 이쪽
# Time: 2019-06-28T03:52:11.487326Z
# User@Host: username[username] @ [172.31.xxx.xxx] Id: 6825
# Query_time: 2.492360 Lock_time: 0.000149 Rows_sent: 1 Rows_examined: 12269468
SET timestamp=1561693931;
SELECT
hogehoge
FROM
fugafuga
이번에는 이 로그를 Parse해 갑니다.
파이프라인 만들기
Datadog에 로그인하고
Log Explorer
→ → Configuration
→ → New Pipline
로 파이프 라인을 만듭니다.파이프라인은 전송된 로그를 필터링하여 후술하는 프로세서에 적용합니다.
설정 예)
프로세서 작성
만든 파이프라인을 선택하고
Add Processor
를 클릭하여 프로세서를 추가합니다.프로세서에서 의미 있는 정보와 속성을 반구조화된 텍스트에서 추출하여 후술하는 패싯으로 재사용할 수 있습니다.
Select the processor type
는 Grok Parser
를 선택하고 Define 1 or multiple parsing rules
는 다음과 같이 수행했습니다.MyRule ^\# Time: %{date("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"):date}\n+\# User@Host: %{notSpace: user1}\[%{notSpace: user2}\] @ \[%{ip: host}\] Id:[\x20\t]+%{number: id}\n+\# Query_time: %{number: query_time} Lock_time: %{number: lock_time} Rows_sent: %{number: rows_sent} Rows_examined: %{number: rows_examined}\n+ *SET timestamp=%{number: timestamp};\n+%{regex("[a-zA-Z].*"):query}.
꽤 보기 힘들지만 포인트는
\n+
로 쓴다 \
로 이스케이프 처리 %{}
의 부분)를 기술한다 입니다.
Matcher에 대한 자세한 내용은 여기을 참조하십시오.
확인
Log Exploer
→ → Search
로 이동하여 왼쪽 메뉴의 Filter
를 rds
로 좁히면 Slow Query 로그가 Parse되어 있는지 확인할 수 있습니다.패싯 및 추가
그리고는 Filter하고 싶은 Attribute의 facet를 작성하면, Filter로 검색할 수 있게 됩니다.
facet를 작성하는 방법은 해당 로그의 Attribute를 열고 클릭하여
Create Facet
하기만 하면 됩니다.예)
확인
예를 들어,
query
의 facet 를 추가하는 것으로, 이하와 같이 쿼리 마다 Filter 하는 것이 가능하게 됩니다.또한 Slow Query의 건수를 바탕으로 경고를 낼 수도 있습니다.
예 Query의 경우)
Query Time
의 facet 를 작성해 두면 Query Time
로 Filter 를 걸 수 있습니다.예 Query Time의 경우)
마지막으로
Datadog Log Management는 Filter 기능, 상당히 사용할 수 있을 것 같습니다. 점점 활용해 가고 싶습니다.
Reference
이 문제에 관하여(Datadog Log Management를 사용하여 RDS의 SlowQuery 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/syogun/items/643f4f34356c20847262텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)