본문 바로가기

인프라,데이터

(49)
Kubernetes 특정 경로로 로그 파일 수집하기(nginx access 로그 만들기) nginx같은 경우는 /var/log/nginx/ 경로 하위에 access.log, error.log가 만들어진다. 이렇게 쌓이는 로그를 쿠버네티스에 띄운 Logstash로 수집할 수 있다. nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx namespace: test spec: replicas: 3 selector: matchLabels: run: my-nginx template: metadata: labels: run: my-nginx spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchE..
Logstash에서 SQS, Elasticsearch로 데이터가 들어가지 않을 때 [상황] 로그를 수집하는 과정에서 예상보다 굉장히 많은 로그가 Logstash에서 수집되어 SQS로 보내졌고, 그 과정에서 오버헤드가 생겨 SQS에서 제대로 처리할 수 없었다. [에러 메시지] - 로그스태시 [WARN ] 2022-01-05 23:00:52.337 [[main]"test_queue", :exception=>Seahorse::Client::NetworkingError, :message=>"Connection refused - Failed to open TCP connection to sqs.ap-northeast-2.amazonaws.com:443 (Connection refused - connect(2) for \"sqs.ap-northeast-2.amazonaws.com\" port 4..
Logstash nested json, json in json parsing error 부제 : 로그스태시에서 잘 되던 metric log가 갑자기 이상하게 파싱이 안 될때. { \"system\": { \"cpu\": { \"core\":4, \"cpuPct\":, \"loadavg1\":0.18, \"loadavg5\":0.23, \"loadavg15\":0.25 }, \"mem\": { \"total\":7624.00, \"used\":3731.00, \"free\":3894.00, \"memPct\":48.94 }, \"disk\": { \"total\":51188.00, \"used\":16209.00, \"free\":34980.00, \"diskPct\":32 } } 메트릭 로그는 이런 형태이다. 해결 : 1. 오류메시지 잘 보기. :exception=>#
Logstash 7.16.2 버전에서 로그 파싱하기 {"svctype":"test-svc-type","instance_name":"test-instance_ip-0.0.0.0", "@timestamp":"2021-12-30T12:30:06.731Z","environment":"test","role":"api","filename":"test.log","@version":"1","message":"* 2021-12-30 21:30:06,690 test log message","host":"ip-0.0.0.0.ap-northeast-2.compute.internal","team":"test"} 위와 같은 로그가 있다. 각 서버에서 위와 같은 로그를 받아와, 로그스태시에 input 형태로 넣고, SQS로 아웃풋을 보낸다. 중요한 것은 설정 파일에서 input {..
Kubernetes에서 Logstash(sqs output)를 사용해 elasticsearch, kibana로 로그 확인 1. Hombrew를 사용하여 logstash 설치 brew tap elastic/tap brew cask install homebrew/cask-versions/adoptopenjdk8 brew install elastic/tap/logstash-full 로그스태시가 최신버전으로 설치된다. 2. 폴더 생성 후 conf 파일 생성 input { file { path => "/usr/share/logstash/data/*.log" codec => "json" } } output { stdout { } sqs { access_key_id => "***" secret_access_key => "****" codec => "json" queue => "test_queue" region => "ap-northea..
엘라스틱서치를 시작할때 systemctl을 쓰지 말자! 엘라스틱서치나 키바나를 실행할 때 systemctl은 웬만하면 쓰지 않는 게 좋다고 사수가 그랬다. sudo /bin/systemctl daemon-reload sudo /bin/systemctl enable elasticsearch.service sudo systemctl start elasticsearch.service sudo systemctl stop elasticsearch.service 아니, rpm으로 엘라스틱서치 설치하면 콘솔창에서 위 명령어로 시작하라고 알려주는데, 왜일까 궁금했다. 이유를 찾아보니, 위의 방식으로 엘라스틱서치를 사용하면 시스템이 부팅될 때 자동으로 엘라스틱서치가 시작하도록 설정하는 것이며, 이 명령어는 엘라스틱서치가 성공적으로 시작했는지 아닌지에 대한 피드백을 제공하지 ..
하나의 로컬환경(도커)에 2개의 엘라스틱서치 노드 띄우기 엘라스틱서치 설치 후, useradd user 로 새 유저를 추가해준다. 다음의 명렁어를 실행하여 각각의 폴더에 유저와 그룹 소유권을 변경한다. (마지막 명령어는 user로도 로그를 남길 수 있게 한다.) chown -R user:user /etc/elasticsearch chown -R user:user /usr/share/elasticsearch chown -R user:user /var/lib/elasticsearch chown -R user:user /var/log/elasticsearch chown -R user:user /etc/sysconfig/elasticsearch chmod 777 -R /var/log/elasticsearch su user 로 유저를 바꿔준다. (엘라스틱서치는 root..
도커로 ELK 환경 만들기 - 멀티 노드 Docker-compose.yml version: '2.2' services: # master-node의 Docker 서비스입니다. # Kibana에서 기본적으로 호출하는 ES host주소가 'http://elsaticsearch:9200'이기 때문에 서비스명은 elasticsearch로 쓰시는게 편합니다. # 다른 서비스명을 사용시 Kibana ES host 설정도 같이 추가해주어야 정상 동작합니다. elasticsearch: container_name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2 environment: # ES Cluster명입니다. ES 서비스마다 동일한 명칭을 사용해야합니다. - cluster...