웹사이트 검색

Ubuntu 14.04 서버에서 Graphite를 설치하고 사용하는 방법


소개

시스템 및 애플리케이션에 대한 정보를 수집하면 인프라, 서버 및 소프트웨어에 대해 현명한 결정을 내리는 데 필요한 정보를 얻을 수 있습니다.

이러한 종류의 정보를 수집하고 쉽게 이해할 수 있는 방식으로 표시하는 방법에는 여러 가지가 있습니다. 이러한 응용 프로그램 중 하나는 Graphite입니다.

Graphite는 시스템에서 수집한 데이터의 시각적 표현을 구성하고 렌더링하기 위한 훌륭한 도구입니다. 매우 유연하며 추적 중인 메트릭의 성능 및 상태에 대한 자세한 표현과 광범위한 개요의 이점을 모두 얻을 수 있도록 구성할 수 있습니다.

이전 가이드에서는 Statsd를 살펴보았습니다.

흑연 설치

시작하려면 Graphite 구성 요소를 다운로드하고 설치해야 합니다. 그래프 작성 소프트웨어에 대한 소개를 보면 Graphite가 웹 애플리케이션, Carbon이라는 스토리지 백엔드, Whisper라는 데이터베이스 라이브러리 등 여러 구성 요소로 구성되어 있음을 알 수 있습니다.

흑연은 설치하기가 상당히 어려웠습니다. 운 좋게도 Ubuntu 14.04에서는 필요한 모든 구성 요소를 기본 리포지토리에서 찾을 수 있습니다.

로컬 패키지 인덱스를 업데이트한 다음 필요한 패키지를 설치해 보겠습니다.

sudo apt-get update
sudo apt-get install graphite-web graphite-carbon

설치 중에 설치를 제거하기로 결정한 경우 Carbon이 데이터베이스 파일을 제거하기를 원하는지 묻는 메시지가 나타납니다. 여기에서 "아니오\를 선택하면 통계가 삭제되지 않습니다. 새로 시작해야 하는 경우 언제든지 파일을 수동으로 제거할 수 있습니다(var/lib/graphite/whisper에 보관).

설치가 완료되면 Graphite가 설치됩니다. 모든 것을 시작하고 실행하려면 몇 가지 추가 구성을 수행해야 합니다.

Django용 데이터베이스 구성

Graphite 데이터 자체는 Carbon과 귓속말 데이터베이스 라이브러리에 의해 처리되지만 웹 애플리케이션은 Django Python 애플리케이션이며 데이터를 어딘가에 저장해야 합니다.

기본적으로 이것은 SQLite3 데이터베이스 파일을 사용하도록 구성됩니다. 그러나 이들은 완전한 기능을 갖춘 관계형 데이터베이스 관리 시스템만큼 강력하지 않으므로 대신 PostgreSQL을 사용하도록 앱을 구성할 것입니다. PostgreSQL은 데이터 유형 지정이 훨씬 더 엄격하며 앞으로 문제를 일으킬 수 있는 예외를 포착합니다.

PostgreSQL 구성 요소 설치

다음을 입력하여 필요한 데이터베이스 소프트웨어와 도우미 패키지를 설치할 수 있습니다.

sudo apt-get install postgresql libpq-dev python-psycopg2

이렇게 하면 데이터베이스 소프트웨어와 Graphite가 데이터베이스에 연결하고 통신하는 데 사용할 Python 라이브러리가 설치됩니다.

데이터베이스 사용자 및 데이터베이스 생성

데이터베이스 소프트웨어를 설치한 후 PostgreSQL 사용자와 Graphite가 사용할 데이터베이스를 생성해야 합니다.

postgres 시스템 사용자로 psql 명령을 사용하여 대화형 PostgreSQL 프롬프트에 로그인할 수 있습니다.

sudo -u postgres psql

이제 Django가 데이터베이스에서 작업하는 데 사용할 데이터베이스 사용자 계정을 생성해야 합니다. 사용자를 graphite라고 부르겠습니다. 이 사용자의 보안 암호 선택:

<예비>

