* 시작전 필요사항

 - Elastic Stack에 대한 사전 지식

 - ElasticSearch가 설치되어 있어야함. ( https://www.google.co.kr/search?q=elasticsearch+install )

 - Logstash가 설치되어 있어야함. (https://www.google.co.kr/search?q=logstash+install)

 - Kibana가 설치되어 있어야함.(https://www.google.co.kr/search?q=kibana+install)


 - 해당 자료는 6.2.4 Set로 수정되었습니다.


1. 구성

  - ELB 로그를 S3에 저장한다.

  - Logstash로 간단하게 가지고와서, ElasticSearch에 넣는다.

  - Kibana로 간단하게 본다.


2. AWS Elb Log `ON`

 - AWS Console에서 쉽게 켤 수 있다.

 - https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/classic/access-log-collection.html

- 위에 S3 Location에 원하는 버킷 정보를 넣으면 된다.



3. Logstash Config 파일

 - config 파일



 - 실행 명령어

{LOGSTASH_PAHT}/logstash -f ''elb-access-logstash-conf.conf


4. ElasticSearch Index 확인하기

 - Rest API로 확인

curl -X GET 'http://localhost:9200/_cat/indices?v='


 - logstash-{날짜} 형태로 추가되어 있는지를 확인함.


5. Kibana 꾸미기

 1) Index Pattern 생성

  - Management에서 생성하면됨.

  - logstash-* 형태로 생성될 index들의 맵핑을 만들어 주면된다.


 2) Visualize 설정

  - 원하는 차트를 고르면된다.


  - Vertical Bar 로 표현할 예정



3) 차트 보기

 - 아래와 같이 설정하면 기본적인 차트를 볼 수 있음.

 - 필요한 형태로 변경하여 보면 됨.


6. 추가

 1) logstash로 생성한 모든 index 삭제

curl -X DELETE http://localhost:9200/logstash-%2A


 2) GeoIP

  - logstash Config 파일을 보면 Geoip 기능을 추가해놓음.

  - Map 으로 그려보면 재미남.


 3) 차트 꾸밀때 일정 설정...

  - 초기에 특정일자의 데이터만 수집해서 보는데, 데이터가 안나와서 삽질을 했다.

  - 시간을 최근 5분꺼만으로 세팅해놔서였다... 삽질하지말자!!



* 참고페이지

 - https://logz.io/blog/aws-elb-log-analysis/

 - https://medium.com/sharmin-anee/aws-elb-logs-from-s3-on-elk-stack-c463e2e2ec0

1. 환경

 - CF + ELB + EC2(nginx)

 

2. 문제

 - 클라이언트 ip주소에 ELB, CloudFront IP들이 덧씌워진다. (ex : 1.1.1.1, 2.2.2.2, 3.3.3.3)

 - ip deny or was에서 처리할때 문제가 발생한다.

 

3. 해결방법

 1) nginx real ip 기능(참고자료)

real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;

 - 위 방법은 또 다른 문제를 발생 시킬 수 있음.

 - 아래 curl을 날려보자.

curl --header "X-Forwarded-For: 1.2.3.4" "http://example.com/"

  - nginx 로그를 켜서 보게되면 사용자 ip가 1.2.3.4로 나오게 될 겁니다.

 

2) nginx real ip + make-nginx-real-ip-conf(소스링크) 사용

 - make-nginx-real-ip-conf로 만든 conf 파일을 include 시킨다. 끝!

 - 아래는 make-nginx-real-ip-conf 프로그램으로 생성한 파일입니다.

#Make at 20170907162608
#your ELB IP
set_real_ip_from 110.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;

#AWS CloudFront IP/CIDR range
set_real_ip_from 13.113.203.0/24;
set_real_ip_from 13.124.199.0/24;
set_real_ip_from 13.228.69.0/24;
set_real_ip_from 13.32.0.0/15;
set_real_ip_from 13.54.63.128/26;
set_real_ip_from 13.59.250.0/26;
set_real_ip_from 204.246.164.0/22;
set_real_ip_from 204.246.168.0/22;
set_real_ip_from 204.246.174.0/23;
set_real_ip_from 204.246.176.0/20;
set_real_ip_from 205.251.192.0/19;
set_real_ip_from 205.251.249.0/24;
set_real_ip_from 205.251.250.0/23;
set_real_ip_from 205.251.252.0/23;
set_real_ip_from 205.251.254.0/24;
set_real_ip_from 216.137.32.0/19;
set_real_ip_from 34.195.252.0/24;
set_real_ip_from 34.226.14.0/24;
set_real_ip_from 35.158.136.0/24;
set_real_ip_from 35.162.63.192/26;
set_real_ip_from 35.167.191.128/26;
set_real_ip_from 52.15.127.128/26;
set_real_ip_from 52.199.127.192/26;
set_real_ip_from 52.212.248.0/26;
set_real_ip_from 52.220.191.0/26;
set_real_ip_from 52.222.128.0/17;
set_real_ip_from 52.46.0.0/18;
set_real_ip_from 52.52.191.128/26;
set_real_ip_from 52.56.127.0/25;
set_real_ip_from 52.57.254.0/24;
set_real_ip_from 52.66.194.128/26;
set_real_ip_from 52.78.247.128/26;
set_real_ip_from 52.84.0.0/15;
set_real_ip_from 54.182.0.0/16;
set_real_ip_from 54.192.0.0/16;
set_real_ip_from 54.230.0.0/16;
set_real_ip_from 54.233.255.128/26;
set_real_ip_from 54.239.128.0/18;
set_real_ip_from 54.239.192.0/19;
set_real_ip_from 54.240.128.0/18;
set_real_ip_from 2600:9000::/28;

# always put the following 2 lines in the bottom of ip list
real_ip_header X-Forwarded-For;
real_ip_recursive on;


3) make-nginx-real-ip-conf 란??

  - AWS에서는 사용중인 ip를  json으로 공유해줍니다.

  - 그중 CloudFront 대역 Ip v4, Ip v6만 파싱합니다.

  - 내부 아이피 대역을 추가합니다. (지인의 말리퀘로 추가된 부분입니다.)

  - nginx real ip에 필요한 CloudFront, ELB 대역만 정리하여 파일로 생성해주는 프로그램입니다.

  * 참고로 https://ip-ranges.amazonaws.com/ip-ranges.json 가 변경되는 내용을 AWS SNS Topic으로 받을 수 있고, 해당 이벤트로 람다를 실행 시킬 수 있습니다.

 

 

 

* 참고링크

 - http://serverfault.com/questions/331531/nginx-set-real-ip-from-aws-elb-load-balancer-address

+ Recent posts