일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 쿠버네티스 컴포넌트
- LoadBalancer Controller
- EKS 클러스터
- AWS 딥레이서
- SAA 합격 후기
- 그라파나 시각화
- Kubernetes
- jenkins
- github action 사용법
- Firelens
- Solution Architecture
- 로드밸런서 컨트롤러
- 솔데스크
- Kubernets on Jenkins
- 메탈LB
- EFS CSI Driver
- 그라파나 대시보드
- helm
- Aurora cluster
- blue-green
- 딥레이서
- Prometheus install
- grafana on kubernetes
- 딥레이서 보상함수
- 깃허브 액션
- 쿠버네티스
- kubernetes 동작 원리
- headless service
- livenessPorbe
- terraform
mingming
ELK on Kubernetes - Logstash 본문
Logstash
이전 포스팅에서 helm 차트를 이용해 쿠버네티스 위에서 동작하는 ElasticSearch를 설치했습니다. 이어서 Logstash를 설치해보려 합니다.
위의 링크에서 설치할 Logstash의 버전정보 및 템플릿의 정보를 확인할 수 있습니다.
지난 elasticsearch를 설치하기 위해 추가한 helm repository가 이미 추가되어 있기 때문에 해당 과정은 생략하고 바로 설치 단계로 넘어가도록 하겠습니다.
Logstash 설치
NAME CHART VERSION APP VERSION DESCRIPTION
elastic/apm-attacher 0.1.0 A Helm chart installing the Elastic APM mutatin...
elastic/apm-server 8.5.1 8.5.1 Official Elastic helm chart for Elastic APM Server
elastic/eck-agent 0.8.0 Elastic Agent managed by the ECK operator
elastic/eck-beats 0.8.0 Elastic Beats managed by the ECK operator
elastic/eck-elasticsearch 0.8.0 Elasticsearch managed by the ECK operator
elastic/eck-fleet-server 0.8.0 Elastic Fleet Server as an Agent managed by the...
elastic/eck-kibana 0.8.0 Kibana managed by the ECK operator
elastic/eck-logstash 0.8.0 Logstash managed by the ECK operator
elastic/eck-operator 2.10.0 2.10.0 Elastic Cloud on Kubernetes (ECK) operator
elastic/eck-operator-crds 2.10.0 2.10.0 ECK operator Custom Resource Definitions
elastic/eck-stack 0.8.0 Elastic Stack managed by the ECK Operator
elastic/elasticsearch 8.5.1 8.5.1 Official Elastic helm chart for Elasticsearch
elastic/filebeat 8.5.1 8.5.1 Official Elastic helm chart for Filebeat
elastic/kibana 8.5.1 8.5.1 Official Elastic helm chart for Kibana
elastic/logstash 8.5.1 8.5.1 Official Elastic helm chart for Logstash
elastic/metricbeat 8.5.1 8.5.1 Official Elastic helm chart for Metricbeat
elastic/pf-host-agent 8.11.1 8.11.1 Hyperscaler software efficiency. For everybody.
이전에 추가해 놓은 레포지터리에서 logstash 8.5.1 버전을 설치해보려고 합니다.
values 파일을 불러옵니다.
helm show values elastic/logstash > logstash-values
values 파일 수정
현재 vm의 리소스용량 부족으로 request와 limit을 다음과 같이 설정했습니다.
resources:
requests:
cpu: "100m"
memory: "536Mi"
limits:
cpu: "1000m"
memory: "1000Mi"
logstash.yml 수정
logstashConfig:
logstash.yml: |
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: elastic ### elasticsearch의 username 입니다.
xpack.monitoring.elasticsearch.password: ***** ### elasticsearch의 password 입니다. 이부분을 변수로서 선언해보고 싶었지만 아직 어떻게 해야할지 잘 감이 안잡히네요
xpack.monitoring.elasticsearch.hosts: ["https://elasticsearch-master:9200"] ### elasticsearch 의 도메인입니다. 파드 내에선 coredns 내에 등록된 도메인으로 통신이 가능합니다.
xpack.monitoring.elasticsearch.ssl.certificate_authority: "/usr/share/logstash/ca.crt" ### elasticsearch의 공개키 입니다. 해당부분은 새로 secret을 생성해 볼륨 마운트했습니다.
xpack.monitoring.elasticsearch.ssl.verification_mode: certificate
xpack.monitoring.elasticsearch.sniffing: true
http.host: "0.0.0.0"
logstash.conf 수정
logstashPipeline:
logstash.conf: |
input {
exec {
command => "uptime"
interval => 30
}
}
output {
elasticsearch {
hosts => ["https://elasticsearch-master:9200"]
cacert => "/usr/share/logstash/ca.crt"
user => "elastic"
password => "******"
}
}
secret mount
elasticsearch 를 배포했을 때 생긴 secret을 파일로 생성해 다시 secret으로 생성했습니다. 처음엔 기존의 secret 오브젝트의 값을 참조해서 사용해보려고 시도했지만 잘 되지는 않았습니다... 결국은 해당 secret 값을 base64로 decode해서 리다이렉션 후 해당 파일을 다시 secret 으로 생성했습니다.
1. ca.crt 파일 생성
kubectl get secret elasticsearch-master-certs -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
2. secret 오브젝트 생성
kubectl create secret generic logstash-ca --from-file ca.crt
3. secretMounts
secretMounts:
- name: elasticsearch-certs
secretName: logstash-ca
path: /usr/share/logstash/ca.crt
subPath: ca.crt
helm install
위에서 수정한 logstash-values 파일을 적용해 설치합니다.
helm install logstash elastic/logstash -f logstash-values.yaml
logstash 로그를 확인해 에러가 발생하지 않았는지 확인
kubectl logs logstash-logstash-0
ERROR
1. hosts 에러
logstash.yml 파일의 기본값을 확인 해보면 다음과 같이 설정되어 있습니다. 이전의 elasticseasrch 포스팅에서도 언급한 것 처럼 elasticsearch로 접속가능한 도메인 주소는 elasticsearch-master 입니다. 이는 elasticsearch의 service name과 일치합니다.
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
vagrant@kube-control1:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elasticsearch-master ClusterIP 10.233.44.4 <none> 9200/TCP,9300/TCP 7d17h
elasticsearch-master-headless ClusterIP None <none> 9200/TCP,9300/TCP 7d17h
monitoring 대상의 elasticsearch 도메인으로 접속하지 못해 생긴 에러입니다.
[2023-12-06T00:37:40,393][ERROR][logstash.licensechecker.licensereader] Unable to retrieve license information from license server {:message=>"No Availa
[2023-12-06T00:37:40,570][INFO ][logstash.licensechecker.licensereader] Failed to perform request {:message=>"elasticsearch: Name or service not known",
[2023-12-06T00:37:40,572][WARN ][logstash.licensechecker.licensereader] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"/elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch: Name or service not known"}
2. Subject Alternative Name
xpack.monitoring.elasticsearch.ssl.verification_mode: certificate 설정시 다음과 같은에러가 발생했습니다.
분명 url을 elasticsearch-master로 수정해서 넣어줬는데 왜 ? ip로 바뀌는건지 음,, 잘 모르겠네요
[2023-12-06T12:28:50,251][INFO ][logstash.licensechecker.licensereader] Elasticsearch pool URLs updated {:changes=>{:removed=>[https://elastic:xxxxxx@elasticsearch-master:9200/], :added=>[https://elastic:xxxxxx@10.44.0.5:9200/]}}
[2023-12-06T12:28:50,951][WARN ][logstash.licensechecker.licensereader] Failed to perform request {:message=>"Certificate for <10.44.0.5> doesn't match any of the subject alternative names: [elasticsearch-master, elasticsearch-master.default, elasticsearch-master.default.svc]", :exception=>Manticore::UnknownException, :cause=>#<Java::JavaxNetSsl::SSLPeerUnverifiedException: Certificate for <10.44.0.5> doesn't match any of the subject alternative names: [elasticsearch-master, elasticsearch-master.default, elasticsearch-master.default.svc]>}
결국은 logstash.yml 파일의 xpack.monitoring.elasticsearch.ssl.verification_mode을 none으로 수정해서 다시 재배포했습니다.
xpack.monitoring.elasticsearch.ssl.verification_mode: none
xpack.monitoring.elasticsearch.ssl.verification_mode 의 값으로 none, full, certificate 세가지 값이 올 수 있다고 합니다. 그러나 full로 설정했을 때는 로그스태시가 정상작동하지 않았습니다.
3. output 에러
올바른 인증서 경로를 찾지 못해 elasticsearch로 아웃풋이 연결되지 않는다는 에러 입니다.
[2023-12-06T15:52:05,717][INFO ][logstash.outputs.elasticsearch][main] Failed to perform request {:message=>"PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target", :exception=>Manticore::ClientProtocolException, :cause=>#<Java::JavaxNetSsl::SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target>}
[2023-12-06T15:52:05,718][WARN ][logstash.outputs.elasticsearch][main] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"https://elasticsearch-master:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :message=>"Elasticsearch Unreachable: [https://elasticsearch-master:9200/][Manticore::ClientProtocolException] PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"}
output 에 elastic으로 접근할 인증정보를 작성해주어야 하는걸 몰랐습니당,,,
Logstash 설치 후기...
이전에 가상먼신에서 한번 구축을 해봤기에 쉽게 설치할 수 있을거라고 생각했지만 생각보다 에러가 많이 발생했습니다. 주로 인증관련된 에러였는데 8.5.1 버전에선 SSL/TLS 암호화가 defautl 값이라 인증서를 어떻게 가져와야할지에 대해 많은 고민을 했던 것 같습니다.
쿠버네티스 클러스터위에 올라가있는 어플리케이션 파드의 로그는 어떻게 가져와야할까에 대한 의문이 생겼습니다.
레거시 환경에선 모든 어플리케이션의 로그가 로컬시스템에 생성되지만 파드로 구현되어 있는 애플리케이션의 경우는 격리된 가상의 공간에서 동작하기 때문에 어떻게 로그를 가져와야 할지 고민이 됩니다.
지금 생각나는건 애플리케이션 파드를 배포할 때 사이드카로 filebeat 컨테이너를 같이 생성해 logstash로 로그를 보내는 방법이 있을거 같은데 다음 포스팅에선 해당내용을 직접 구현에 파이프라인을 구축해보도록 하겠습니다.
'ELK' 카테고리의 다른 글
ElaticSearch - cluster 설정 및 role (0) | 2023.12.09 |
---|---|
ELK on Kubernetes - Kibana (0) | 2023.12.07 |
ELK on Kubernetes - ElasticSearch (2) | 2023.12.06 |
Kibana 설치 및 기본설정 및 ElasticSearch 연동 (4) | 2023.12.05 |
Logstash - beats를 통한 로그 입력 및 로그 파싱 (0) | 2023.11.25 |