이제 데이터베이스를 생성하고 새 사용자에게 소유권을 부여할 수 있습니다. 우리는 데이터베이스 graphite를 호출하여 이들의 연관성을 쉽게 인식할 수 있도록 할 것입니다.

CREATE DATABASE graphite WITH OWNER graphite;

완료되면 PostgreSQL 세션을 종료할 수 있습니다.

\q

Postgres가 파일 기록을 저장할 수 없다는 메시지가 표시될 수 있습니다. 이것은 우리에게 문제가 아니므로 계속할 수 있습니다.

Graphite 웹 애플리케이션 구성

이제 데이터베이스와 사용자가 준비되었습니다. 그러나 방금 구성한 구성 요소를 사용하려면 여전히 Graphite의 설정을 수정해야 합니다. 우리가 살펴봐야 할 몇 가지 다른 설정도 있습니다.

Graphite 웹 앱 구성 파일을 엽니다.

sudo nano /etc/graphite/local_settings.py

먼저 해시를 생성할 때 솔트로 사용할 비밀 키를 설정해야 합니다. SECRET_KEY 매개변수의 주석을 제거하고 값을 길고 고유한 값으로 변경합니다.

<예비>

다음으로 시간대를 지정해야 합니다. 이는 그래프에 표시되는 시간에 영향을 미치므로 설정하는 것이 중요합니다. 이 목록의 "TZ\ 열에 지정된 대로 시간대를 설정하십시오.

<예비>

또한 그래프 데이터 저장을 위한 인증을 구성하려고 합니다. 데이터베이스를 동기화하면 사용자 계정을 생성할 수 있지만 다음 행의 주석을 제거하여 인증을 활성화해야 합니다.

USE_REMOTE_USER_AUTHENTICATION = True

다음으로 DATABASES 사전 정의를 찾습니다. Postgres 정보를 반영하도록 값을 변경하려고 합니다. NAME, ENGINE, USER, PASSWORDHOST 키를 변경해야 합니다. .

완료되면 다음과 같이 표시됩니다.

<예비>

빨간색 영역은 변경해야 하는 값입니다. Postgres에서 graphite 사용자에 대해 선택한 암호로 암호를 수정해야 합니다.

또한 HOST 매개변수를 설정했는지 확인하십시오. 이 항목을 비워 두면 Postgres는 사용자가 피어 인증을 사용하여 연결을 시도하고 있다고 생각할 것입니다. 이 경우에는 올바르게 인증되지 않습니다.

완료되면 파일을 저장하고 닫습니다.

데이터베이스 동기화

이제 데이터베이스 섹션을 채웠으므로 데이터베이스를 동기화하여 올바른 구조를 만들 수 있습니다.

다음을 입력하면 됩니다.

sudo graphite-manage syncdb

데이터베이스에 대한 수퍼유저 계정을 생성하라는 메시지가 표시됩니다. 인터페이스에 로그인할 수 있도록 새 사용자를 만듭니다. 원하는대로 부를 수 있습니다. 이렇게 하면 그래프를 저장하고 인터페이스를 수정할 수 있습니다.

탄소 구성

이제 데이터베이스가 있으므로 Graphite 스토리지 백엔드인 Carbon 구성을 시작할 수 있습니다.

먼저 탄소 서비스가 부팅 시 시작되도록 활성화합시다. 서비스 구성 파일을 열어 이를 수행할 수 있습니다.

sudo nano /etc/default/graphite-carbon

여기에는 서비스가 부팅 시 시작될지 여부를 나타내는 하나의 매개변수만 있습니다. 값을 "true\로 변경합니다.

    CARBON_CACHE_ENABLED=true

파일을 저장하고 닫습니다.

다음으로 Carbon 구성 파일을 엽니다.

sudo nano /etc/carbon/carbon.conf

이 파일의 대부분은 이미 목적에 맞게 올바르게 구성되어 있습니다. 그러나 우리는 작은 변화를 만들 것입니다.

이 지시문을 true로 설정하여 로그 회전을 켭니다.

ENABLE_LOGROTATION = True

파일을 저장하고 닫습니다.

스토리지 스키마 구성

