Ansible로 Grafana Cloud 스택 만들고 관리하기
Ansible로 Grafana Cloud 스택 만들고 관리하기
이 문서에서는 Grafana용 Ansible 컬렉션을 사용해 Grafana Cloud 스택을 만들고 데이터 소스, 대시보드, 폴더를 추가하는 방법을 안내합니다. Ansible 플레이북으로 Grafana 인프라를 관리할 수 있어요.
출처: 문서
본문
이 가이드는 Grafana용 Ansible 컬렉션(Ansible Collection for Grafana)을 사용해 Grafana Cloud 스택을 만들고 데이터 소스, 대시보드, 폴더를 추가하는 방법을 보여줘요. Ansible 플레이북으로 Grafana 인프라를 관리하게 됩니다.
시작하기 전에
시작하기 전에 다음이 준비되어 있는지 확인하세요:
- Grafana Cloud 계정
- 머신에 설치된 Ansible
Grafana Ansible 컬렉션 설치하기
Grafana Ansible 컬렉션을 설치하세요:
ansible-galaxy collection install grafana.grafana
이 컬렉션은 Grafana Cloud 스택과 리소스를 관리하는 데 필요한 모든 모듈을 제공해요.
Cloud 스택 만들기
먼저 Grafana Cloud Access Policy를 만들고 토큰을 받으세요. 이 토큰은 Ansible 플레이북이 Grafana Cloud 스택을 만드는 데 필요해요. Create a Grafana Cloud Access Policy를 참고하세요.
다음으로 Ansible 플레이북 파일을 만드세요. 이 Ansible 플레이북은 Cloud stack 모듈을 사용해 Grafana Cloud 스택을 만들어요.
이렇게 하려면 cloud-stack.yml이라는 파일을 만들고 다음을 추가하세요:
- name: Create Grafana Cloud stack
connection: local
hosts: localhost
vars:
grafana_cloud_api_key: '<CLOUD_ACCESS_POLICY_TOKEN>'
stack_name: '<STACK_NAME>'
org_name: '<ORG_NAME>'
tasks:
- name: Create a Grafana Cloud stack
grafana.grafana.cloud_stack:
name: '{{ stack_name }}'
stack_slug: '{{ stack_name }}'
cloud_api_key: '{{ grafana_cloud_api_key }}'
org_slug: '{{ org_name }}'
delete_protection: true
state: present
register: stack_result
- name: Display stack URL
debug:
msg: 'Stack created at: {{ stack_result.url }}'
자리 표시자를 자신의 값으로 바꾸세요:
<CLOUD_ACCESS_POLICY_TOKEN>: Grafana Cloud 포털에서 만든 Cloud Access Policy의 토큰<STACK_NAME>: 스택 이름<ORG_NAME>: Grafana Cloud의 조직 이름
플레이북은 스택 생성 결과를 등록(register)하고 스택 URL을 표시해요. 이 URL은 이후 리소스 관리에 필요해요.
Grafana 스택에서 API 키 만들기
Grafana 스택에서 API 키를 만드세요. 이 키는 Ansible이 데이터 소스, 폴더, 대시보드를 만들도록 구성하는 데 필요해요.
- Grafana Cloud 인스턴스에 로그인하세요.
- Administration을 클릭하고 API keys를 선택하세요.
- Add API key를 클릭하세요.
- Key name에 API 키 이름을 입력하세요.
- Role에서 이 API 키와 연관할 Admin 또는 Editor 역할을 선택하세요.
- Copy를 클릭해 나중에 사용할 수 있도록 저장하세요.
플레이북으로 리소스 추가하기
데이터 소스 추가하기
다음 단계는 InfluxDB 데이터 소스를 사용해요. 필요한 인자는 선택한 데이터 소스 유형에 따라 달라져요.
data-source.yml 파일을 만드세요:
- name: Add/Update data source
connection: local
hosts: localhost
vars:
grafana_url: 'https://<STACK_NAME>.grafana.net'
grafana_api_key: '<GRAFANA_API_KEY>'
data_source_config:
name: '<DATA_SOURCE_NAME>'
type: 'influxdb'
url: '<DATA_SOURCE_URL>'
user: '<USERNAME>'
secureJsonData:
password: '<PASSWORD>'
database: '<DATABASE_NAME>'
uid: '<UID>'
access: 'proxy'
tasks:
- name: Create/Update Data source
grafana.grafana.datasource:
dataSource: '{{ data_source_config }}'
grafana_url: '{{ grafana_url }}'
grafana_api_key: '{{ grafana_api_key }}'
state: present
자리 표시자를 자신의 값으로 바꾸세요:
<DATA_SOURCE_NAME>: Grafana에 추가할 데이터 소스 이름<DATA_SOURCE_URL>: 데이터 소스 URL<USERNAME>: 데이터 소스 인증에 사용할 사용자 이름<PASSWORD>: 데이터 소스 인증에 사용할 비밀번호<DATABASE_NAME>: 데이터베이스 이름<UID>: Grafana에서 데이터 소스의 UID<STACK_NAME>: 스택 이름<GRAFANA_API_KEY>: Grafana 인스턴스에서 만든 API 키
폴더 추가하기
이 플레이북은 Folder 모듈을 사용해 Grafana 인스턴스에 폴더를 만들어요.
folder.yml 파일을 만드세요:
- name: Add/Update Folders
connection: local
hosts: localhost
vars:
grafana_url: 'https://<STACK_NAME>.grafana.net'
grafana_api_key: '<GRAFANA_API_KEY>'
folders:
- title: '<FOLDER_NAME>'
uid: '<UID>'
tasks:
- name: Create/Update a Folder in Grafana
grafana.grafana.folder:
title: '{{ item.title }}'
uid: '{{ item.uid }}'
grafana_url: '{{ grafana_url }}'
grafana_api_key: '{{ grafana_api_key }}'
state: present
loop: '{{ folders }}'
자리 표시자를 자신의 값으로 바꾸세요:
<FOLDER_NAME>: Grafana에 추가할 폴더 이름<UID>: Grafana에서 폴더의 UID<STACK_NAME>: 스택 이름<GRAFANA_API_KEY>: Grafana 인스턴스에서 만든 API 키
폴더에 대시보드 추가하기
이 플레이북은 dashboards_path에 참조된 폴더의 대시보드 JSON 소스 코드 파일을 순회하며 Dashboard 모듈을 사용해 Grafana 인스턴스에 추가해요.
dashboard.yml 파일을 만드세요:
- name: Add/Update Dashboards
connection: local
hosts: localhost
vars:
grafana_url: 'https://<STACK_NAME>.grafana.net'
grafana_api_key: '<GRAFANA_API_KEY>'
dashboards_path: '<PATH_TO_DASHBOARD_FILES>' # Example "./dashboards"
tasks:
- name: Find dashboard files
find:
paths: '{{ dashboards_path }}'
file_type: file
recurse: true
patterns: '*.json'
register: files_matched
no_log: true
- name: Create list of dashboard file names
set_fact:
dashboard_file_names: '{{ dashboard_file_names | default([]) + [item.path] }}'
loop: '{{ files_matched.files }}'
no_log: true
- name: Create/Update a dashboard
grafana.grafana.dashboard:
dashboard: "{{ lookup('ansible.builtin.file', item) }}"
grafana_url: '{{ grafana_url }}'
grafana_api_key: '{{ grafana_api_key }}'
state: present
loop: '{{ dashboard_file_names }}'
자리 표시자를 자신의 값으로 바꾸세요:
<PATH_TO_DASHBOARD_FILES>: 대시보드 JSON 소스 코드 파일이 있는 폴더 경로<STACK_NAME>: 스택 이름<GRAFANA_API_KEY>: Grafana 인스턴스에서 만든 API 키
Ansible 플레이북 실행하기
터미널에서 모든 Ansible 플레이북이 있는 디렉터리에서 다음 명령을 실행하세요.
Grafana Cloud 스택 만들기:
ansible-playbook cloud-stack.yml
Grafana 스택에 데이터 소스 추가하기:
ansible-playbook data-source.yml
Grafana 스택에 폴더 추가하기:
ansible-playbook folder.yml
Grafana 스택의 폴더에 대시보드 추가하기:
ansible-playbook dashboard.yml
구성 검증하기
Ansible 플레이북을 실행한 후 다음을 확인할 수 있어요:
- 새 Grafana Cloud 스택이 만들어져 Cloud Portal에 표시되는지.
- Grafana 스택에 새 데이터 소스(이 예제에서는 InfluxDB)가 표시되는지.
- Grafana 스택에 새 폴더가 있는지. 아래 이미지에서
Demos라는 이름의 폴더가 추가되었어요. - Grafana 스택에 새 대시보드가 표시되는지. 아래 이미지에서
InfluxDB Cloud Demos라는 이름의 대시보드가 "Demos" 폴더 안에 만들어졌어요.
다음 단계
Ansible을 사용해 데이터 소스, 폴더, 대시보드와 함께 Grafana Cloud 스택을 성공적으로 만들었어요. 이제 Grafana 인프라가 코드를 통해 관리됩니다.
Grafana를 인프라를 코드로 관리하는 방법을 더 배우려면:
- Grafana Ansible collection 문서
- Ansible 플레이북 모범 사례
- Grafana API 문서
- Grafana Cloud API 문서
- Terraform을 사용한 인프라를 코드로 관리하기