[Using Google Cloud Platform] MySQL 서비스 CloudSQL에 접속하기

윤성재, 조대협

구글 클라우드에서는 MySQL의 매니지드 서비스 형태로 CloudSQL 서비스를 제공한다.
이 글에서는 CloudSQL을 서버에서 접근하는 방법과, 일반적인 MySQL 클라이언트로 접근하는 방법에 대해서 설명하고자 한다.

CloudSQL은 매니지드 MySQL서비스이다. 아마존에 RDS서비스와 같다고 보면 되는데 현재는 1세대를 서비스하고 있고, 곧 2세대가 서비스 예정이다.
1세대는 500GB까지의 용량까지 지원하고 있지만 2세대는 10테라까지 지원을 한다.
현재 지원되는 MySQL버전은 5.5와 5.6 지원하고, 내부 엔진으로는 InnoDB만을 제공한다.

2 세대에 기대되는 기능으로는 On Prem(호스팅 센터에 있는) MySQL과 복제 구성이 가능하다. On Prem에 있는 서버를 마스터로 할 수 도 있고, 반대로 마스터를 CloudSQL로 사용하고 읽기 노드를 On Prem에 구성하는 등 다양한 하이브리드 구성이 가능하다. (기대되는 부분)

자동 백업, 확장을 위한 읽기 전용 노드 (Read replica)등 필수적인 기능을 제공하고 있다.

1세대 Cloud SQL 연결 방식

CloudSQL은 RDS와는 다르게 private ip (10.x.xx)를 아직 지원하지 않고 public ip만을 지원한다. 그래서 서버에 접근하려면 이 public ip를 통해서 접근하면 된다. 보안을 위한 접근 통제 방법으로 특정 IP 주소에서 들어오는 트래픽만을 받아드리도록 설정이 가능하다.

또는 PaaS서비스인 구글 앱앤진을 사용하는 경우에는 구글 앱앤진의 인스턴스나 그룹 단위로 접근 통제가 가능하다.
다음 그림은 콘솔상에서 접근이 가능한 IP 주소를 지정하는 화면이다.

Authorized networks

[ 출처: Flickr, gongjak1 ]

MySQL 클라이언트를 이용하여 접속을 할때 mysqlclient를 이용하여 직접 ip등을 입력하고 접속을해도 되지만 이 경우에는 CloudSQL에서 Ip를 허용해줘야 하기 때문에 개발이나 기타 운영 환경등에서 IP 주소가 바뀌면 그때 마다 설정을 해줘야 하기 때문에 불편할 수 있다.
이를 조금 더 편하게 하려면 mysqlclient를 사용하지 않고 구글에서 제공하는 “gcloud” 라는 도구를 이용하면, 별도로 접속 IP를 열지 않더라도 접속이 가능하다.
접속 방법은 먼저 gcloud 명령어를 인스톨 한 후에

$ gcloud config set project [클라우드 프로젝트 이름]
$ gcloud beta sql connect [CloudSQL 인스턴스이름] —user=root
(여기서 –user=root 에서 root 사용자는 MySQL 인스턴스내의 사용자이다)

으로 접속하면 MySQL 클라이언트와 동일한 툴로 접속이 된다.

Connect MySQL

[ 출처: Flickr, gongjak1 ]

gcloud 툴킷을 이용한 자세한 접속 방법은 https://cloud.google.com/sql/docs/mysql-client#connect-ssl 를 참고하기 바란다.

참고)

Toad, MySQL Workbench 등에서 안전하게 연결하는 방법

>Google Cloud Platform (이하 GCP)에는 Fully-Managed 해주는 RDBMS 서비스로 CloudSQL이라는 상품이 있다. 얼마전 2세대 제품을 베타로 시작하면서 현재는 두 가지 제품이 함께 운영되고 있다.

2세대 Cloud SQL 연결

2세대 ClouodSQL은 1세대의 단점인 Public IP를 통해서만 접속이 가능한 방식을 CloudSQL에 접속할 클라이언트에 Proxy를 설치 하는 방식을 이용하여, Public IP를 이용한 방식에 비해서 안전한 보안 방식을 조금 더 쉽게 제공할 수 있게 되었다.

Cloud SQL 생성

클라우드 콘솔 > CloudSQL 에 접속하면 다음과 같은 화면을 볼 수 있다.

Create MySQL instance

[ 출처: Flickr, gongjak1 ]
새로운 DB를 만들기 위해 ‘인스턴스생성’을 클릭하자.

Choose MySQL instance

[ 출처: Flickr, gongjak1 ]
Cloud SQL 2세대의 세부정보 및 기능을 클릭하면 1세대보다 향상된 기능을 볼 수 있다.

Cloud SQL 2nd

[ 출처: Flickr, gongjak1 ]
2세대 서비스는 현재 베타 서비스 중으로 일부 베타 제한 사항이 있으며, 다음 링크 에서 확인할 수 있다.

2세대를 선택하면 인스턴스를 만들 수 있는 화면으로 바뀐다. 여기에 다음과 같은 값을 입력해준다.

  • 인스턴스 ID : testdb-001
  • 지역 : asia-east1
  • 영역 : 자동선택
  • 머신유형 : db-n1-standard-1
  • 저장용량 크기 : 50GB
  • 고가용성 : 장애 조치용 복제본 만들기 체크
  • 자동 백업 사용 설정 : AM 2:00 – AM 6:00
  • 승인된 네트워크 : 집이나 사무실 등 직접 접속을 할 네트워크를 입력해주세요.
  • 고급 옵션 > 데이터베이스 버전 : MySQL 5.6
  • 고급 옵션 > MySQL 플래그 : 항목 추가를 눌러보면 주요 옵션에 대해 추가할 수 있으니 원하는 옵션을 선택하면 된다.

여기까지 입력하면 다음과 같은 모습이 될 것이다.
마지막의 ‘생성’을 클릭하면 인스턴스가 만들어진다.

Create MySQL instance Option-1
Create MySQL instance Option-2
Create MySQL instance Option-3
Create MySQL instance Option-4
Create MySQL instance Option-5

[ 출처: Flickr, gongjak1 ]


MySQL 클라이언트에서 Proxy를 통해서 CloudSQL 2세대 접속하기

Proxy 준비

클라이언트에서 Proxy를 통해서 CloudSQL 2세대를 접속할때는 클라이언트에 Proxy를 설치해야 한다.
인스턴스가 생성되었으면 이제, Proxy를 이용하여 CloudSQL에 접속해보자.

Linux, Mac, Windows를 지원하는데 각각의 설정 방법은 다음과 같다.
각 OS 별 설정전에 먼저 공통적으로 접속키 설정 등 사전 작업이 필요한데 다음과 같다.

IP를 통한 접속 방법은 앞의 1세대 CloudSQL 을 이용한 접속 방식과 동일하니 참고하기 바란다.

사전 작업

CloudSQL API 활성화

