Elasticsearch에 데이터를 저장했다면, 이제 그 데이터를 눈으로 볼 차례다. Kibana는 Elasticsearch의 공식 시각화 플랫폼으로, 코드를 작성하지 않고 데이터를 탐색하고, 차트를 만들고, 대시보드를 구성할 수 있다.
Kibana 기본 구조
Kibana의 주요 기능은 네 가지 영역으로 나뉜다.
| 기능 | 설명 |
|---|---|
| Discover | 데이터 탐색과 검색 |
| Visualize / Lens | 차트와 그래프 생성 |
| Dashboard | 여러 시각화를 조합한 대시보드 |
| Dev Tools | Elasticsearch REST API 직접 실행 |
Data View (구 Index Pattern)
Kibana에서 데이터를 탐색하려면 먼저 Data View를 생성해야 한다. Elasticsearch 인덱스(또는 인덱스 패턴)를 Kibana에 연결하는 설정이다.
인덱스 패턴: logs-*
타임스탬프 필드: @timestamp
logs-*로 설정하면 logs-2026-02-10, logs-2026-02-11 등 패턴에 맞는 모든 인덱스의 데이터를 하나의 뷰에서 탐색할 수 있다.
Discover: 데이터 탐색
Discover는 Elasticsearch 데이터를 실시간으로 탐색하는 도구이다. 로그 분석과 디버깅의 출발점이다.
기본 탐색
Discover 화면의 구성:
┌─────────────────────────────────────────┐
│ [검색 바: KQL 또는 Lucene 쿼리] │
├─────────┬───────────────────────────────┤
│ 필드 │ 히스토그램 (시간별 문서 수) │
│ 목록 │───────────────────────────────│
│ │ 문서 목록 │
│ @timestamp│ { "level": "ERROR", ...} │
│ level │ { "level": "INFO", ...} │
│ message │ { "level": "WARN", ...} │
│ service │ ... │
└─────────┴───────────────────────────────┘
KQL (Kibana Query Language)
Discover에서 데이터를 필터링하는 쿼리 언어이다.
# 기본 검색
level: "ERROR"
# AND 조건
level: "ERROR" and service: "order-api"
# OR 조건
level: "ERROR" or level: "WARN"
# 와일드카드
message: "timeout*"
# 범위
response_time > 1000
# NOT
not level: "DEBUG"
# 중첩 필드
user.name: "kim"
필드 필터링
왼쪽 필드 목록에서 필드를 클릭하면 해당 필드의 상위 값 분포를 볼 수 있다. 특정 값을 클릭하여 바로 필터를 추가할 수 있다. + 버튼은 해당 값을 포함, - 버튼은 해당 값을 제외한다.
저장된 검색
자주 사용하는 검색 조건을 저장하여 재사용할 수 있다. 저장된 검색은 대시보드에도 임베드할 수 있다.
Lens: 시각화 생성
Lens는 Kibana의 핵심 시각화 도구이다. 드래그 앤 드롭으로 차트를 만들 수 있으며, 데이터에 맞는 시각화 유형을 자동으로 추천한다.
주요 시각화 유형
Bar Chart (막대 그래프): 카테고리별 비교에 적합하다.
설정 예시:
- X축: service.keyword (Terms)
- Y축: Count of records
- 분할: level.keyword
서비스별 로그 레벨 분포를 한눈에 파악할 수 있다.
Line Chart (선 그래프): 시간에 따른 추이를 보여준다.
설정 예시:
- X축: @timestamp (Date Histogram, 간격: 5분)
- Y축: Average of response_time
- 분할: service.keyword
시간대별 응답 시간 추이를 서비스별로 비교할 수 있다.
Pie Chart (원형 그래프): 비율 분포를 보여준다.
설정 예시:
- 슬라이스: status_code.keyword (Terms, 상위 5개)
- 크기: Count of records
Metric: 단일 숫자 값을 크게 표시한다.
설정 예시:
- 값: Unique count of user_id
- 라벨: "활성 사용자 수"
Data Table: 집계 결과를 테이블로 표시한다.
설정 예시:
- 행: service.keyword, level.keyword
- 값: Count, Average of response_time
Heatmap: 두 차원의 교차 밀도를 색상으로 표현한다.
설정 예시:
- X축: hour_of_day
- Y축: day_of_week
- 값: Count (색상 강도)
시간대별/요일별 트래픽 패턴을 파악할 수 있다.
Lens 사용 팁
- 필드를 중앙 영역에 드래그하면 자동으로 적절한 시각화가 추천된다
- 시각화 유형은 상단에서 언제든 변경할 수 있다
- Breakdown 기능으로 하나의 차트에 여러 시리즈를 추가한다
- 필터는 상단 필터 바에서 시각화별로 적용할 수 있다
Dashboard: 통합 뷰
대시보드 구성
여러 시각화를 하나의 화면에 배치하여 운영 대시보드를 만든다.
대시보드 구성 예시 (서비스 모니터링):
┌──────────────────────┬──────────────────────┐
│ 총 요청 수 (Metric) │ 에러율 (Metric) │
├──────────────────────┴──────────────────────┤
│ 시간별 요청 수 추이 (Line Chart) │
├─────────────────────────────────────────────┤
│ 서비스별 에러 비율 (Bar Chart) │
├──────────────────┬──────────────────────────┤
│ 상태코드 분포 │ 응답시간 상위 엔드포인트 │
│ (Pie Chart) │ (Data Table) │
└──────────────────┴──────────────────────────┘
대시보드 기능
시간 범위 선택: 상단의 타임피커로 전체 대시보드의 시간 범위를 일괄 변경한다. "Last 15 minutes", "Last 24 hours", 또는 커스텀 범위를 지정할 수 있다.
자동 새로고침: 10초, 30초, 1분 등 간격으로 대시보드를 자동 갱신한다. 실시간 모니터링에 필수이다.
필터 연동: 하나의 시각화에서 특정 값을 클릭하면, 해당 필터가 대시보드 전체에 적용된다. 예를 들어 에러 막대를 클릭하면 다른 모든 차트도 에러만 표시한다.
드릴다운: 차트에서 특정 데이터 포인트를 클릭하여 더 상세한 대시보드나 Discover 화면으로 이동할 수 있다.
실전: 로그 모니터링 대시보드
인덱스 구조
// 로그 문서 구조
{
"@timestamp": "2026-02-12T10:30:00.000Z",
"level": "ERROR",
"service": "order-api",
"message": "Connection timeout to database",
"response_time": 5023,
"status_code": 500,
"endpoint": "/api/orders",
"user_id": "user-123",
"trace_id": "abc-def-123"
}
핵심 시각화 구성
1. 에러율 게이지
시각화 유형: Metric
집계: Count where level: "ERROR" / Count of all * 100
라벨: "에러율 (%)"
임계값: > 5% 빨간색, > 1% 노란색
2. 서비스별 응답시간 백분위
시각화 유형: Line Chart
X축: @timestamp (5분 간격)
Y축: Percentile of response_time (p50, p95, p99)
분할: service.keyword
p50(중간값), p95, p99를 함께 보면 응답시간의 분포를 정확히 파악할 수 있다. p50은 정상인데 p99가 높다면 일부 요청에서만 지연이 발생하는 것이다.
3. 에러 로그 테이블
시각화 유형: Saved Search (Discover)
필터: level: "ERROR"
컬럼: @timestamp, service, message, trace_id
정렬: @timestamp 내림차순
에러 발생 시 trace_id로 전체 요청 흐름을 추적할 수 있다.
Dev Tools: API 직접 실행
Kibana의 Dev Tools > Console에서 Elasticsearch REST API를 직접 실행할 수 있다. 인덱스 관리, 매핑 확인, 쿼리 테스트에 유용하다.
// 인덱스 목록
GET _cat/indices?v
// 매핑 확인
GET /logs-*/_mapping
// 검색 쿼리 테스트
GET /logs-*/_search
{
"query": {
"bool": {
"must": [
{ "match": { "level": "ERROR" } },
{ "range": { "@timestamp": { "gte": "now-1h" } } }
]
}
},
"aggs": {
"by_service": {
"terms": { "field": "service.keyword" }
}
}
}
// 클러스터 상태
GET _cluster/health
// 노드 리소스
GET _cat/nodes?v
자동완성과 구문 강조를 지원하여 curl보다 편리하다.
Alerting: 알림 설정
Kibana는 조건 기반 알림(Alerting) 기능을 제공한다. 특정 조건이 충족되면 Slack, 이메일, PagerDuty 등으로 알림을 보낸다.
알림 규칙 예시
규칙: 에러율 급증 알림
조건: 최근 5분간 level: "ERROR" 비율이 10%를 초과
액션: Slack 채널 #alerts에 메시지 전송
빈도: 1분마다 체크, 알림 후 30분 쿨다운
규칙: 응답시간 저하 알림
조건: response_time의 p95가 3000ms를 초과
액션: PagerDuty 인시던트 생성
빈도: 5분마다 체크
알림은 대시보드 모니터링의 보완재이다. 사람이 대시보드를 24시간 지켜볼 수 없으므로, 이상 징후를 자동으로 감지하여 알려주는 것이 중요하다.
정리
- Discover는 데이터 탐색과 로그 검색의 출발점이며, KQL로 빠르게 필터링한다
- Lens는 드래그 앤 드롭으로 다양한 시각화를 생성하는 핵심 도구이다
- Dashboard는 여러 시각화를 조합하고, 필터 연동과 자동 새로고침으로 실시간 모니터링을 지원한다
- Dev Tools에서 Elasticsearch API를 직접 테스트하고 클러스터를 관리한다
- Alerting으로 이상 징후를 자동 감지하여 알림을 보낸다