설치하기 전
지난 글에 이어 elasticsearch(이하 ES) cluster에 logstash를 붙여보려한다. ES cluster에는 xpack security로 SSL 이 적용되어 있는 상태이며 logstash 또한 SSL을 적용하려고 한다.
관련글은 아래 링크를 참조 하도록 한다.
- elasticsearch 단일 node에 8.14.x 설치하기(SSL 포함)
- elasticsearch cluster 구축하기
- elasticsearch cluster에 kibana 붙이기(SSL 포함)
- elasticsearch cluster에 logstash 붙이기(SSL 포함)
- elasticsearch ILM 적용을 통한 Hot-Warm-Cold 아키텍쳐 구현해 보기[1]
- elasticsearch ILM 적용을 통한 Hot-Warm-Cold 아키텍쳐 구현해 보기[2]
- elasticsearch Data Stream에 ILM 적용시켜보기
설치 환경은 아래와 같다.
- 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
- test-ES01 : 172.16.10.111
- kibana, logstash :
- test-ES04 : 172.16.10.114
- node name : es-kibana01, es-logstash01
- test-ES04 : 172.16.10.114
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