우선 클라우드 콘솔에서 Google CloudSQL API 를 사용할 수 있도록 해줘야 한다.
클라우드 콘솔 > API 관리자 > Google Cloud API > CloudSQL API 를 선택 한다.
개요 화면에서 ‘사용 설정’ 을 클릭해주면 잠시 후에 활성화된다. 여기에 ‘사용 중지’ 라고 나온다면 이미 사용 설정이 되어 있는 상태이다.

Enable Google Cloud SQL API

[ 출처: Flickr, gongjak1 ]

Proxy가 사용할 서비스 개정 및 비공개키 생성

When you connect using the proxy, you provide the proxy with a path to a local key file. The proxy uses that key to authenticate with the Google Cloud Platform.

For more information about service accounts, see the Google Cloud Platform Auth Guide.

콘솔에서 IAM 및 관리자 로 가보자.

Service Account

[ 출처: Flickr, gongjak1 ]
‘서비스 계정 만들기’를 클릭하고 다음과 같이 입력한 뒤, ‘새 비공개 키 제공’을 선택하고 ‘만들기’를 클릭한다.

Create Service Account

[ 출처: Flickr, gongjak1 ]

아래와 같은 메시지가 보인다면 서비스 계정 생성이 완료된 것이다.
Downloads 폴더에 가보면 비공개 키 파일이 json 파일 형태로 저장되어 있는 것을 찾을 수 있다.

Completed Create Service Account

[ 출처: Flickr, gongjak1 ]
이 키 파일은 DB 접속에 사용되는 매우 중요한 파일이므로 적절한 곳에 잘 보관하도록 한다.

root 유저 비밀번호 변경

MySQL을 생성한 후에, root의 비밀 번호를 변경한다. 이 예제에서는 클라이언트가 root 사용자로 붙도록 하였는데, 만약에 필요하다면 새로운 사용자를 생성해서 그 사용자를 이용하는 것을 권장한다.
Google 콘솔의 CloudSQL 에서 루트 비밀번호를 바꿔보자.

클라우드 콘솔 > CloudSQL > testdb-001 인스턴스 > 엑세스 제어 > 루트 비밀번호 변경 클릭

다음과 같은 창이 열리면 사용하고자 하는 암호를 입력해주면 된다.

Change root user Password

[ 출처: Flickr, gongjak1 ]
자아 이제 클라이언트에서 CloudSQL 에 Proxy를 통해서 접속하기 위한 준비가 끝났다.

Linux VM에 접속하기

Linux에서 접속을 하는 방법을 살펴보기 위해서 편의상 구글 클라우드 내에 VM을 생성해놓고,이 VM으로 부터 Proxy를 이용하여 접속을 해보도록 하겠다.
이 예제는 Debian Linux를 기준으로 작성되었다.

클라우드 콘솔 > Compute Engine 을 선택하여 다음과 같이 인스턴스를 생성해 준다.

  • 이름 : testapp-001
  • 영역 : asia-east1-a
  • 머신 유형 : vCPU 1개
  • 부팅 디스크 : Debian GNU/Linux 8 (jessie)
  • ID 및 API 액세스
  • 방화벽 : HTTP 트래픽 허용

Create Instance

[ 출처: Flickr, gongjak1 ]
인스턴스 생성이 완료되면 다음과 같이 나타날 것이다.
오른쪽 끝의 SSH를 눌러 서버에 접속한다.

Instance Info

[ 출처: Flickr, gongjak1 ]

Proxy 설치

로그인에 성공했으면 다음 명령어를 입력하여 proxy를 다운로드 받는다.

$ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
$ mv cloud_sql_proxy.linux.amd64 cloud_sql_proxy
$ chmod +x cloud_sql_proxy

다음과 비슷한 실행 결과 화면을 볼 수 있다.

Downlaod proxy

[ 출처: Flickr, gongjak1 ]

Proxy 시작

인스턴스의 콘솔로 가서 proxy를 시작해보자.

$ sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
$ sudo ./cloud_sql_proxy -dir=/cloudsql -instances=[INSTANCE_CONNECTION_NAME] -credential_file=[PATH_TO_KEY_FILE] &

[INSTANCE_CONNECTION_NAME] 은 CloudSQL 의 개요 화면에서 확인할 수 있다. 한글로는 “인스턴스 연결 이름” 이다.

Instance property

[ 출처: Flickr, gongjak1 ]
[PATH_TO_KEY_FILE] 은 앞서 사전 작업에서 생성한 비공개키 JSON파일을 서버에 복사한 후 이 파일의 위치를 적어주면 된다.

$ sudo ./cloud_sql_proxy -dir=/cloudsql -instances=(project name):asia-east1:testdb-001 -credential_file=/home/sjyun/.keys/78a8c4166b03.json &

실행 후 “Ready for new connections” 이란 메시지가 보이면 된다.

Start proxy

[ 출처: Flickr, gongjak1 ]

Proxy 를 이용한 MySQL Client 에서 접속 하기

먼저 다음 명령어를 이용해서 MySQL Client를 설치하자.

$ sudo apt-get update
$ sudo apt-get install mysql-client-5.6

Install MySQL Client

[ 출처: Flickr, gongjak1 ]
MySQL 클라이언트 설치가 끝났으면 이제 직접 연결을 해보자. 다음 명령어를 이용하면 접속할 수 있다.

$ mysql -u root -p -S /cloudsql/[INSTANCE_CONNECTION_NAME]

Enter password: 가 나오면 루트 암호를 입력하면 접속 된다.

Connect proxy

[ 출처: Flickr, gongjak1 ]


Cloud SQL 접속을 위한 네트워크 추가하기

GCP에는 기본으로 방화벽이 설정되어 있어 외부로부터의 모든 접근이 차단되어 있기 때문에 현재 접속하고자 하는 IP를 Cloud SQL에 등록해줘야만 접속을 할 수 있다.

이미 생성된 Cloud SQL 인스턴스에서는 “액세스 제어 > 승인” 메뉴에서 네트워크를 추가해줄 수 있다.

Add Network

[ 출처: Flickr, gongjak1 ]
“+네트워크 추가”를 클릭해서 현재 내가 사용중인 외부 IP를 등록해주면 된다.
IP를 모르겠다면 아래 사이트에서 쉽게 확인할 수 있다.

IP확인 whatismyipaddress.com

IP는 CIDR 형식에 맞게 입력해주면 되는데, 잘 모르겠다면 확인된 IP 뒤에 “/32” 를 붙혀서 등록해준다. 이는 본인 IP 하나만 접속을 허용해주겠다는 의미이다.

MAC에서 접속하기

Apple MAC을 사용하는 유저들은 Cloud SQL 에 접속하기 위해 MySQL Workbench 와 터미널을 이용한 두 가지 방법을 모두 이용할 수 있다.
Workbench 를 이용하는 방법은 Windows에서 접속하기에서 설명하도록 하고, 여기에서는 많은 유저들이 선호하는 터미널에서 접속하는 방법을 알아보도록 하겠다. 만약 터미널에서의 접속은 이용하지 않고 Workbench 만을 사용한다면 MySQL을 설치하지 않고도 바로 Workbench에서 접속이 가능하기에 “Windows에서 접속하기” 방법을 보기 바란다.

