🔗 Elasticsearch의 다양한 시스템 연동 방식
Elasticsearch는 강력한 RESTful API 기반의 설계 덕분에 다양한 시스템과 쉽게 연동할 수 있습니다.
데이터 수집, 변환, 저장, 분석, 시각화를 위해 여러 도구와 통합할 수 있습니다.
🔹 다양한 시스템과 연동을 위한 핵심 기술
- RESTful API 기반의 연동
- 데이터 수집 도구(Logstash, Beats, Kafka)
- 데이터베이스(MySQL, PostgreSQL) 연동
- 애플리케이션(Spring Boot, Python) 연동
- 대시보드 및 시각화(Kibana, Grafana)
- 메시징 시스템(Kafka, RabbitMQ) 연동
- 클라우드 서비스(AWS, GCP, Azure) 연동
- 보안 및 인증(OAuth, API Key, X-Pack)
1️⃣ RESTful API 기반의 연동
Elasticsearch는 RESTful API를 제공하며, 다양한 프로그래밍 언어와 쉽게 통합할 수 있습니다.
✔ 데이터 저장 API (Indexing)
POST http://localhost:9200/my_index/_doc/1
Content-Type: application/json
{
"name": "Elasticsearch 연동 예제",
"type": "데이터 저장"
}
✔ 데이터 검색 API (Query)
GET http://localhost:9200/my_index/_search
Content-Type: application/json
{
"query": {
"match": { "name": "Elasticsearch" }
}
}
➡ Elasticsearch는 REST API를 통해 데이터를 저장, 검색, 삭제, 업데이트할 수 있으며, 다양한 시스템과 연동이 가능합니다.
2️⃣ 데이터 수집 도구 연동 (Logstash, Beats, Kafka)
Elasticsearch는 로그 데이터, 이벤트 스트리밍, 시스템 메트릭 등을 수집하는 여러 도구와 연동할 수 있습니다.
📌 Logstash 연동
Logstash는 다양한 데이터 소스(MySQL, 파일, Kafka 등)에서 데이터를 수집하여 변환 후 Elasticsearch로 저장할 수 있습니다.
✔ Logstash 설정 예제 (MySQL → Elasticsearch)
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://db_host:3306/mydb"
jdbc_user => "user"
jdbc_password => "password"
statement => "SELECT * FROM users"
schedule => "* * * * *" # 매 분마다 실행
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "users_index"
}
}
➡ MySQL 데이터를 실시간으로 Elasticsearch에 저장 가능
📌 Beats 연동
Beats는 경량 데이터 수집 에이전트로, 시스템 로그, 네트워크 트래픽 등을 수집하여 Elasticsearch로 전송할 수 있습니다.
✔ Filebeat 설정 예제 (로그 파일 → Elasticsearch)
filebeat.inputs:
- type: log
paths:
- /var/log/*.log
output.elasticsearch:
hosts: ["http://localhost:9200"]
➡ Filebeat를 사용하면 서버 로그 파일을 실시간으로 Elasticsearch로 전송 가능
3️⃣ 데이터베이스(MySQL, PostgreSQL) 연동
Elasticsearch는 관계형 데이터베이스(RDBMS)와 연동하여 데이터를 실시간으로 검색 및 분석할 수 있습니다.
✔ MySQL → Elasticsearch 데이터 동기화
- Logstash + JDBC 플러그인을 사용하여 MySQL 데이터를 주기적으로 Elasticsearch에 저장
- Debezium을 사용하여 MySQL의 변경 사항을 Elasticsearch에 실시간 반영
✔ PostgreSQL → Elasticsearch 데이터 동기화
- elasticsearch-jdbc 플러그인을 사용하여 PostgreSQL 데이터를 동기화
- Kafka Connect를 활용하여 PostgreSQL 데이터를 스트리밍 방식으로 전송
4️⃣ 애플리케이션(Spring Boot, Python) 연동
Elasticsearch는 Java, Python, Node.js 등 다양한 프로그래밍 언어와 연동할 수 있습니다.
📌 Spring Boot 연동
Spring Data Elasticsearch를 사용하여 Elasticsearch와 연동할 수 있습니다.
✔ Spring Boot 설정 (application.yml)
spring.elasticsearch.uris: http://localhost:9200
✔ Elasticsearch Repository 생성
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface UserRepository extends ElasticsearchRepository<UserDocument, String> {
List<UserDocument> findByUsername(String username);
}
✔ 검색 API
@GetMapping("/search")
public List<UserDocument> search(@RequestParam String username) {
return userRepository.findByUsername(username);
}
➡ Spring Boot 애플리케이션에서 Elasticsearch를 직접 검색할 수 있음
5️⃣ 대시보드 및 시각화(Kibana, Grafana)
Elasticsearch 데이터를 실시간으로 시각화하려면 Kibana 또는 Grafana를 사용합니다.
📌 Kibana 연동
kibana.yml 설정:
server.port: 5601
elasticsearch.hosts: ["http://localhost:9200"]
➡ Kibana를 사용하면 실시간 대시보드를 구성하여 데이터를 시각적으로 분석 가능
6️⃣ 메시징 시스템(Kafka, RabbitMQ) 연동
Elasticsearch는 Kafka 또는 RabbitMQ와 연동하여 실시간 데이터 스트리밍을 처리할 수 있습니다.
📌 Kafka → Elasticsearch 데이터 연동
Kafka Connect를 사용하여 Kafka의 메시지를 실시간으로 Elasticsearch에 저장할 수 있습니다.
✔ Kafka Connect 설정 (sink-connector.json)
{
"name": "elasticsearch-sink",
"config": {
"connector.class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
"topics": "user-logs",
"connection.url": "http://localhost:9200",
"type.name": "user_logs"
}
}
➡ Kafka 메시지를 Elasticsearch에 자동 저장하여 실시간 검색 가능
7️⃣ 클라우드 서비스(AWS, GCP, Azure) 연동
Elasticsearch는 클라우드 환경에서도 쉽게 배포 및 운영할 수 있습니다.
📌 AWS OpenSearch Service 연동
AWS OpenSearch Service는 Elasticsearch의 관리형 서비스입니다.
✔ AWS OpenSearch에 데이터 저장
curl -X POST "https://search-my-domain.region.es.amazonaws.com/my_index/_doc" -H "Content-Type: application/json" -d'
{
"name": "AWS OpenSearch 연동 예제",
"type": "클라우드"
}'
➡ AWS, GCP, Azure에서도 Elasticsearch를 확장 가능
8️⃣ 보안 및 인증(OAuth, API Key, X-Pack)
Elasticsearch는 X-Pack, API Key, OAuth 인증을 지원하여 안전한 데이터 연동을 보장합니다.
✔ API Key 인증
curl -X GET "http://localhost:9200/_cluster/health" -H "Authorization: ApiKey YOUR_API_KEY"
✔ X-Pack을 통한 Role-Based Access Control (RBAC)
PUT _security/role/logs_reader
{
"indices": [
{ "names": ["logs-*"], "privileges": ["read"] }
]
}
➡ 보안을 강화하여 안전한 Elasticsearch 연동 가능
✅ Elasticsearch 연동 구조 요약
연동 시스템 |
설명 |
RESTful API |
Elasticsearch의 기본 인터페이스 |
Logstash / Beats |
실시간 로그 및 데이터 수집 |
MySQL, PostgreSQL |
RDBMS 데이터 연동 |
Spring Boot, Python |
애플리케이션과 직접 연결 |
Kibana, Grafana |
데이터 시각화 및 분석 |
Kafka, RabbitMQ |
실시간 스트리밍 데이터 처리 |
AWS, GCP, Azure |
클라우드 환경 연동 |
OAuth, API Key |
보안 인증 및 접근 제어 |
📌 결론:
✔ Elasticsearch는 RESTful API와 다양한 데이터 수집/처리 도구를 활용하여 다른 시스템과 쉽게 연동할 수 있습니다.
✔ 실시간 로그 수집, 데이터베이스 동기화, 애플리케이션 연동, 메시징 시스템 연결까지 가능하여 확장성이 뛰어납니다. 🚀