본문 바로가기

Monitoring Tools/ELK Stack

[logstash] elasticsearch cluster에 logstash 붙여보기(SSL 포함)

반응형

설치하기 전


지난 글에 이어 elasticsearch(이하 ES) cluster에 logstash를 붙여보려한다. ES cluster에는 xpack security로 SSL 이 적용되어 있는 상태이며 logstash 또한 SSL을 적용하려고 한다.

관련글은 아래 링크를 참조 하도록 한다.

 

 

설치 환경은 아래와 같다.

  • OS : CentOS Stream release 8
  • Kernel : 4.18.0-553.6.1.el8.x86_64
  • logstash : 8.14.3

최종 3개의 elasticsearch(이하 ES) node로 cluster를 구성하고 1개의 node로 logstash, kibana를 구성할 예정이다.

  • ES node :
    • test-ES01 : 172.16.10.111
      • node name : es-node01
    • test-ES02 : 172.16.10.112
      • node name : es-node02
    • test-ES03 : 172.16.10.113
      • node name : es-node03
  • kibana, logstash :
    • test-ES04 : 172.16.10.114
      • node name : es-kibana01, es-logstash01
test-ES01은 host의 hostname이며 es-node01은 ES 의 node name 이다

 

test-ES04에 kibana와 함께 logstash도 같이 설치하려고 한다.

 

 

 

본격적인 설치


Hosts 파일 등록, yum repogitory 추가 부분은 kibana를 설치하면서 test-ES04에 진행했던 내용이라 생략한다.

참고 : https://ploz.tistory.com/entry/kibana-elasticsearch-cluster%EC%97%90-kibana-%EB%B6%99%EC%9D%B4%EA%B8%B0#%EB%B3%B8%EA%B2%A9%EC%A0%81%EC%9D%B8-%EA%B5%AC%EC%B6%95

 

 

Logstash 설치

yum(dnf)를 이용하여 패키지 설치로 진행한다.

yum install logstash-8.14.3

 

 

인증서

logstash xpack monitoring을 위한 인증서는 단일 node 설치 하면서 kibana, ES cluster data node 용과 함께 만들어둔 logstash용 인증서를 사용한다.

참고 : https://ploz.tistory.com/entry/elasticsearch-814x-%EC%84%A4%EC%B9%98CentOS#%EC%9D%B8%EC%A6%9D%EC%84%9C-%EC%83%9D%EC%84%B1

그리고 파이프라인 설정 시 ES에 data를 밀어 넣기 위해 Rest API용 인증서가 필요한데 이 역시 ES cluser와 kibana에 사용했던 http.p12를 적용 할 것이다.

물론 CA 인증서도 필요하다.

 

인증서 가져오기

test-ES02에서 가져온다. 이때 인증서 별 패스워드를 분실하지 않도록 유의 한다.

keystore에 저장된 패스워드 확인은 아래 링크를 참조하도록 한다.

https://ploz.tistory.com/entry/elasticsearch-814x-%EC%84%A4%EC%B9%98CentOS#%EC%9D%B8%EC%A6%9D%EC%84%9C-%EC%83%9D%EC%84%B1

경로 : /etc/logstash/certs

scp elastic-stack-ca.p12 es-logstash01.p12 http.p12 root@test-ES04:/etc/logstash/certs/

 

 

xpack monitoring 계정 

logstash_system 이라는 계정이 이미 ES에서 제공하고 있으며 이 예정을 사용할 예정이며 패스워드 재설정이 필요하다.

계정 관련 참고 : https://ploz.tistory.com/entry/kibana-elasticsearch-cluster%EC%97%90-kibana-%EB%B6%99%EC%9D%B4%EA%B8%B0#kibana-%EC%82%AC%EC%9A%A9%EC%9E%90-%EA%B3%84%EC%A0%95-%EC%84%A4%EC%A0%95

패스워드 재설정은 ES cluster 내 아무 곳에서나 가능하다. 나는 master node에서 진행한다.

/usr/share/elasticsearch/bin/elasticsearch-reset-password -u logstash_system

 

 

파이프라인 write 계정

파이프라인 설정에서 ES로 data를 밀어넣을때 사용되는 write 용 계정이 필요하다.

elastic 계정을 이용 할 수도 있지만 elastic 계정은 superuser role이라 role을 따로 만들어 logstash에 적용하는것이 좋다.

 

role 만들기

role 생성은 편의상 kibana에서 진행한다.

경로 : 메뉴 - Stack Management

 

경로 : Roles - Create role

 

Role name : logstash_write_role

Cluster privileges : manage_index_templates, monitor

indices : 원한는 index 패턴을 입력한다. 입력한 index 패턴에만 해당 role이 적용된다.

privileges : write, create, create_index,manage,manage_lim

 

 

계정 만들기

경로 : Users - Create user

 

Username : logstash_erite

Paswwrod : 패스워드 입력

Privileges : logstash_write_role

 

 

Logstash Configuration

경로 : /etc/logstash/logstash.yml

node.name: es-logstash01
path.data: /var/lib/logstash
path.logs: /var/log/logstash

xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: [패스워드]
xpack.monitoring.elasticsearch.hosts: ["https://test-ES01:9200", "https://test-ES02:9200", "https://test-ES03:9200"]

# CA 인증서 경로
xpack.monitoring.elasticsearch.ssl.certificate_authority: "/etc/logstash/certs/elastic-stack-ca.p12"

# 인증 모드, node 일 경우 SSL 검증을 사용하지 않는다.
xpack.monitoring.elasticsearch.ssl.verification_mode: certificate

# keystore, truststore 인증서 경로
xpack.monitoring.elasticsearch.ssl.truststore.path: /etc/logstash/certs/es-logstash01.p12
xpack.monitoring.elasticsearch.ssl.truststore.password: [패스워드]
xpack.monitoring.elasticsearch.ssl.keystore.path: /etc/logstash/certs/es-logstash01.p12
xpack.monitoring.elasticsearch.ssl.keystore.password: [패스워드]

 

 

파이프라인 configuration

파이프라인 경로 확인

cat pipelines.yml 
...
- pipeline.id: main
  path.config: "/etc/logstash/conf.d/*.conf"

 

파이프라인 설정

경로 : /etc/logstash/conf.d/default.conf

input {
	beats { 
		port => 5044
		host => "0.0.0.0"
	}
}

filter {
	json {  
		source => "message"
        }
}

output {
	elasticsearch {
    	hosts => ["https://test-ES01:9200","https://test-ES02:9200","https://test-ES03:9200"]
		ssl_enabled => true
		ssl_keystore_path => "/etc/logstash/certs/http.p12"
		ssl_keystore_password => "[패스워드]"
		ssl_truststore_path => "/etc/logstash/certs/http.p12"
		ssl_truststore_password => "[패스워드]"
		user => "logstash_writer"
		password => "[패스워드]"
    	index => "[index]"
    }
}

 

 

Logstash 시작

systemctl start logstash
반응형