MySQL 설치하기

이미 자신의 맥에 MySQL이 설치되어 있다면 바로 접속하면 되는데, 없다면 설치해주도록 하자.
mysql.com 사이트에서 다운로드 받아 설치하면 된다.

현재 사용중인 Mac OS X 의 버전이 Maverick(10.9) 이상 이라면 “Mac OS X 10.11 (x86, 64-bit), Compressed TAR Archive” 버전을 다운로드 받으면 된다.
만약 Mountain Lion (10.8) 이라면 다운로드 창의 “Looking for previous GA versions?” 를 클릭하여 “Mac OS X 10.8 (x86, 64-bit), DMG Archive” 버전을 다운로드 받아서 설치한다.

Downlaod Link

MySQL Community Server

[ 출처: Flickr, gongjak1 ]

자신에게 맞는 파일의 Download 를 클릭하면 다음과 같이 로그인이나 가입을 하라고 나온다.
그냥 무시하고 아래의 “No thanks, just start my download.”를 클릭하면 바로 다운로드를 시작한다.

Login Oracle Web account

[ 출처: Flickr, gongjak1 ]

설치 방법은 다른 맥용 App을 설치하는 것과 다르지 않다. Finder를 열어서 더블 클릭하고, pkg 파일을 더블 클릭하면 설치 화면이 나온다.

MySQL pkg

Install MySQL

[ 출처: Flickr, gongjak1 ]

‘계속’을 클릭한다.

Install MySQL License

[ 출처: Flickr, gongjak1 ]
소프트웨어 사용권 계약에 대한 내용이다.
‘계속’을 클릭한다.

Install MySQL License Agreement

[ 출처: Flickr, gongjak1 ]
동의하지 않으면 설치를 할 수 없으므로 ‘동의’를 클릭한다.

Install MySQL Location

[ 출처: Flickr, gongjak1 ]
설치 디스크 위치를 기본적으로 ‘Macintosh HD’에 설치하는데, 다른 곳에 설치하고 싶다면 ‘설치 위치 변경’을 클릭하여 바꿔준다. 준비가 되었으면 ‘설치’를 클릭한다.

Install MySQL input password

[ 출처: Flickr, gongjak1 ]
암호를 넣고 ‘소프트웨어 설치’를 클릭하면 설치를 시작한다.

Installing MySQL

[ 출처: Flickr, gongjak1 ]
잠시 기다리면 다음과 같은 창이 열리면서 root 유저의 암호가 나온다. MySQL DB를 서버로 사용할 거라면 반드시 기억해야만 한다. 여기서는 Client 만 사용할 것이기에 무시해도 된다.

Install MySQL Completed

[ 출처: Flickr, gongjak1 ]
OK를 클릭하고 닫으면 된다.

이제 터미널을 열어서 mysql 을 입력해보자. 어? 에러가 발생한다.

mysql command not found

[ 출처: Flickr, gongjak1 ]

분명 설치했는데, 왜 명령어를 못찾을까?
맥용 MySQL이 설치된 기본 위치는 /usr/loca/mysql 인데, 인스톨러가 PATH를 추가해주지 않아서 발생하는 에러이다.
에디터로 자신의 $HOME 폴더에 있는 .bash_profile 파일을 열어 다음과 같이 PATH 를 추가해주자.

export PATH=”$PATH:/usr/local/mysql/bin”

이제 터미널을 닫았다가 다시 열거나 다음 명령을 실행해주면 변경된 내용이 적용된다.

$ . .bash_profile

이제 mysql을 입력해보자.

Can't connect to local MySQL server

[ 출처: Flickr, gongjak1 ]
이런 메시지가 나온다면 잘 적용된 것이다.

이제 Cloud SQL에 연결해보자. 접속을 위한 외부 IP는 Cloud SQL 의 처음 화면에서 확인할 수 있다. 다음과 같이 입력하고 root 암호를 넣어주면 접속이 된다.

$ mysql -h [Cloud SQL 외부 IP] -u root -p

connect mysql server

[ 출처: Flickr, gongjak1 ]

Windows에서 접속하기

이번엔 MS Windows 에서 MySQL Workbench 를 이용하여 접속하는 방법을 알아보자.

MySQL Workbench 를 이용하는 방법은 PC에 MySQL 서버 또는 클라이언트를 설치하지 않고도 서버로의 접속이 가능하므로 Workbench만 다운로드 받아 설치하고 사용하면 된다.

MySQL Workbench Download Link

Workbench는 윈도우 뿐아니라 Ubuntu, Red Hat, Fedora, Mac OS X 등 다양한 플랫폼을 지원하는데 여기서는 윈도우에 설치할 것이기에 ‘Microsoft Windows’를 선택하고 다운로드 받는다.

MSI installer 버전을 선택하면 설치를 하고 사용할 수 있고, ZIP버전은 압축을 풀고 바로 사용할 수 있다.

MySQL Workbench

[ 출처: Flickr, gongjak1 ]
Download 를 클릭하면 역시 로그인하라는 메시지가 나오는데, “No thanks, just start my download.” 를 선택하면 바로 다운로드가 시작된다.

Login Oracle Web account

[ 출처: Flickr, gongjak1 ]

MySQL Workbench 설치

설치를 시작하면 다음과 같은 화면이 나타날 수 있다.

MySQL Workbench Installer Information

[ 출처: Flickr, gongjak1 ]
이는 Workbench 가 필요로 하는 두 가지 프로그램이 설치되어 있지 않을 때 나타나며, OK 를 클릭하면 설치가 진행되지 않고 “Download Prerequisites” 링크와 함께 바로 “Finish” 가 나타난다.

MySQL Workbench Download Prerequisites

[ 출처: Flickr, gongjak1 ]
“Download Prerequisites” 을 클릭하면 두 가지 필요한 프로그램을 다운로드 받을 수 있는 페이지가 열린다.

MySQL Workbench Download Prerequisites Link

[ 출처: Flickr, gongjak1 ]
윈도우 10 사용자는 .NET Framework 4 이 이미 설치되어 있으므로 아래의 Visual C++ 2013 만 설치하면 된다.

Microsoft .NET Framework 4 Client Profile

Microsoft Visual C++ 2013 Redistributable Package (x86 or x64)

두 가지 프로그램의 설치가 완료되었으면 다시 Workbench 설치를 진행한다.

MySQL Workbench Setup Wizard

[ 출처: Flickr, gongjak1 ]
이제는 여느 다른 프로그램들과 설치 방법이 다르지 않다. 내용을 보면서 “Next”를 눌러주면 설치가 진행된다. 설치가 끝나고 마지막 화면에서 “Finish”를 클릭하면 Workbench 가 자동으로 실행된다.

MySQL Workbench가 실행된 화면이다.