이제 스토리지 스키마 파일을 엽니다. 이는 Carbon에게 값을 저장하는 기간과 이러한 값이 얼마나 상세해야 하는지 알려줍니다.

sudo nano /etc/carbon/storage-schemas.conf

내부에는 다음과 같은 항목이 있습니다.

<예비>

[default_1min_for_1day]

파일에는 현재 두 개의 섹션이 정의되어 있습니다. 첫 번째는 Carbon 자체에서 오는 데이터로 무엇을 할지 결정하는 것입니다. Carbon은 실제로 자체 성능의 일부 메트릭을 저장하도록 구성됩니다. 하단 정의는 다른 섹션과 일치하지 않는 모든 데이터에 적용하도록 설계된 포괄적인 정의입니다. 기본 정책을 정의합니다.

괄호 안의 단어는 새 정의를 정의하는 데 사용되는 섹션 헤더입니다. 각 섹션 아래에는 패턴 정의와 보존 정책이 있습니다.

패턴 정의는 Carbon에 전송된 모든 정보를 일치시키는 데 사용되는 정규식입니다. Carbon으로 전송되는 정보에는 이것이 확인하는 지표 이름이 포함됩니다. 첫 번째 예에서 패턴은 문제의 지표가 "carbon.” 문자열로 시작하는지 여부를 확인합니다.

보존 정책은 일련의 숫자로 정의됩니다. 각 세트는 메트릭 간격(메트릭이 기록되는 빈도), 콜론, 해당 값을 저장할 시간으로 구성됩니다. 쉼표로 구분된 여러 숫자 집합을 정의할 수 있습니다.

시연을 위해 나중에 사용할 테스트 값과 일치하는 새 스키마를 정의합니다.

기본 섹션 앞에 테스트 값에 대한 다른 섹션을 추가합니다. 다음과 같이 만드십시오.

<예비>

이것은 "test.”로 시작하는 모든 메트릭과 일치합니다. 수집한 데이터를 다양한 세부 정보로 세 번 저장합니다. 첫 번째 아카이브 정의(10s:10m) 10초마다 데이터 포인트를 생성하고 10분 동안만 값을 저장합니다.

두 번째 아카이브(1m:1h)는 1분마다 데이터 포인트를 생성합니다. 지난 1분 동안의 모든 데이터(이전 아카이브가 10초마다 포인트를 생성하므로 6개 포인트)를 수집하고 집계하여 포인트를 생성합니다. 기본적으로 포인트를 평균화하여 이를 수행하지만 나중에 조정할 수 있습니다. 한 시간 동안 이 세부 수준으로 데이터를 저장합니다.

생성될 마지막 아카이브(10m:1d)는 10분마다 데이터 포인트를 만들고 두 번째 아카이브와 동일한 방식으로 데이터를 집계합니다. 하루 동안 데이터를 저장합니다.

Graphite에서 정보를 요청하면 요청하는 시간 프레임을 측정하는 가장 상세한 아카이브에서 정보를 반환합니다. 따라서 지난 5분 동안의 메트릭을 요청하면 첫 번째 아카이브의 정보가 반환됩니다. 지난 50분의 그래프를 요청하면 두 번째 아카이브에서 데이터를 가져옵니다.

완료되면 파일을 저장하고 닫습니다.

스토리지 집계 방법 정보

보다 자세한 정보를 일반화된 숫자로 처리할 때 Carbon이 데이터를 집계하기로 결정하는 방식은 정확한 지표를 원하는지 이해하는 데 매우 중요합니다. 이는 위에서 생성한 테스트 스키마의 두 번째 및 세 번째 아카이브에서와 같이 Graphite가 메트릭의 덜 자세한 버전을 만들 때마다 적용됩니다.

위에서 언급했듯이 기본 동작은 집계할 때 평균을 취하는 것입니다. 이것은 가장 상세한 아카이브 외에 Carbon이 숫자를 생성하기 위해 수신한 데이터 포인트의 평균을 낼 것임을 의미합니다.

그러나 이것이 항상 바람직한 것은 아닙니다. 예를 들어, 다양한 기간 동안 이벤트가 발생한 총 횟수를 원하는 경우 데이터 포인트를 평균화하는 대신 일반화된 데이터 포인트를 생성하기 위해 더할 수 있습니다.

