AWS Multi-Account Multi-Region Observability 위한 Steampipe + Grafana활용하기

Paul
Spoonlabs
Published in
11 min readOct 17, 2023

안녕하세요 스푼라디오에서 SRE 팀에서 DevOps업무를 담당하고 있는 Paul(백영진)이라고 합니다.

SRE팀은 지난 3년 동안 AWS Multi-Account Multi-Region에서 서비스의 Observability 확보하기 위해 다양한 오픈소스 및 상용 솔류션을 검토 하였으며, Datadog 활용하여 통합된 서비스 Observability 확보해 나갔습니다.

하지만 AWS의 Multi-Account Multi-Region 에서 사용되는 다양한 리소스에 대한 Observability 확보하기에 몇 가지 문제점이 있었습니다. 그래서 오픈소스인 Steampipe 도입하기로 결정했고, 다음과 같은 이점을 가져올 수 있습니다

  1. 비용 효율성: 15 개 AWS Account 및 Multi-Region의 모든 리소스에 대한 Observability를 위해 상용 서비스를 활용하는 것은 비용 한계가 있었습니다. Steampipe는 오픈 소스로 무료로 사용 가능하여 상용 서비스보다 비용을 절감할 수 있습니다.
  2. AWS 비용 최적화와 보안 심사(ISMS-P) 분석: Steampipe를 사용하면 Multi-Account Multi-Region별로 상세한 AWS 리소스 정보를 쉽게 쿼리할 수 있습니다. AWS 비용 최적화와 보안 심사를 위해 필요한 리소스 정보를 쉽게 수집하여 분석할 수 있습니다.
  3. 팀원 간 통일된 리소스 검색 방법: Steampipe를 팀 내 모든 구성원이 사용하게 되면, 각자 다른 방법(AWS CLI, AWS SDK, etc)으로 AWS 리소스를 검색하는 문제가 해결됩니다. Steampipe는 SQL 기반 쿼리를 사용하므로 팀원들이 동일한 쿼리 언어를 사용하여 일관된 방법으로 데이터를 조회 및 공유할 수 있습니다.

1. Steampipe 란 무엇인가?

Steampipe Architecture

Steampipe는 CLI(Command Line Interface) 기반의 SQL 쿼리 엔진으로, 다양한 클라우드 인프라 및 서비스에서 데이터를 쿼리하고 분석하는 데 도움이 되는 오픈 소스 도구입니다.

Steampipe는 플러그인 기반 아키텍처를 제공하여 200개 이상의 데이터 소스를 검색할 수 있습니다. 이를 통해 다양한 클라우드 제공 업체와 플랫폼에 대한 플러그인을 활용하여 리소스에 대한 쿼리를 통합적으로 수행할 수 있습니다. 예를 들어 AWS, GCP, Azure 등과 같은 클라우드 제공 업체의 데이터 소스에 쉽게 접근할 수 있습니다.

