본문 바로가기

percona rds-exporter AWS API throttling issue 1. 배경 현재 재직 중인 회사에서는 오픈소스인 percona 사의 rds-exporter (https://github.com/percona/rds_exporter) 를 이용하여 RDS 의 enhanced monitoring 지표 (OS 지표) 를 수집하고 있다. 하지만 하나의 account + region 에 종속된 instance 가 많아질수록 API throttling 에러가 발생하며 지표 수집에 실패하는 빈도가 잦아졌다. 그래서 해당 이슈에 대한 원인 파악과 함께 대응 방안을 수립하기 시작했다. 2. 기존 방식의 문제점 1) API throttling 이 발생한 원인 rds-exporter 는 CloudWatch Logs 에 속한 Log stream 중 하나인 "RDSOSMetric" 을 Filt..
rds_exporter API Call 비용 이슈(+ Customizing) 1. 배경 Amazon RDS 를 사용하게 되면 mysqld_exporter 를 통해 mysql 에 대한 정보를 가져올 수는 있으나, OS 정보 수집을 위해서는 rds_exporter 를 통해서 가져와야한다. RDS 의 Monitoring Enhanced 를 enable 시켰을 경우 rds_exporter 에서는 대략 인스턴스 당 400~500개의 메트릭을 수집하게 된다. 아주 deep 하게 보면 필요한 지표들도 있겠지만, 대부분은 비용을 소모하면서까지 수집할 필요가 없는 지표들이다. 2. 문제점 1) 쓸모 없는 metric RDS Exporter 가 scrap 하는 지표들은 CloudWatch 에 쌓인 정보들을 scrap 하는 형태이고, amazon manual 을 살펴보면 scrap 할 경우 지표 당..
Grafana 지표 값이 뭉개지는 문제 (+ Customizing) 1. 배경 grafana 는 Source DB (ex. prometheus, influx, etc.. ) 들에 쌓인 데이터를 파싱하여 Visualizaion 해주는 tool 이다. 모니터링 시에 Time Range 에 따라 원하는 Range 의 지표 값들을 볼 수 있다. data 를 가져오는 것은 grafana 를 통해 각 Source DB 에 요청을 하지만, 가져온 data 지표들을 grafana page 에 visualization 을 해주는 것은 웹 브라우저가 하게 된다. 따라서 step 을 짧게 가져가서, time slot 이 너무 많게 되면 웹 브라우저 Client Side 에 과부하를 유발할 수 있다. 그래서 grafana 는 prometheus 등에 data 지표들을 요청할 때 Time Ra..
MySQL Large table drop issue 분석 (in source code) 1. 배경 DB 를 운영을 하다보면 Table Drop 을 진행할 일이 많다. DB 에 저장된 데이터는 최후의 보루이기때문에(물론 백업본이 있기는하지만), 보통은 테이블 renaming 을 통해 사용되지않는 것을 확인 후 추후 Drop 을 진행한다. InnoDB 의 Table Drop 은 file_per_table=1 일 경우, 물리적인 Table Space 자체를 없애는 것이기때문에 DB 입장에서는 테이블의 크기가 크더라도 시간이 오래 걸릴만한 작업은 아니다. 물론, Adaptive Hash Index 같은 것들이 메모리 상에 존재할 경우에는 해당 Hash map 을 해제해야하기때문에 시간이 오래 걸릴 수는 있다. 하지만 일반적인 경우에서 InnoDB 는 OS 에 unlink call 을 하고 Inno..
MySQL FlashBack (5.7 / 8.0) 1. MySQL Flashback 기본적으로 MySQL Community Version 에서는 FlashBack 을 지원하지 않는다. 해당 기능은 MariaDB 10.2.4 이상의 "mysqlbinlog" 바이너리 파일에 탑재된 기능이다. 이는 Binary Log 를 이용하여 FlashBack 을 구현하기때문에, MySQL Community Version 에서도 정상 작동한다. 차후 출시된 MariaDB 의 신규 버전에서는 DDL (DROP, TRUNCATE, ALTER 등) 에 대한 FlashBack 이 지원될 예정이나 현재 버전에서는 지원하지않는다. 또한 이는 MariaDB 에서만 사용될 것이라고 생각된다. MariaDB 10.2.4 Version 이상에서는 Server Parameter 로 "--f..
MySQL Partition Key length 이슈 (in MySQL 5.7) 1. 배경 MySQL 버전 업그레이드를 진행하다가 특정 테이블 생성이 불가능해서 살펴봤었다. 월별 파티션 같은 테이블에서는 파티션 키를 date 관련 타입이 아닌, char 관련 타입으로 가져가는 경우가 있다. 이 때, MySQL 5.7 이전 (MySQL 5.6 이하) 버전에서는 파티션 키의 크기가 파티션 range 의 범위 크기 (ex. '201801' 의 경우 크기는 6) 보다 작아도 파티션 테이블이 만들어 졌다. 그러나 MySQL 5.7 부터는 "ERROR 1654 (HY000): Partition column values of incorrect type" 에러가 발생한다. 2. 테스트 1) MySQL 5.6 > CREATE TABLE `t1` ( `reg_month` varchar(6), `con..
MongoDB Replica Set Protocol Version (PV) 1. Replica Set Protocol Version Replica Set Protocol Version 은 Primary Election 방식과 연관이 있는 수치이다. Replica Set Protocol Version 은 "0" 과 "1" 의 값을 가질 수 있다. 이 글에선 "0"인 경우는 PV0, "1"인 경우는 PV1 이라고 축약하겠다. 참고로 MongoDB 4.0 에서는 Protocol Version 1 만 지원을 한다. 1) PV0 PV0 의 경우 MongoDB 3.0 이전에서 사용하던 replica set 의 프로토콜 방식이다. MongoDB 3.0 version 까지는 각 서버가 인지하고 있는 시각에 의존했기때문에, 각 OS 마다 시각이 차이가 있을 수 있다. 이 문제를 해결하기 위해 ..
MySQL 8.0 binlog_row_value_options (JSON Type option) 1. binlog_row_value_options 해당 parameter 는 MySQL 8.0.3 에 적용된 신규 옵션이다. JSON document 를 update 시 효과적인 binary log 공간을 확보하기위해 도입된 개념이다. default 값은 " " (공백) 값이며, Valid Values 는 "PARTIAL_JSON" 이다. Scope : Global / Session Dynamic : Yes Default : ' ' Valid Values : PARTIAL_JSON 1) MySQL 8.0.3 JSON 데이터 형태는 JSON 필드를 update 시에, 변경되는 key 와 value 가 아닌, JSON 필드의 모든 key : value 형태가 binary log 에 작성되었다. 무조건 모든 ..