레이블이 Percona Monitoring and Management인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Percona Monitoring and Management인 게시물을 표시합니다. 모든 게시물 표시

[PMM] #010 PMM Tutorial for MySQL Monitoring

PMM Tutorial for MySQL Monitoring


 2016년 여름 즈음하여 Percona 홈페이지에 PMM(Percona Monitoring and Management) 베타버전이 공개되었다. PMM 베타버전 공개 이후로 현재(2016. 11)까지 베타버전에서 정식 릴리즈 버전으로 발전하였고, 최근에는 베타버전에는 없었던 Orchestrator 등과 같은 모듈들이 PMM에 포함되었다.
본 포스팅 시리즈를 통하여 PMM 플랫폼을 구성하는 방법, 간단한 사용법, 그리고 몇 가지 고민의 흔적을 공유하고자 한다.


시작에 앞서 먼저 다음의 몇 가지 사항을 언급하며, 본 포스팅 시리즈를 읽는 독자들의 양해를 구한다.

포스팅 방향과 목표, 그리고 제한사항

- PMM을 구성하는 과정과 단계, 그리고 설치 유의사항에 주목하여 설명한다. “설치 튜토리얼정로도 보면 된다. (PMM의 모든 기능을 상세히 설명하고 활용을 극대화하는 방안이 아님)
- PMM의 세부 모듈들의 상세한 역할이나 내부 구동방식에 대한 상세한 설명보다는 일단 설치부터 하고 적용해보는 Action에 초점을 맞춘다.
- PMM 구성의 목표는 MySQL 서버 모니터링으로 한정한다.
- PMM PMM을 구성하는 주요 모듈들의 버전 업데이트 주기는 매우 짧다. 그만큼 빠르게 발전하고 있음을 반증한다고 생각한다. 본 포스팅의 내용 중, PMM 모듈의 빠른 버전 업데이트로 의도치 않게 부 정확한 내용이 있을 수 있다. 이 점은 양해를 바랍니다. _(__)_ 

PMM Server 설치
- Docker 이미지가 아닌 PMM Server를 구성하는 모듈 별로 각각의 설치 바이너리로 구성한다
- PMM Server 에 설치하려는 모듈을 다음과 같다.
. Prometheus : 수집데이터 저장소 역할
. Prometheus-Alertmanager, : 수집 데이터에 대한 알림 역할
. Grafana : 수집데이터를 그래프로 보기 위한 GUI 대시보드 역할
. Percona Dashboard : Prometheus, Linux, MySQL 모니터링 지표에 대한 그래프 템플릿.

PMM Client 설치
- PMM Client 에 설치하려는 모듈을 다음과 같다.
. node_exporter : 리눅스 모니터링 exporter
. mysqld_exporer : MySQL 모니터링 exporter
. mysql_exporer : MySQL 쿼리 exporter


최종적으로 확인하고자 하는 것 – MySQL 서버 모니터링 결과
PMM을 구성하여 최종적으로는 “MySQL 서버 모니터링환경을 구성하고 그 모니터링 결과를 보는 것이다.