Starting MySQL Workbench

[ 출처: Flickr, gongjak1 ]
새로운 연결 설정을 하기 위해 “MySQL Connections” 옆의 “+” 기호를 클릭하고, 새로 열린 창에 접속 정보를 입력하자.

Connection Name : testdb-001
Hostname : [Cloud SQL 의 외부 IP]

MySQL Workbench New Connection

[ 출처: Flickr, gongjak1 ]
창 아래쪽의 “Test Connection”을 클릭하면 Password 를 입력하는 창이 새로 열린다.
암호를 입력하고 정상적으로 연결이 잘 되면 다음과 같은 연결 성공 메시지 창이 나타닌다.

MySQL Workbench Test Connection

[ 출처: Flickr, gongjak1 ]
Test Connection 이 성공했다면 “OK” 를 누르자.
초기 화면에 “testdb-001″에 대한 내용이 추가 되었을 것이고, 이를 더블 클릭하면 DB에 접속을 하게된다.

가운데 ‘Query 1’ 이란 탭에 SQL문을 입력하고 실행하면 바로 아래 창에서 수행 결과를 볼 수 있다.

MySQL Workbench Query1

[ 출처: Flickr, gongjak1 ]
이제 MySQL Workbench 의 모든 기능을 사용할 수 있다.


애플리케이션에서 접속하기

MAC,Windows,Linux 에서 직접 MySQL 클라이언트를 이용하여 CloudSQL 에 접속하는 방법을 알아보았다. 이번에는 애플리케이션에서 Proxy를 통하여 CloudSQL에 접속하는 방법을 알아보자.
여기서는 Apache + PHP를 이용하여 MySQL에 연결하는 예제를 통해서 설명한다.

Apache, php 설치하기

먼저 Apache 2 서버와 PHP5를 설치해보자.

$ sudo apt-get install apache2 php5

Install apache php

[ 출처: Flickr, gongjak1 ]
구글 콘솔에서 ‘Compute Engine > VM 인스턴스’ 로 가서 외부 IP를 클릭하면 새창이 열리면서 Apache2 Debian Default Page 화면을 볼 수 있을 것이다.

external IP

[ 출처: Flickr, gongjak1 ]
Apache2 Debian Default Page

[ 출처: Flickr, gongjak1 ]

만약 이 화면이 보이지 않는다면 apache2 가 실행되고 있는지 확인하고 시작해 준다.

$ sudo service apache2 status
$ sudo service apache2 start

mysql connection example

php5 용 mysql 모듈을 설치한다.

$ sudo apt-get install php5-mysql
$ sudo service apache2 stop
$ sudo service apache2 start

아래 예제에서 (project_name) 부분을 현재 프로젝트 이름으로 바꿔주고,
‘/var/www/html’ 폴더에 mysql_connect.php라는 이름으로 저장한다.

$ sudo vi /var/www/html/mysql_connect.php

<!--?php // we connect to localhost and socket $link = mysql_connect(':/cloudsql/(project_name):asia-east1:testdb-001', 'root', 'testdb'); if (!$link) { die('Could not connect: ' . mysql_error()); } echo 'Socket Connected successfully'; mysql_close($link); ?-->

이제 브라우저에서 접속해보자. 아래와 같은 결과를 볼 수 있을 것이다.

Socket Connected successfully

[ 출처: Flickr, gongjak1 ]
지금까지 최근 업데이트 된 Google CloudSQL 2nd Generation 의 생성부터 접속하는 방법까지 알아보았다.

처음 CloudSQL 을 사용하고자 하는 이들에게 도움이 되길 바란다.

[Using Google Cloud Platform] SSH를 이용해서 VM에 접속하기

윤성재, 조대협

클라우드에서 VM을 생성하면, 이 VM에 접속할 필요가 있는데, 일반적으로 SSH를 이용한다.
SSH로 접속하는 방법은 크게 다음과 같이 4가지 방법이 있다.

  1. 브라우저 창에서 열기
  2. 맞춤 포트의 브라우저 창에서 열기
  3. gcloud 명령어로 접속하기
  4. 다른 SSH 클라이언트를 사용하여 접속하기

이 중 가장 쉬운 방법은 1번일 것이다. 웹 브라우저에서 그냥 클릭만 하면 바로 접속 된다. 인스턴스 한 대에만 접속한다면 분명 가장 쉽고 편하게 접속할 수 있는 방법이다.
그 다음으로는 gcloud 명령어로 접속하는 방법일 것이다. 이는 맥킨토시나 리눅스를 PC로 사용하는 사람들에게는 무척이나 쉽고 편하게 강력한 기능들을 제공해줄 것이다.
하지만 많은 이들이 윈도우를 사용하고 있고, 윈도우에서 서버로 접속하기 위해 SecureCRT 나 PuTTY 같은 ssh client 프로그램을 사용하고 있다
이 장에서는 윈도우와 맥에서 SSH를 이용하여 생성된 VM에 접속하는 방법을 알아보도록 한다.

MAC OS에서 SSH로 접속하기

SSH 키페어 생성

ssh-keygen 명령어를 이용하여 다음과 같이 RSA 키페어를 생성한다.

$ ssh-keygen -t rsa -C &quot;구글계정명&quot;

ssh-keygen

[ 출처: Flickr, gongjak1 ]

퍼블릭 키 등록하기

키페어가 생성이 되었으면 *.pub으로 끝나는 이름의 퍼블릭키의 내용(텍스트)를 복사한후, 콘솔창에서 _”Compute Engine > Metadata > SSH Keys”_ 부분에 복사한 텍스트를 붙여 넣어서 키를 등록한다.

Register SSH key

[ 출처: Flickr, gongjak1 ]

SSH 터미널로 접속하기

키 등록이 끝났으면, 이 키를 이용하여 SSH로 접속한다.

$ ssh -i [Private 키 파일] 계정@호스트명

Connect ssh using key file

[ 출처: Flickr, gongjak1 ]

Windows에서 Putty로 SSH 접속하는 방법

윈도우에서 서버로 접속하기 위해 SecureCRT 나 PuTTY 같은 ssh client 프로그램을 사용하고 있다.
이에 무료로 사용이 가능한 PuTTY 를 이용한 접속 방법을 알아보자.

PuTTY 를 다운로드 받아 설치하기

Putty는 http://www.putty.org/ 를 통해 다운로드 받을 수 있다.

SSH 키페어 생성

만약 GCP 프로젝트에서 승인되어진 public key가 없다면, 새로운 key-pair를 생성하고 프로젝트에 적용할 수 있다.

SSH나 SCP를 이용하여 인스턴스에 접속하기 전에 프로젝트에서 사용할 SSH key-pair 를 생성해야만 한다.
만약 gcloud tools 를 이용하여 인스턴스에 접속하고 있다면, 이 key-pair는 이미 생성되어 있고 다음의 위치에서 확인할 수 있다.