storage-aggregation.conf라는 파일에서 집계가 발생하는 방식을 정의할 수 있습니다. Carbon 예제 디렉토리에서 Carbon 구성 디렉토리로 파일을 복사하십시오.

sudo cp /usr/share/doc/graphite-carbon/examples/storage-aggregation.conf.example /etc/carbon/storage-aggregation.conf

텍스트 편집기에서 파일을 엽니다.

sudo nano /etc/carbon/storage-aggregation.conf

이것은 마지막 파일과 약간 비슷해 보입니다. 다음과 같은 항목을 찾을 수 있습니다.

<예비>

섹션 이름과 패턴은 storage-schemas 파일과 정확히 동일합니다. 정의하는 메트릭과 일치하는 임의의 이름과 패턴일 뿐입니다.

XFilesFactor는 Carbon이 집계를 수행해야 하는 값의 최소 비율을 지정할 수 있다는 점에서 흥미로운 매개변수입니다. 기본적으로 모든 값은 0.5로 설정됩니다. 즉, 집계된 포인트를 만들려면 더 자세한 데이터 포인트의 50%를 사용할 수 있어야 합니다.

이는 실제 상황을 잘못 나타낼 수 있는 데이터 포인트를 생성하지 않도록 하는 데 사용할 수 있습니다. 예를 들어 네트워크 문제로 인해 데이터의 70%가 삭제되는 경우 데이터의 30%만 나타내는 포인트를 만들고 싶지 않을 수 있습니다.

다음에 집계 방법이 정의됩니다. 가능한 값은 평균, 합계, 마지막, 최대 및 최소입니다. 그들은 상당히 자명하지만 매우 중요합니다. 잘못된 값을 선택하면 데이터가 잘못된 방식으로 기록됩니다. 올바른 선택은 실제로 추적하는 메트릭이 무엇인지에 따라 전적으로 달라집니다.

참고: 가장 짧은 아카이브 간격 길이보다 더 자주 Graphite 데이터 포인트를 보내면 일부 데이터가 손실된다는 점을 인식하는 것이 중요합니다!

Graphite는 상세 아카이브에서 일반화된 아카이브로 이동할 때만 집계를 적용하기 때문입니다. 상세 데이터 포인트를 생성할 때 간격이 지난 경우 가장 최근에 전송된 데이터만 기록합니다. 더 자주 들어오는 데이터를 캐싱하고 집계하여 이 문제를 완화하는 데 도움이 될 수 있는 다른 가이드에서 StatsD에 대해 논의할 것입니다.

파일을 저장하고 닫습니다.

완료되면 다음을 입력하여 Carbon을 시작할 수 있습니다.

sudo service carbon-cache start

Apache 설치 및 구성

웹 인터페이스를 사용하기 위해 Apache 웹 서버를 설치하고 구성할 것입니다. Graphite에는 Apache용 구성 파일이 포함되어 있으므로 선택이 매우 쉽습니다.

다음을 입력하여 구성 요소를 설치합니다.

sudo apt-get install apache2 libapache2-mod-wsgi

설치가 완료되면 새 파일과 충돌하므로 기본 가상 호스트 파일을 비활성화해야 합니다.

sudo a2dissite 000-default

다음으로 Graphite Apache 가상 호스트 파일을 사용 가능한 사이트 디렉터리에 복사합니다.

sudo cp /usr/share/graphite-web/apache2-graphite.conf /etc/apache2/sites-available

그런 다음 다음을 입력하여 가상 호스트 파일을 활성화할 수 있습니다.

sudo a2ensite apache2-graphite

변경 사항을 구현하기 위해 서비스를 다시 로드합니다.

sudo service apache2 reload

웹 인터페이스 확인

이제 모든 것이 구성되었으므로 웹 인터페이스를 확인할 수 있습니다.

웹 브라우저에서 서버의 도메인 이름 또는 IP 주소를 방문하십시오.

<예비>

다음과 같은 화면이 표시됩니다.