Percona Dashboard for MySQL - Linux [출처:https://grafana.net/plugins/percona-percona-app]


Percona Dashboard for MySQL - MySQL [출처:https://grafana.net/plugins/percona-percona-app]


[PMM] #190 마치며



마치며

[PMM] 시리스 포스팅은 본 장으로 마무리 한다. 이 포스팅 시리즈는 PMM의 서버/클라이언트 구성을 시작으로 마지막에는 Prometheus를 활용한 MySQL 데이터 모니터링까지 연동해보는 내용으로 구성하였다. 초보자도 쉽게 따라할 수 있는 실전 시나리오로 구성 한 만큼, 이론적인 내용보다 독자들이 MySQL 모니터링 환경을 손 쉽게 구성하는데에 초첨을 맞추었다. 많은 도움이 되길 바란다.

 아울러, Prometheus, Grafana 등의 PMM을 구성하는 모듈들은 모두 Open Source 기반의 소프트웨어로 현재도 활발하게 버전 업데이트가 빠르게 진행되고 있으며 그에 따라 각 소프트웨어의 기능들도 확장되고 있다. 반면에, 최신 업데이트 버전은 소프트웨어 안정성 등이 검증되지 않았을 수 있으며 아직 개발단계의 새로운 모듈이 추가될 수도 있다
 그러므로 Open Source 소프트웨어에 대한 무조건적인 맹신은 금물이다. Open Source 소프트웨어의 안정성도 함께 고려하여, 각 모듈들이 정말 본인의 IT인프라에 필요한 기능인지 되 짚어 보고 선별적으로 구성해야 할 것이다.

[PMM] 시리스 포스팅을 다시 한번 정독해보길 바라며, 본 시리즈를 마무리 한다.





[PMM] #130 MySQL 모니터링 – 실시간 모니터링#1

MySQL 모니터링 실시간 모니터링


MySQL서버의 모니터링 요소(factor)는 상당히 다양하다. 이 모니터링 요소 중에서 매우 짧은 시간(최근 5분에서 10)동안의 변화를 실시간으로 봐야하는 상황이 있을 수 있다. 예를 들면, 쇼셜커머스 서비스에서 사용자 유입량이 특정 시각부터 급증(특정 인기상품 할인 프로모션이 시작되는 시각)하는 상황이 바로 그렇다. 더욱이 이러한 서비스 DB1개의 MySQL서버로만 서비스하지 않고 DB 트래픽 분산을 위하여 여러 대의 MySQL 서버 샤드로 구성하기도 한다. 이땐, 모든 MySQL 성능 지표를 모니터링하는 것 보다는 실시간으로 급증, 급감하거나 또는 정상적인 쿼리 실행에 영향을 줄 수 있는 락 등의 4~5개의 중요한 성능 지표만 모니터링 하는 것이 유리하다.
이번 장에서는 CPU Usage, QPS, Threads, Locks, Handlers 5개의 그래프를 실시간 모니터링 그래프로 선택하여, 여러대의 호스트를 한 화면에서 5개 그래프를 실시간으로 볼 수 있는 대시보드를 만들어 본다.

이전 포스팅에서 Percona Dashboard를 설치했으므로, 그래프를 생성할 땐 Percona Dashboard의 대시보드 설정과 그 그래프들을 복사하여 간편하게 생성한다.


010. MySQL 실시간 모니터링 대시보드 생성

메뉴 > Dashboards > [+ New] 클릭하면 다음과 같이 새로운 대시보드가 생성된다.



대시보드 설정값 세팅을 위하여 대시보드 관리(메뉴바 톱니바퀴버튼) > Settings 를 클릭한다. General(일반설정) 탭에 다음과 같이 대시보드의 이름과 태그 등을 입력해준다.




대시보드 설정 값의 변경사항은 별도의 저장버튼을 클릭해야 한다. 메뉴바의 플로피 디스켓 모양의 버튼이 저장 버튼이다. 저장 버튼을 클릭하여 다음과 같이 저장한다.




대시보드 관리(메뉴바 톱니바퀴버튼) > Templating 을 클릭한다. 대시보드의 형판을 설정하는 단계이다



[+New] 버튼을 클릭하여 다음과 같이 Interval 변수를 설정한다. 입력시 대소문자를 확실히 구분하여 Name:interval, Label:Interval 과 같이 입력하고, 다른 입력값들은 다음의 이미지와 같이 입력한다. 입력이 끝났으면 반드시 ADD 버튼을 클릭한다.




interval 변수가 정상적으로 설정되었으면 Variables탭에 다음과 같이 $interval 이라는 변수값이 생성됨을 확인할 수 있다. 그리고 하단의 대시보드에 “Interval: 5s”라는 드롭다운 버튼이 생성되었다면 추가가 잘 된것이다.




[+New] 버튼을 한번 더 클릭하여 다음과 같이 Host 변수를 설정한다. 입력시 대소문자를 확실히 구분하여 Name:host, Label:Host 와 같이 입력하고, 다른 입력값들은 다음의 이미지와 같이 입력한다. 입력이 끝났으면 반드시 ADD 버튼을 클릭한다.




host 변수가 정상적으로 설정되었으면 Variables탭에 다음과 같이 $host 라는 변수값이 생성됨을 확인할 수 있다. 그리고 PMM에서 모니터링하는 대상 MySQL 서버들의 호스트들이 대시보드에 드롭다운 버튼으로 생성된다. 이 호스트 이름들은 PMM Client - Mysqld Exporter 설치편에서 PMM Server prometheus.yml 파일에 설정한 PMM Client의 노드정보 중 alias: “pmmclient:3306” 참조하는 리스트이다.




잊지 않고 반드시 저장한다.



저장했으면 X버튼을 클릭하거나, 다시 Home 대시보드로 갔다가 MySQL모니터링-실시간모니터링 대시보드를 클릭한다. 그럼 Interval Host 드롭다운 박스가 생성된다.



센스가 있는 독자분이라면 이 두 변수가 어떤 것을 의미하는 것인지 알 수 있을 것이다. Interval은 이 대시보드에 추가할 그래프의 수치를 얼마의 간격을 두고 표시할 것인지, 그 간격의 시간을 변경할 수 있는 변수이다. 그리고 Host는 이 대시보드에 추가할 그래프의 표시 대상이 어떤 모니터링 대상 서버를 가리키는지 호스트를(복수선택가능) 선택하는 변수이다.



020. CPU Usage 그래프 생성
앞서 생성한 “MySQL모니터링-실시간모니터링대시보드에 CPU Usage그래프를 추가해본다.
그래프를 생성할 때 그래프의 모든 지표를 일일이 수동으로 설정하지 않고, Percona Dashboard에 이미 설정되어있는 그래프의 JSON 포멧 패널 정보를 그대로 복사하여 붙여넣는(ctrl+c, ctrl+v) 방법으로 간단하게 생성하는게 포인트이다.

먼저 새 브라우저 창을 띄워 “System Overview | Percona App” 대시보드로 이동한다. CPU Usage 그래프의 그래프 타이틀 부분을 마우스 좌 클릭하면 그래프 메뉴가 나타난다. 여기서 “Panel JSON”을 클릭한다.




“Panel JSON”을 클릭하면 이 그래프의 패널정보를 JSON 포멧으로 직접 확인할 수 있다. JSON 포멧을 모두 선택하여 복사(ctrl+c)해 둔다. 또는 임의의 텍스트 에디터를 열어서 잠시 에디터에 붙여 둔다




다시 “MySQL모니터링-실시간모니터링대시보드로 돌아가서,  첫 행의 행 메뉴를 클릭하여 Add Panel > Graph를 클릭하고 1행에 신규 그래프를 생성한다.




이 대시보드에 그래프를 생성할 땐, Host 드롭 박스는 1개의 호스트만 선택하여 진행한다. 다음과 같은 신규 그래프 생성 화면에서 그래프 타이틀을 마우스 좌 클릭하여 Panel JSON 버튼을 클릭한다.





다음과 같이 신규 그래프의 패널 정보 JSON 편집 창이 나타난다. JSON을 모두 삭제하고 복사해 두었던 “System Overview | Percona App” 대시보드 CPU Usage 그래프의 JSON 정보를 통째로 붙여넣기(ctrl+v)한다. 그리고 반드시 Update 버튼을 눌러서 갱신한다.




그럼 다음과 같이 CPU Usage그래프가 바로 생성된다.




이 대시보드의 기본 Time Range 6시간으로 설정되어 있어, 초기 그래프의 로딩이 다소 오래 걸릴수 있다. 대시보드의 Time Range값을 편의상 최근 5, 5초마다 새로고침(refresh)되도록 변경해보자.




이 대시보드의 용도는 실시간 모니터링이므로 CPU Usage 상세 값을 직접 보여주는 테이블은 노출하지 않도록 설정한다. 그래프 설정에서 Legend 탭의 Options > Show 항목을 체크 해제 한다




이번에는 General 탭의 Title에 선택한 호스트명이 노출되도록 Title : “[$host] CPU Usage”과 같이 변수을 추가한다. 추가하면 현재 Host 드롭 박스에서 선택한 호스트명이 자동으로 함께 노출된다.




X 버튼을 눌러서 그래프 편집화면을 빠져나오면 대시보드에 다음과 같이 CPU Usage그래프가 보일것이다



대시보드 메뉴의 저장(플로피 디스켓) 버튼을 눌러, 잊지 말고 대시보드 전체를 꼭 저장한다.

-       Interval : 그래프에서 보여주는 각 metric의 시간 간격을 선택할 수 있다.
-       Host : 선택한 호스트의 CPU 사용량을 확인할 수 있다.

Interval을 최대 5초까지 줄일수롤 5초간의 CPU Usage로 그래프를 자세히 보여준다. 반면에 Interval을 크게 잡는다면 그 만큼 CPU Usage의 상세함은 떨어지게 된다



030. Host 별 행단위 노출 설정
대시보드를 처음 설정할 때 Host 변수의 유형을 중복 체크가 가능하도록 설정하였다. 허나, 이 부분에서 Host를 여러 개 선택하거나 ALL을 선택한다면 CPU Usage 그래프가 제대로 보이지 않을 것이다. Host를 복수 선택이 가능하게 설정한 이유는 단일 그래프에서 여러 호스트의 지표를 한 번에 보여주기 위함이 아니다
선택한 호스트별로 한 행씩 보여주도록 설정한 것이다.

행 설정 메뉴에서 Row editor를 클릭한다.




행 설정(Row Settings) 화면에서 Templating options를 다음과 같이 Repeat Row host로 설정하고 X버튼을 눌러 대시보드로 돌아온다.



Host 드롭 박스에서 여러 호스트를 선택하면 다음과 같이 호스트별로 1행씩 그래프가 반복되어 나타난다. 그래프 타이틀에 $host변수를 추가하여 선택한 호스트명이 보이게 하고, 호스트 드롭 박스에서 복수 호스트를 선택할 수 있도록 설정한 이유가 바로 이렇게 행 단위 호스트 별 뷰를 보기 위함이다.



최종적으로 대시보드 메뉴의 저장(플로피 디스켓) 버튼을 눌러, 잊지 말고 대시보드 전체를 꼭 저장한다.



040. QPS / Handlers / Threads / Table Locks 그래프 생성
CPU Usage와 동일한 방법으로 “MySQL모니터링-실시간모니터링대시보드의 1행에 아래 그래프를 추가한다. 신규 추가하는 각 그래프의 JSON 패널 정보를 복사할 그래프는 다음과 같다.

- QPS : MySQL Overview | Percona App - Top Command Counters
- Handler : MySQL Overview | Percona App - MySQL Handlers
- Active Threads : MySQL Overview | Percona App - MySQL Active Threads
- Table Locks : MySQL Overview | Percona App - MySQL Table Locks
- Thread Cache : MySQL Overview | Percona App - MySQL Thread Cache

그래프를 추가할 땐, 1개의 호스트만을 선택하여 그래프를 추가하고, 추가하는 그래프의 개수에 따라 그래프 폭을 적절히 변경한다. 1행의 전체 폭(Span) 12이다. 각 그래프별 폭은 그래프 설정탭의 General > Span 값을 2로 설정하면 된다.



“Active Threads” 그래프와 “Thread Cache” 그래프의 지표는 하나의 그래프로 묶어서 보여줘도 크게 무리가 없기에 하나의 그래프로 두 그래프 지표를 합쳐본다.

먼저 Thread Cache 그래프 메뉴에서 Duplicate버튼을 클릭하여 같은 그래프를 복사해둔다




별도의 브라우저 창을 하나 더 띄워서 Active Threads 그래프 설정으로 집입하여 Metrics 탭의 Query, Legend format을 복사한다




원래창에서 복사한 Thread Cache 그래프의 설정으로 진입하여 Metrics 탭의 하단에 있는 [+Add query] 버튼을 두번 클릭하면 아래의 D/E 메트릭 행이 추가된다. 이 메트릭정보에 Active Threads A/B 메트릭 값(Query, Legend Format )을 복사하여 추가한다. 그럼 다음과 같이 추가한 두개의 메트릭도 함께 그래프에 표시된다.




Active Threads 그래프와 Thread Cache그래프를 하나의 그래프로 합쳐 만든 새로은 그래프이므로 다음과 같이 General 탭의 Title [$host] Threads 라고 이름을 수정한다.



그리고 Display 탭의 Fill 값을 0으로 변경하여 그래프 하단의 음영처리를 하지 않는 그래프로 변경한다.




X 버튼을 눌러 그래프 설정 화면에서 빠져나오면 다음과 같이 “Threads” 그래프가 잘 추가되었음을 확인할 수 있을 것이다.




원래 있었던 Active Threads, Thread Cache 그래프는 각 그래프 메뉴의 쓰레기통 모양의 버튼을 클릭하여 삭제해준다.




모든 설정을 마치면 다음과 같이 CPU Usage, QPS, Threads, Locks, Handlers 그래프를 5분단위의 5초갱신으로 볼 수 있다.






물론 Host 드롭 박스에서 여러 호스트를 설정하면 복수의 행에 선택한 호스트들의 그래프도 함께 볼 수 있다.



최종적으로 완성한 이 MySQL 실시간 모니터링 대시보드는 아직 저장되지 않은 상태이다. 잊지 말고 반드시 대시보드의 저장버튼을 눌러 저장한다.







[PMM] #120 Coffee Break


Coffee Break

{PMM] 이라는 이름으로 11개의 포스팅을 통해서 PMM의 플랫폼을 설치했고, 최종 목적인 MySQL 서버 모니터링 환경(모니터링 정보 수집, 대시보드 구성 등)을 구성해 보았다. 주요 모듈(Prometheus, Grafana, node/mysqld exporter )에 대한 상세한 구조와 원리에 대한 설명보다는 실행(Action)에 중점을 두어 설명했으므로, 여기까지 잘 따라해 보았다면, 잠시 쉬어가자.

지난 포스팅을 쭈욱 살펴보는것도 괜찮다.

[PMM] #010 PMM Tutorial for MySQL Monitoring
[PMM] #020 PMM (Percona Monitoring and Management)
[PMM] #030 PMM Server - Client 서버 정보
[PMM] #040 PMM Server - Prometheus 설치
[PMM] #050 PMM Client - Node Exporter 설치
[PMM] #060 PMM Client - Mysqld Exporter 설치
[PMM] #070 PMM Server - Grafana 설치
[PMM] #080 PMM Server - Grafana/Prometheus 데이터소스 연동
[PMM] #090 PMM Server - Percona App for Grafana 설치
[PMM] #100 Percona Dashboard - 리눅스 모니터링
[PMM] #110 Percona Dashboard - MySQL 모니터링



그리고 본 포스팅시리즈를 읽고 있는 독자들이 갖고 있을지도 모르는 몇가지 의아한 점에 대해서 간단히 언급해본다.



010. PMM 관련 포스팅을 왜 시작했나요?
- 한글 매뉴얼이 없음.
- 인터넷 검색을 해봐도 한글로 포스팅한 자료를 찾을 수 없음. 없는 듯 함.


020. PMM을 설치할 때 왜 Docker 이미지가 아니라 각각의 모듈별로 따로 설치하나요?
- Docker가 익숙치 않은 독자들을 위함.
- PMM을 구성하는 모듈의 개별 버전 업데이트가 빠르게 announce되고 있다. 개별 모듈별로 설치하므로써, 아직 실험적인 모듈들은 나중에 안정화 버전이 나오면 설치하고 싶다.
- PMM의 기능 중에서 꼭 필요한 기능만 사용하고 싶기 때문에.
- 각각의 모듈을 설치해보고 연동하는 과정은 생각보다 간단하기에 독자가 이해하고 실습하기에 더 적절할 것이라고 생각함.


030. PMM 아키텍쳐에는 Query Analytics, Ochestrator, Proxy Exporter 등의 모듈들이 있던데, 이 모듈들의 설명이나 설치에 관련한 내용은 왜 없나요?
- Query Analytics : 추후, 포스팅 하고 싶음. 아직까지는 시간적인 여유가 없기에.
- Ochestrator : 아직 실험적인 툴. 나중에 안정화 버전이 나오면 PMM과는 별도로 테스트해 보고 공유하고 싶음.
- Proxy Exporter : ProxySQL 관련 포스팅은 별도로 진행 예정.


040. Percona Dashborad TokuDB Metrics 대시보드는 언급하지 않고 건너뛴 이유가 있나요?
MySQL 서버를 사용하는 시스템에서 TokuDB 엔진에 비하여 InnoDB 엔진을 사용하는 것이 아직은 일반적이라고 생각하고 있다. 물론 Toku 엔진을 상용서비스( Production환경)에서 사용하고 있는 시스템이 없지는 않을 것이라 예상한다. “보편적으로 더 많이 사용하는 것들에 대한 모니터링하는 것을 먼저 언급하는 것뿐이다. Toku엔진, Galera Cluster, MyISAM 엔진 등에 대한 모니터링 지표도 기회가 되면 꼭 포스팅 하고 싶다


050. 리눅스 모니터링, MySQL 모니터링 지표 설명이 너무 간단한 것 같다. 실제로 MySQL 모니터링 지표를 성능 관점의 튜닝 등을 위하여 자세히 설명하거나 다양한 케이스를 예를 들어 설명해줄 수 없나요?
가장 공유하고 싶은 내용이다. 하지만 이 내용은 매우 자세하고 다양한 케이스를 언급해야 하는데 내용도 많고, 튜닝 케이스 재연이 필요하므로 포스팅에 오랜 시간이 필요하다. 이 내용도 나중에 기회가 된다면


060. 다음 PMM관련 포스팅 내용에는 어떤 것들이 있을지 미리 알려주세요.
다음 포스팅 내용을 미리 공유하자면 간단히 다음과 같다.

MySQL 실시간 모니터링
MySQL
모니터링 지표 중 실시간으로 조회하는 것이 의미있는 그래프로 구성하는 대시보드 만들기..
- [PMM] #130 MySQL
모니터링 - Realtime#1
- [PMM] #140 MySQL
모니터링
- Realtime#2

MySQL
일별 모니터링
MySQL
모니터링 지표 중 일별로 조회하는 것이 의미있는 그래프로 구성하는 대시보드 만들기
- [PMM] #150 MySQL
모니터링 - Daily#1
- [PMM] #160 MySQL
모니터링
- Daily#2


MySQL 모니터링 알림
Prometheus
Alert Manager를 설치하여 MySQL 모니터링 지표 중 특정 지표의 상태 변경시 알림(이메일 등) 기능 연동
- [PMM] #170 MySQL
모니터링 - 알림-Prometheus Alertmanager 설치
- [PMM] #180 MySQL
모니터링 - 알림
-Replication Stop

MySQL
데이터 모니터링
MySQL 성능 지표가 아닌 MySQL 서버의 특정 테이블들에 대한 SQL 질의 결과를 Prometheus에 저장하고 이를 대시보드로 구성.
- [PMM] #190 MySQL
모니터링 - 데이터모니터링#1-mysqlexporter 설치
- [PMM] #200 MySQL
모니터링 - 데이터모니터링#2-대시보드구성