Linux OSX

  • Public key : $HOME/.ssh/google_compute_engine.pub
  • Private key : $HOME/.ssh/google_compute_engine

Windows

  • Public key : C:\Users\[USER_NAME]\.ssh\.google_compute_engine.pub
  • Private key : C:\Users\[USER_NAME]\.ssh\google_compute_engine

만약에 키 페어가 없다면, 앞의 “MAC OS에서 SSH로 접속하기” 부분에서 SSH 키페어 생성 부분을 참고하여 키페어를 생성하거나 아래 가이드에 따라서 Putty에서 키페를 생성하도록 하자.

gcloud tools를 설치했다면 앞에서 key-pair를 확인했을 것이고, 여기는 넘어가도 된다.
gcloud tools는 GCP를 계속 사용하고자 한다면 반드시 필요한 툴이므로 꼭 설치하길 바란다.
https://cloud.google.com/sdk/downloads 에서 다운로드 받아 설치할 수 있다.
아직 gcloud tools를 설치하지 않았다면 새로운 key-pair를 생성해서 접속할 수 있다.

puttygen.exe 를 다운로드 받아 실행하고 Generate 버튼을 클릭한다.

PuTTY Key Generator

[ 출처: Flickr, gongjak1 ]
새로운 key-pair 가 생성된 뒤, Key comment 항목에는 Google username 을 입력한다.
Key passphrase, Confirm passphrase 에는 암호를 입력한다. (선택사항)

Save PuTTY Key

[ 출처: Flickr, gongjak1 ]

private key 와 public key 를 파일로 저장하고 아직은 창을 닫지 않는다.

퍼블릭 키 등록하기

다음으로 ‘GCP 콘솔 > Compute Engine > 메타데이터 > SSH 키’ 페이지로 간다.
웹 콘솔에서 ‘수정’ 버튼을 클릭하고, ‘전체 키 데이터 입력’ 이라고 적힌 곳에 앞의 Putty 화면에서 ‘Public key for pasting into Open SSH authorized_keys file:’ 이라고 되어 있는 부분의 텍스트를 아래 그림과 같이 복사하여 붙혀넣고 저장한다.

Paste Public Key

[ 출처: Flickr, gongjak1 ]

Putty로 SSH 접속확인

먼저 접속할 VM의 IP를 확인하자.

구글 클라우드 콘솔에서 Compute Engine 메뉴의 VM 인스턴스 로 가면 외부IP를 쉽게 확인할 수 있다.

Instance External IP

[ 출처: Flickr, gongjak1 ]

다음 이 IP로 접속을 해보자.
PuTTY 를 실행한 후 Session 에서 Host Name 에는 puttyuser@[인스턴스 외부IP주소] 를 입력한다.

PuTTY Configuration Host Name

[ 출처: Flickr, gongjak1 ]
다음 Connection > SSH > Auth 의 Private key file for authentication 에서 저장해둔 private key 파일을 선택한다.

PuTTY Configuration Private Key

[ 출처: Flickr, gongjak1 ]
이제 Open 을 눌러 접속해보자. 처음 접속하기에 보안 경고 화면이 나오면 ‘예(Y)’를 눌러주자.

PuTTY Security Alert

[ 출처: Flickr, gongjak1 ]
Passphrase for key “puttyuser” 가 나오면 key-pair를 생성할 때 입력했던 암호를 넣어준다.

PuTTY Passphrase for key

[ 출처: Flickr, gongjak1 ]
이와 같이 authorized_key 를 “메타데이터 > SSH” 키에 등록하면 모든 인스턴스에 접속할 수 있게 되지만, 인스턴스를 생성할 때 SSH 키 항목에 등록하면 해당 인스턴스만 접속이 가능하게 된다.

[Using Google Cloud Platform] Stackdriver로 Third-party Appication 모니터링 하기

글쓴이 : 윤성재 (공작명왕)
E-mail ,  Facebook

Overview

Stackdriver에 대한 내용과 설치 방법은 Stackdriver Monitoring Documentation을 참조하기 바란다.
여기에서는 Stackdriver Agent가 설치되어 Monitoring 이 되고 있는 인스턴스에 설치된 Third-party Application 에 대한 추가 설정에 대해 설명하도록 하겠다.

준비할 것

당연하겠지만 구글 콘솔에 접속할 수 있는 브라우저가 있는 개인 PC
GCP(Google Cloud Platform) 을 사용할 수 있는 Account
GCP에 생성된 Project. 만약 없다면 처음 사용자를 위한 준비를 따라하도록 한다.
개인 신용카드 (본인 확인을 위해 $1.00이 승인되나 청구되지는 않는다.)

모니터링을 위한 GCP 준비

우선 프로젝트를 만들고 빌링계정을 생성하자.

New project 생성 : stacktest
빌링 계정 생성 : 신용카드를 등록해준다.

처음 GCP에 가입하면 60일동안 테스트 용으로 사용하라고 $300 크레딧을 무료로 넣어준다.
이는 프로젝트를 생성하고 들어가면 Billing 메뉴에서 확인할 수 있다.

stackdriver-2-image05

[ 출처: Flickr, gongjak1 ]

테스트 인스턴스 생성

이제 모니터링을 위한 인스턴스를 생성하자.

GCP 콘솔 -> Compute Engine -> VM instance -> CREATE INSTANCE

test-stackdriver-001

  • Name : test-stackdriver-001
  • Zone : asia-east1-a
  • Machine type : 1 vCPU , 3.75 GB memory
  • Boot disk : Debian GNU/Linux 8 (jessie)
  • 나머지는 모두 default

test-stackdriver-002

  • Name : test-stackdriver-002
  • Zone : asia-east1-a
  • Machine type : 1 vCPU , 3.75 GB memory
  • Boot disk : CentOS 7
  • 나머지는 모두 default

GCP에서 권고하는 Debian Linux 와 많은 사람들이 사용하는 CentOS 7을 기준으로 설명하도록 하겠다.

Stackdriver Agent 설치