계속 진행하기 전에 로그인해야 그래프 설정을 저장할 수 있습니다. 상단 메뉴 바의 "로그인\ 버튼을 클릭하고 Django 데이터베이스를 동기화할 때 설정한 사용자 이름과 비밀번호를 입력합니다.

다음으로, 왼쪽 창에서 Graphite에 대한 트리를 열면 Carbon에 대한 항목이 표시되어야 합니다. 여기에서 Carbon이 자체적으로 기록한 데이터 그래프를 찾을 수 있습니다. 몇 가지 옵션을 클릭하십시오. 여기에서는 받은 측정항목과 업데이트 작업 측정항목을 그래프로 표시하고 있습니다.

이제 Graphite에 일부 데이터를 전송해 보겠습니다. 이러한 단계를 진행하면서 이와 같이 통계를 Graphite에 보내는 경우는 거의 없다는 점에 유의하십시오. 이 작업을 수행하는 훨씬 더 좋은 방법이 있지만 이것은 백그라운드에서 진행되는 작업을 보여주고 Graphite가 데이터를 처리하는 방식의 한계를 이해하는 데 도움이 될 것입니다. 나중에 컴패니언 서비스로 이러한 문제를 해결하는 방법에 대해 이야기하겠습니다.

메트릭 메시지에는 메트릭 이름, 값 및 타임스탬프가 포함되어야 합니다. 터미널에서 이 작업을 수행할 수 있습니다. 우리가 만든 test 스토리지 스키마와 일치하는 값을 만들어 봅시다. 또한 집계할 때 값을 더할 정의 중 하나를 일치시킵니다. date 명령을 사용하여 타임스탬프를 만듭니다. 유형:

echo "test.count 4 `date +%s`" | nc -q0 127.0.0.1 2003

페이지를 새로고침한 다음 왼쪽의 Graphite 트리를 보면 새로운 테스트 측정항목이 표시됩니다. 위 명령을 몇 번 전송하고 그 사이에 최소 10초를 기다립니다. Graphite는 가장 작은 간격으로 둘 이상의 값이 전송될 때 마지막 값을 제외한 모든 값을 던집니다.

이제 웹 인터페이스에서 Graphite에 지난 8분을 표시하도록 지시하십시오. 테스트 메트릭의 그래프에서 녹색 화살표가 있는 흰색 사각형 아이콘을 클릭합니다. 마우스를 가져가면 "최근 데이터 선택\이라고 표시됩니다.

팝업창에서 8분을 선택합니다. 최신 데이터를 가져오려면 \그래프 업데이트\라고 적힌 아이콘을 클릭하세요. 정보가 거의 없는 그래프를 볼 수 있습니다. 이는 각각 "4\인 몇 개의 값만 전송했기 때문입니다. 변형이 없습니다.

그러나 지난 15분의 그래프를 보면(명령을 여러 번 전송했다고 가정하고 간격이 10초 이상 1분 미만인 경우) 다른 내용이 표시되어야 합니다.

첫 번째 아카이브가 15분 동안 데이터를 저장하지 않기 때문에 Graphite는 렌더링 데이터를 위해 두 번째 아카이브를 찾습니다. 집계 정의 중 하나와 일치하는 "개수\ 메트릭을 Graphite에 보냈기 때문에 다르게 보입니다.

카운트 집계는 Graphite에 평균화 대신 더 큰 간격 동안 수신한 값을 더하도록 지시합니다. 보시다시피, 우리가 선택한 집계 방법은 더 자세한 포인트에서 일반화 데이터 포인트가 생성되는 방법을 정의하기 때문에 매우 중요합니다.

결론

이제 Graphite가 설치 및 설정되었지만 여전히 수행할 수 있는 작업이 상당히 제한되어 있습니다. 우리는 항상 수동으로 데이터를 공급하고 싶지 않으며 가장 작은 간격 내에 둘 이상의 메트릭이 있는 경우 데이터를 버리지 않기를 원합니다. 이러한 문제를 해결하는 데 도움이 되는 동반 도구가 필요합니다.

다음 가이드에서는 Graphite로 StatsD를 설정하는 방법과 Graphite 인터페이스를 보다 심층적으로 사용하는 방법에 대해 설명합니다.

저스틴 엘링우드