SQL for querying with Steampipe(https://steampipe.io/)

Steampipe 설치 및 튜토리얼에 대한 자세한 내용은 Steampipe 공식 웹사이트(steampipe.io) 또는 GitHub 페이지에서 확인하실 수 있습니다.

2. AWS Multi-Account 에서 Steampipe 구성

Cross Account with Assume Role

SpoonRadio 서비스는 AWS 15 개 Account 및 Multi-Region 구성이 되어 있습니다. Steampipe는 AWS의 Assume Role 기능을 지원하여 Cross Account의 리소스에 접근할 수 있도록 도와줍니다. Steampipe CLI에서 해당 Role을 활용하여 AWS 리소스에 접근하고 쿼리할 수 있습니다.

Multiple AWS Accounts on Steampipe 설정

AWS Configure and Steampipe Configure

Steampipe를 사용하여 AWS의 Multi-Account Multi-Region 구성에 위해 AWS CLI를 사용하여 .aws 디렉터리에 프로파일을 설정하고, Multi-Account에 대한 Assume Role도 설정해야 합니다. 아래와 같이 steampipe에서 어그리게이터를 쿼리할 수 있습니다.

Steampipe Query

어그리게이터(Aggreators) 쿼리하기

Steampipe를 사용하면, 어그리게이터(Aggreators) 연결을 통해 여러 연결의 데이터를 쿼리하거나 검색할 수 있습니다. 어그리게이터를 사용하면 여러 AWS 계정의 데이터를 하나의 연결인 것처럼 쿼리할 수 있습니다. 예를 들어, 여러 AWS 계정에서 데이터를 쉽게 조회할 수 있는 테이블을 어그리게이터를 이용하여 생성할 수 있습니다.

Steampipe aggregator bundles multiple connections

3. Grafana + Steampipe 활용한 대시보드 구성

Connect to Turbot Pipes from Grafana

Steampipe CLI를 사용하면 데이터를 터미널에서 쉽게 확인할 수 있으며, 대시보드를 통해 데이터를 시각화하는 장점을 제공합니다. 대시보드는 HCL-HashiCorp Configuration Language로 작성되어 Mods를 통해 유연하게 구성할 수 있습니다. 하지만 더욱 편리하게 데이터를 검색하기 위해 SQL 쿼리를 몰라도 쉽게 데이터를 검색 하고 대시 보드를 생성할 수 있도록 Grfana를 적용하기도 했습니다.

Grafana는 다양한 데이터 소스로부터 데이터를 수집하고 시각적으로 표현하는데 사용되는 오픈 소스 도구입니다. Grafana는 “Steampipe”라는 특정 데이터 소스를 지원하지 않습니다. 대신, Grafana에서는 Steampipe에 연결하기 위해 “PostgreSQL” 데이터 소스를 사용할 수 있습니다.

Grafana Datasource 에서 Steampipe 연동하기

steampipe service start --show-password 명령을 실행하면 Steampipe 서비스가 시작되고, Grafana를 구성하는 데 필요한 Connection 세부 정보가 표시됩니다.

Steampipe service is running:
Database:
Host(s): localhost, 127.0.0.1, 192.168.29.204
Port: 9193
Database: steampipe
User: steampipe
Password: 99**_****_**8c
Connection string: postgres://steampipe:99**_****_**8c@localhost:9193/steampipe

Steampipe Connection 정보를 기반으로 Grfana PostgreSQL Datasource를 설정합니다.

Grafana Data Source

Datasource 연결이 잘되었는지 확인을 하기 위해서 Grafana Explore 에서 Datasource 설정 하고 Query 실행 후 결과를 확인할 수 있습니다.

SQL Query(https://hub.steampipe.io/mods/turbot/aws_insights/queries/ec2_instance_age_table)

4. Multi Steampipe와 Grafana Multi Datasource 활용한 성능 최적화

Multi Steampipe & Mult Datasource

AWS의 Multi-Account Multi-Region 환경에서 Single Steampipe를 사용하여 어그리게이터 연결하면, 여러 연결의 데이터를 하나로 통합하여 쿼리할 수 있지만, 데이터 양이 많고 복잡한 경우 성능이 저하될 수 있습니다.

이를 개선하고 성능을 향상 시키기 위해 Multi Steampipe 구성을 사용하는 것이 좋습니다. 여러 개의 Steampipe 인스턴스를 구성하여 데이터를 분산 시키고 병렬로 처리할 수 있습니다. 각 Steampipe 인스턴스는 독립적으로 데이터를 쿼리하고, 이를 Grafana의 Multi Datasource로 구성하여 데이터를 하나의 대시 보드에서 통합하여 구성을 할 수 있습니다.

Grafana Datasource

Grafana DataSource 타입을 Mixed 설정 후 Query 에서 DataSource을 선택 후 쿼리를 합니다.

Grafana Data Source Mixed

이렇게 구성하면 쿼리가 분산되어 성능이 향상되며, 데이터 양과 복잡성에 따라 적절한 수의 Steampipe 인스턴스를 구성하여 최적화할 수 있습니다.

Grafana Dashboard Example

5. Steampipe 실 적용 사례

AWS에서 퍼블릭(Public) IPv4 주소에 대한 새로운 요금 정책이 도입되었습니다. 2024년 2월 1일부터, 모든 퍼블릭 IPv4 주소에 대해 서비스 연결 여부와 상관없이 시간당 IP당 0.005 USD의 요금이 부과됩니다. 이에 따라 각 AWS 계정에서 퍼블릭(Public) IPv4 주소를 사용하는 여부를 확인해야 했습니다.

AWS에서는 Public IP Insights 기능을 제공하지만, 이 기능은 해당 계정의 정보만을 표시하므로 다수의 계정을 보유한 경우 각 계정마다 별도로 계산해야 했습니다. 그래서 Steampipe을 활용하여 모든 계정에서 퍼블릭(Public) IPv4 주소를 집계하고, 어떤 계정에서 가장 많은 퍼블릭(Public) IPv4 주소를 사용하고 있는지, 그리고 이로 인한 비용이 어떻게 발생 하는지를 손쉽게 파악할 수 있었습니다.

AWS Network Interface 대시보드

마무리하며

Steampipe를 도입함으로써 AWS의 Multi-Account Multi-Region에서 리소스Observability를 향상시키고, 운영 비용을 절감하며, 리소스 검색과 분석의 효율성을 향상 시킬 수 있었습니다. 또한 통일된 리소스 검색 방법으로 AWS의 다양한 리소스에 대한 상세한 정보를 손쉽게 얻을 수 있어 보다 정확한 비용 최적화와 보안 심사를 위한 데이터를 확보할 수 있었습니다.

참고사이트

--

--