잠시 기다린 후에 인스턴스 생성이 완료 되면 SSH로 접속하여 stackdriver agent를 설치하도록 한다. 설치 방법은 OS에 상관없이 동일하다. (https://cloud.google.com/monitoring/agent/install-agent)

$ curl -O "https://repo.stackdriver.com/stack-install.sh"
$ sudo bash stack-install.sh --write-gcm

Stackdriver Monitoring 초기 설정

이제 Monitoring에 제대로 나오는지 확인해보자.

GCP 콘솔 -> Monitoring

Login with google 이라고 나오면 Google ID로 로그인하면 된다.
이 후는 아래 그림을 보면서 진행한다.

Create a new Stackdriver account 를 선택하고 Continue 클릭.

stackdriver-2-image13

[ 출처: Flickr, gongjak1 ]

stacktest 를 선택하고 Create Account 클릭.

stackdriver-2-image14

[ 출처: Flickr, gongjak1 ]

더 추가할 프로젝트는 없으므로 Continue 클릭.

stackdriver-2-image15

[ 출처: Flickr, gongjak1 ]

AWS 계정은 생략하고 Done 클릭.

stackdriver-2-image22

[ 출처: Flickr, gongjak1 ]
잠시 기다리면 다음과 같이 완료되었다고 나온다.
‘Launch monitoring’을 클릭하여 모니터링을 시작해보자.

stackdriver-2-image21

[ 출처: Flickr, gongjak1 ]
모니터링 리포트를 날마다 받을지, 주마다 받을지 안받을지를 정하면 된다.
여기서는 테스트만 할 것이기에 ‘No reports’를 선택.

stackdriver-2-image03

[ 출처: Flickr, gongjak1 ]
모니터링 화면이 나오면 인스턴스가 제대로 등록되었는지 확인해본다.

Stackdriver Monitoring -> Resource -> Instances

stackdriver-2-image19

[ 출처: Flickr, gongjak1 ]

다음과 같이 생성한 인스턴스 2개가 모두 나오는지 확인해본다.

stackdriver-2-image01

[ 출처: Flickr, gongjak1 ]
인스턴스 Name을 클릭하여 시스템 기본 정보를 잘 수집해 오는지도 확인해보자.
Agent가 수집하여 화면에 그래프로 보여주는 기본 정보는 다음과 같다.

  • CPU Usage
  • CPU Load
  • CPU Steal
  • Memory Usage
  • Disk Usage
  • Disk I/O
  • Network Traffic
  • Open TCP Connections
  • Processes

Monitoring Group 생성

Stackdriver Monitoring -> Groups -> Create…

stackdriver-2-image10

[ 출처: Flickr, gongjak1 ]
화면이 나오면 다음과 같이 생성하자.
‘test-stackdriver-’를 포함하는 인스턴스들을 이 그룹에 포함하겠다는 의미이다.
즉, “test-stackdriver-003”을 추가로 생성하고, agent를 설치하면 자동으로 이 그룹에 포함되게 된다.

  • Group Name : test-group
  • Filter criteria match : Any
  • Name
  • Contains
  • test-stackdriver-

stackdriver-2-image07

[ 출처: Flickr, gongjak1 ]

그룹을 생성하게 되면 보여지는 그래프도 조금은 바뀌게 된다.

KEY METRICS

  • Instance (GCE) – CPU (agent)
  • Block Storage Volumes – Total Volume Capacity
  • Block Storage Volumes – Total volumes

RUNNING RESOURCES

  • Running Instances

의미는 어렵지 않으니 설명하지 않도록 하겠다. KEY METRICS는 필요하다면 챠트를 더 추가할 수도 있다.
이제 Stackdriver agent에 plugin을 설치하여 모니터링을 추가해보도록 하자.


모니터링 가능한 Thrid-party Application 목록

추가 가능한 plugin 목록이다. 가장 많이 사용하는 Application 들을 중심으로 실제 설치하고 셋팅하면서 Stackdriver Monitoring에 어떻게 보여지는지 확인해 보도록 하겠다.
(https://cloud.google.com/monitoring/agent/plugins/)

  • Apache web server
  • Cassandra
  • CouchDB
  • Elasticsearch
  • HBase
  • JVM Monitoring
  • Kafka
  • Memcached
  • MongoDB
  • MySQL
  • Nginx
  • PostgreSQL
  • RabbitMQ
  • Redis
  • Riak
  • Tomcat
  • Varnish
  • ZooKeeper

Apache Httpd Plugin

1.Apache Httpd 설치와 시작

< Debian 8 >

$ sudo apt-get install apache2
$ sudo service apache2 start
$ sudo service apache2 status

< CentOS 7 >

$ sudo yum install httpd
$ sudo systemctl start httpd
$ sudo systemctl status httpd

웹서버로 직접 접속하여 확인하고자 한다면 방화벽을 열어줘야만 한다.

GCP 콘솔 -> Compute Engine -> VM instance -> 인스턴스 클릭 -> EDIT -> Firewalls -> Allow HTTP traffic 클릭 -> Save

이제 각 인스턴스의 “External IP”로 웹서버에 접속할 수 있다.

2.사전 준비

Apache plugin 중에 mod_status 가 설치되어 있는지 확인한다.

$ curl http://localhost:80/server-status?auto

stackdriver-2-image17

[ 출처: Flickr, gongjak1 ]

< Debian 8 >

GCP 에서는 status.conf 가 기본으로 설치되므로 잘 된다.

< CentOS 7 >

server-status 가 없어서 404 Not Found 가 나온다. server-status 를 설치해주자.

$ cd /etc/httpd/conf.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/httpd/conf.d/status.conf
$ sudo sed -i s/127.0.0.1:/localhost:/g /etc/httpd/conf.d/status.conf
$ sudo sed -i s/127.0.0.1/"127.0.0.1 localhost"/g /etc/httpd/conf.d/status.conf
$ sudo su -c "echo 'LoadModule status_module modules/mod_status.so' > /etc/httpd/conf.modules.d/00-status.conf"
$ sudo systemctl restart httpd

3.plugin 설치

$ cd /opt/stackdriver/collectd/etc/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/apache.conf

4.Stackdriver Agent 재시작

< Debian 8 >

$ sudo service stackdriver-agent restart

< CentOS 7 >

$ sudo systemctl restart stackdriver-agent

5.Monitoring 확인

Monitoring -> Resources -> Instances

각 서버를 클릭해보자. stackdriver agent가 plugin이 정상으로 동작하여 정보를 제대로 가져온다면 Monitoring의 오른쪽 그래프 윗부분에서 다음과 같은 화면을 볼 수 있다.

stackdriver-2-image20

[ 출처: Flickr, gongjak1 ]

6.현재 모니터링이 가능한 항목

  • Active Connections (count): The number of active connections currently attached to Apache.
  • Idle Workers (count): The number of idle workers currently attached to Apache.
  • Requests (count/s): The number of requests per second serviced by Apache.
  • Scoreboard
  • Traffic

Cassandra Plugin

1.Cassandra 설치와 시작

< Debian 8 >

$ sudo sh -c "echo 'deb http://www.apache.org/dist/cassandra/debian 37x main' > /etc/apt/sources.list.d/cassandra.list"
$ sudo sh -c "echo 'deb-src http://www.apache.org/dist/cassandra/debian 37x main' >> /etc/apt/sources.list.d/cassandra.list"
$ gpg --keyserver pgp.mit.edu --recv-keys 749D6EEC0353B12C
$ gpg --export --armor 749D6EEC0353B12C | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install cassandra
$ sudo service cassandra start

참조 : http://wiki.apache.org/cassandra/DebianPackaging

< CentOS 7 >

cassandra 3.x Repository 를 추가해준다.

/etc/yum.repos.d/datastax.repo:
[datastax-ddc]
name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/datastax-ddc/3.7
enabled = 1
gpgcheck = 0

설치하고 시작해준다.

$ sudo yum install java-1.8.0-openjdk datastax-ddc
$ sudo /etc/init.d/cassandra start

참조 : http://docs.datastax.com/en/cassandra/3.x/cassandra/install/installRHEL.html

2.사전 준비

노드가 정상 작동중인지 확인한다.

$ nodetool status

stackdriver-2-image02

[ 출처: Flickr, gongjak1 ]

Cassandra 는 JMX 를 통해서 모니터링을 하기에, Cassandra에 JMX 설정이 되어야만 하는데, 다행히 localhost 호스트에서의 JMX 설정은 되어 있는 상태이며 기본 포트는 7199이므로 다음 명령어로 확인할 수 있다.

$ netstat -na| grep 7199

stackdriver-2-image08

[ 출처: Flickr, gongjak1 ]

3.Plugin 설치

$ cd /opt/stackdriver/collectd/etc/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/cassandra-22.conf

4.Stackdriver Agent 재시작

< Debian 8 >

$ sudo service stackdriver-agent restart

< CentOS 7 >

$ sudo systemctl restart stackdriver-agent

5.Monitoring 확인

Monitoring -> Resources -> Instances

각 서버를 클릭해보자. stackdriver agent가 plugin이 정상으로 동작하여 정보를 제대로 가져온다면 Monitoring의 오른쪽 그래프 윗부분에서 다음과 같은 화면을 볼 수 있다.

stackdriver-2-image16

[ 출처: Flickr, gongjak1 ]

Cassandra는 JVM 기반으로 동작하기에 친절한 Stackdriver는 JVM 모니터링까지 함께 할 수 있게 자료를 수집해서 보여준다.

stackdriver-2-image18

[ 출처: Flickr, gongjak1 ]

6.현재 모니터링 가능한 항목

JVM

  • Active JVM Threads
  • JVM Heap memory usage
  • JVM Non-Heap memory usage
  • JVM Open File Descriptors
  • JVM Garbage Collection Count

Cassandra

  • Storage Load: The amount of data stored on each Cassandra node.
  • Pending Tasks: The number of basic task stages waiting to run.
  • Active Tasks: The number of basic task stages currently running.
  • Blocked Tasks: The number of basic task stages blocked from running.
  • Pending Internal Tasks: The number of internal task stages waiting to run.
  • Active Internal Tasks: The number of internal task stages currently running.
  • Cassandra Pending Compactions
  • Cassandra Pending CommitLog

MongoDB Plugin

1.MongoDB 설치와 시작

< Debian 8 >

$ sudo apt-get install mongodb

< CentOS 7 >

$ sudo yum install mongodb-server mongodb
$ sudo systemctl start mongod

2.사전 준비

모니터링을 위해 clusterMonitor Role를 가진 유저를 admin database에 생성해준다. db.auth 명령어에서 “1”이 나오면 정상으로 인증에 성공한 것이다.

< Debian 8 >

$ mongo
> use admin
> show users;
> db.addUser("stackuser","stack1234","clusterMonitor");
> db.auth("stackuser","stack1234");
1
> exit

< CentOS 7 >

$ mongo
> use admin
> show users;
> db.createUser( { user: "stackuser", pwd: "stack1234", roles: ["clusterMonitor"] } )
> db.auth("stackuser","stack1234");
1
> exit

3.Plugin 설치

$ cd /opt/stackdriver/collectd/etc/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/mongodb.conf

mongodb.conf 파일을 열어 STATS_USER, STATS_PASS 의 주석처리(“#”)을 지워주고, 앞에서 생성한 유저의 ID와 Password로 바꿔준다.

4.Stackdriver Agent 재시작

< Debian 8 >

$ sudo service stackdriver-agent restart

< CentOS 7 >

$ sudo systemctl restart stackdriver-agent

5.Monitoring 확인

Monitoring -> Resources -> Instances

각 서버를 클릭해보자. stackdriver agent가 plugin이 정상으로 동작하여 정보를 제대로 가져온다면 Monitoring의 오른쪽 그래프 윗부분에서 다음과 같은 화면을 볼 수 있다.

stackdriver-2-image04

[ 출처: Flickr, gongjak1 ]

6.현재 모니터링 가능한 항목

  • Current Connections (count): The number of active connections to MongoDB.
  • Global Lock Hold Time (ms): How long the global lock has been held.
  • Mapped Memory (bytes): The amount of mapped memory used by MongoDB. This is roughly equivalent to the total size of your database, due to the use of memory mapped files.
  • Virtual Memory (bytes): The amount of virtual memory used by MongoDB. If the virtual memory size is significantly larger than mapped memory size (e.g. 3 or more times), this may indicate a memory leak.
  • Resident Memory (bytes): The amount of resident memory that is used by MongoDB. This is the amount of RAM being physically used by the database.
  • Operations [command, delete, getmore, insert, query, update] (count/s): The number of [command, delete, getmore, insert, query, update] operations executed per second.
  • Database [Collection, Index, Object, Extents] Count (count): The number of [collections, indices, objects, extents] currently in the database.
  • Database Data Size (bytes): The size of the data currently in the database.
  • Database Storage Size (bytes): The size of the storage currently allocated to the database.
  • Database Index Size (bytes): The size of the index for the database.

MySQL Plugin

1.MySQL 설치와 시작

< Debian 8 >

$ sudo apt-get install mysql-server

< CentOS 7 >

$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
$ sudo yum update
$ sudo yum install mysql-server
$ sudo systemctl start mysqld

2.사전 준비

모니터링을 위해 DB 사용자를 추가해줘야 한다. ID와 Password는 반드시 수정해서 입력하길 바란다.

< CentOS 7 >

$ mysql -u root -p

< CentOS 7 >

$ mysql -u root

mysql> GRANT SELECT, SHOW DATABASES
ON *.*
TO 'stackdriver'@'localhost'
IDENTIFIED BY 'password';

3.Plugin 설치

$ cd /opt/stackdriver/collectd/etc/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/mysql.conf

다은 받은 파일을 열어서 “STATS_USER”, “STATS_PASS” 를 모니터링을 위해 추가한 DB 사용자 정보로 바꿔준다.

4.Stackdriver Agent 재시작

< Debian 8 >

$ sudo service stackdriver-agent restart

< CentOS 7 >

$ sudo systemctl restart stackdriver-agent

5.Monitoring 확인

Monitoring -> Resources -> Instances

각 서버를 클릭해보자. stackdriver agent가 plugin이 정상으로 동작하여 정보를 제대로 가져온다면 Monitoring의 오른쪽 그래프 윗부분에서 다음과 같은 화면을 볼 수 있다.

stackdriver-2-image06

[ 출처: Flickr, gongjak1 ]

6.현재 모니터링 가능한 항목

  • Connections (count): The number of active connections to MySQL.
  • Select Queries (count): The number of select queries being run.
  • Insert Queries (count): The number of insert queries being run.
  • Update Queries (count): The number of update queries being run.
  • Slave replication lag

Nginx Plugin

1.Nginx 설치와 시작

< Debian 8 >

$ sudo apt-get install nginx

< CentOS 7 >

$ sudo yum install epel-release
$ sudo yum install nginx
$ sudo systemctl start nginx

2.사전 준비

$ cd /etc/nginx/conf.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/nginx/conf.d/status.conf

3.Plugin 설치

$ cd /opt/stackdriver/collectd/etc/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/nginx.conf

4.Stackdriver Agent 재시작

< Debian 8 >

$ sudo service stackdriver-agent restart

< CentOS 7 >

$ sudo systemctl restart stackdriver-agent

5.Monitoring 확인

Monitoring -> Resources -> Instances

각 서버를 클릭해보자. stackdriver agent가 plugin이 정상으로 동작하여 정보를 제대로 가져온다면 Monitoring의 오른쪽 그래프 윗부분에서 다음과 같은 화면을 볼 수 있다.

stackdriver-2-image12

[ 출처: Flickr, gongjak1 ]

6.현재 모니터링 가능한 항목

  • Active Connections (count): The number of active connections currently attached to Nginx.
  • Reading Connections (count): The number of reading connections currently attached to Nginx.
  • Writing Connections (count): The number of writing connections currently attached to Nginx.
  • Waiting Connections (count): The number of waiting connections currently attached to Nginx.
  • Requests (count/s): The number of requests per second Nginx is servicing.

PostgreSQL Plugin

1.PostgreSQL 설치와 시작

< Debian 8 >

$ sudo apt-get install postgresql

< CentOS 7 >

$ sudo yum install postgresql-server postgresql-contrib
$ sudo postgresql-setup initdb
$ sudo systemctl start postgresql

2.사전 준비

모니터링을 위해 DB 사용자를 추가해줘야 한다. ID와 Password는 반드시 수정해서 입력하길 바란다.

$ sudo su - postgres
$ psql
postgres=# CREATE ROLE stackuser LOGIN PASSWORD ‘stack1234’ SUPERUSER;
postgres=# \q

pg_hba.conf 파일에 앞에 생성한 stackdriver 유저로 접근할 수 있도록 접근 권한을 줘야 한다. 다음 내용을 추가해준다.

< Debian 8 >

/etc/postgresql/9.4/main/pg_hba.conf

host all stackuser 127.0.0.1/32 md5

< CentOS 7 >

/var/lib/pgsql/data/pg_hba.conf

host all stackuser ::1/128 md5
host all stackuser 127.0.0.1/32 md5

postgresql 서버를 재기동 한 후, 잘 접속 되는지 확인해본다.

$ psql -U stackuser -W -h localhost -d postgres

3.Plugin 설치

$ cd /opt/stackdriver/collectd/etc/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/postgresql.conf

postgresql.conf 파일을 열어서 다음 내용으로 수정해준다.

DATABASE_NAME ==> postgres
#Host "localhost" ==> Host "localhost"
STATS_USER ==> stackuser
STATS_PASS ==> stack1234

4.Stackdriver Agent 재시작

< Debian 8 >

$ sudo service stackdriver-agent restart

< CentOS 7 >

$ sudo systemctl restart stackdriver-agent

5.Monitoring 확인

Monitoring -> Resources -> Instances

각 서버를 클릭해보자. stackdriver agent가 plugin이 정상으로 동작하여 정보를 제대로 가져온다면 Monitoring의 오른쪽 그래프 윗부분에서 다음과 같은 화면을 볼 수 있다.

stackdriver-2-image00

[ 출처: Flickr, gongjak1 ]

6.현재 모니터링 가능한 항목

  • Connections (count): Number of connections to PostgreSQL.
  • Disk Usage (byte): Number of bytes currently being used on disk.
  • Commits (count/s): Number of commits per second.
  • Rollbacks (count/s): Number of rollbacks per second.
  • Heap Blocks Read Rate (count/s): Number of blocks read from the heap.
  • Heap Cache Hit Rate (count/s): Number of blocks read directly out of the cache.
  • Index Blocks Read Rate (count/s): Number of blocks read from the index.
  • Index Cache Hit Rate (count/s): Number of index blocks read directly out of the cache.
  • Toast Blocks Read Rate (count/s): Number of reads from the toast blocks.
  • Toast Cache Hit Rate (count/s): Number of toast blocks read directly out of the cache.
  • Toast Index Blocks Read Rate (count/s): Number of blocks read from the toast index.
  • Toast Index Cache Hit Rate (count/s): Number of toast index blocks read directly out of the cache.
  • Operations [delete, insert, update, heap only update] (count/s): Number of rows [deleted, inserted, updated, heap only updated] in the db.
  • Dead Tuples (count): Number of tuples that are dead in the db.
  • Live Tuples (count): Number of tuples that are live in the db.

Redis Plugin

1.Redis 설치와 시작

< Debian 8 >

$ sudo apt-get install redis-server

< CentOS 7 >

$ sudo yum install redis
$ sudo systemctl start redis

2.사전 준비

< Debian 8 >

$ sudo apt-get install libhiredis0.10

< CentOS 7 >

$ sudo yum install hiredis

3.Plugin 설치

$ cd /opt/stackdriver/collectd/etc/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/redis.conf

4.Stackdriver Agent 재시작

< Debian 8 >

$ sudo service stackdriver-agent restart

< CentOS 7 >

$ sudo systemctl restart stackdriver-agent

5.Monitoring 확인

Monitoring -> Resources -> Instances

각 서버를 클릭해보자. stackdriver agent가 plugin이 정상으로 동작하여 정보를 제대로 가져온다면 Monitoring의 오른쪽 그래프 윗부분에서 다음과 같은 화면을 볼 수 있다.

stackdriver-2-image09

[ 출처: Flickr, gongjak1 ]

6.현재 모니터링 가능한 항목

  • Client Connections (count): Number of clients connected to Redis.
  • Slave Connections (count): Number of Redis slave connections to the master.
  • Memory Usage (bytes): Amount of physical memory being used.

Tomcat Monitoring

1.Tomcat 설치와 시작

< Debian 8 >

$ sudo apt-get install tomcat7

< CentOS 7 >

$ sudo yum install tomcat
$ sudo systemctl start tomcat

2.사전 준비

JMX 모니터링을 사용하기 위해 catalina-jmx-remote.jar 파일을 설치해줘야 하는데, Debian 8 은 tomcat7을 설치하면 함께 설치가 되나 CentOS 7 은 직접 설치해줘야 한다.

< Debian 8 >

다음 내용으로 /usr/share/tomcat7/bin/setenv.sh 파일을 만든다.

$ sudo vi /usr/share/tomcat7/bin/setenv.sh
#!/bin/sh
JMX_OPTS=" -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=localhost \
-Dcom.sun.management.jmxremote.ssl=false "
CATALINA_OPTS=" ${JMX_OPTS} ${CATALINA_OPTS}"

/etc/tomcat7/server.xml 파일을 열고 Server 항목에 다음 Listener를 추가한다.