
나는 우연히 문제를 발견하고 조언을 구하기로 결정했고 결국 동일한 비즈니스 요구 사항(및 문제)을 가진 사람을 찾았습니다.
요약 - 우리는 최근 클라이언트 중 하나의 SQL 서비스를 자체 호스팅 MySQL에서 Google CloudSQL MySQL 5.7 서비스로 마이그레이션했으며 이제 클라이언트가 MySQL 느린 속도에 액세스/보기 및 분석할 수 있는 방법을 찾고 있습니다. 자체 호스팅 ELK 스택에 로그인합니다.
이전에는 SQL 서비스 느린 로그 파일에 액세스할 수 있었고 Elasticsearch에서 해당 로그를 "추적"하고 내보내고 색인화할 수 있었기 때문에 이는 문제가 되지 않았습니다. 특정 Elasticsearch MySQL 느린 로그 단일 문서가 이전에 어떻게 보였는지에 대한 간단한 예는 다음과 같습니다. https://prnt.sc/sjitys
모든 단일 문서에는 다음이 포함되어 있습니다.
Time
User@Host
Query_time
timestamp
QUERY 선택/삽입/업데이트/삭제 및 lock_time,rows_queried,rows_affected,rows_returned 등을 기반으로 데이터를 분석하는 기능.
다음은 클라이언트가 액세스할 수 없는 GCP 로그 뷰어에 MySQL 느린 로그가 표시되는 방법의 예입니다. https://user-images.githubusercontent.com/9348708/80950753-2418bf80-8dff-11ea-9a00-3f5131b5e0f3.png
따라서 우리의 목표는 이전에 사용한 것과 유사한 방식으로 MySQL 느린 로그를 ELK 스택으로 스트리밍하는 것입니다.
목표를 달성하기 위해 우리는 Pub/Sub 내보내기 도구(https://cloud.google.com/logging/docs/export) 로그를 ELK 스택으로 스트리밍합니다. 이를 위해 다음을 수행했습니다. 1. 아래 필터를 사용하여 로그 싱크(로그 라우터)를 생성했습니다. resources.type="cloudsql_database" logName="projects/XXX/logs/cloudsql.googleapis.com%2Fmysql-slow .log"를 입력하고 Google의 Pub/Sub 싱크 서비스로 내보냈습니다. 2. Google Computer Engine VM에서 pubsubbeat라는 파일 내보내기 서비스를 설치하고 구성했습니다(서비스는 filebeat의 pubsub 입력 방법과 유사함). SQL 느린 로그를 GCP에서 문제의 VM에 있는 파일 3. VM에서 GCP가 내보낸 로그를 따르고 include_lines: [‘textPayload’]
GCP가 가져온 각 JSON 객체 내에 중요한 정보만 포함하도록 filebeat 서비스를 구성했습니다.
참고: GCP MySQL 느린 로그는 google-fluentd 에이전트를 통해 액세스되며 단일 데이터 유형인 LogEntry를 사용하여 표시됩니다. LogEntry는 모든 로그 항목에 대한 특정 공통 데이터를 정의하고 개별 페이로드를 전달합니다. 형식은 JSON이며 각 로그 줄은 별도의 JSON 개체로 캡슐화됩니다. 예:https://prnt.sc/sep2zk
즉각적인 문제 - Pub/Sub는 고가용성과 처리량을 달성하기 위해 몇 가지 절충안을 취하고 불행하게도 메시지의 순서가 뒤바뀌는 것도 그 중 하나입니다. 즉, MySQL 느린 로그의 순서가 혼합되어 있으며 각각의 느린 로그 객체를 적절하게 캡슐화할 수 없습니다. "^# Time" 문자열로 시작한다고 정의하여 대신 다음과 같은 형식을 사용합니다.https://prnt.sc/seoztj
따라서 누군가 GCP에서 외부 로그 분석 시스템(ELK 스택)으로 여러 줄의 로그 파일(또는 MySQL 느린 로그)을 직접 내보내는 방법을 공유하면 큰 도움이 될 것입니다. 이 상황에서 최선의 접근 방식은 무엇입니까?
답변1
이것은 정확합니다.Pub/Sub는 전달 순서를 보장하지 않습니다.. 당신이 할 수 있는 일은게시시간. 일부가 있습니다견본Pub/Sub 문서에서 확인하세요.
또는 방정식에 Dataflow 파이프라인을 추가하고 데이터 순서를 지정하도록 할 수 있습니다. 그런 다음 클라이언트의 비즈니스 요구에 따라 일괄 작업을 실행할 수 있습니다. 이 방법을 사용하려면 구성 작업이 많이 필요하며 비용도 훨씬 더 많이 듭니다.
위의 샘플 중 일부를 살펴보고 요구 사항에 적합한지 확인하는 것이 좋습니다.