꼬반 Blog

Nginx, GeoIP, Grok Pattern, InfluxDB, Telegraf, WroldMap, Grafana 연동 삽질기

각 서비스의 접속 지역을 확인하기 위해 Nginx 를 1.13.3 으로 소스 재컴파일을 하였고 GeoIP Module 을 설치하였으며 (이와중에 dependancy 로 설치된 nginx 때문에 소스 컴파일 한 nginx 가 영향을 받아 스크립트가 정상동작 하지 않는 부분이 발생.. 하여 system service daemon 을 수정하여 정상 동작 확보 - bin 파일을 rpm 의 nginx 가 아닌 source build 된 nginx 로 실행 위치 변경) 이후 grafana 에 world map plugin 을 설치하고 지도에 표시하느라 쿼리와 telegraf, influxdb 에 nginx log 넣느라 삽질 삽질 하다가 어 됬다! 하고 좋아했다. (지난번 포스트) 그런데 몇일 후 보니.. 다시 정..

Read More

Nginx, GeoIP, Telegraf, Influxdb, Grafana 연동!

회사에서 사용하고 있는 웹 서비스의 구성은 간단하게 다음과 같다. Nginx (리버스 프록시 서버) --- WAS (각 어플리케이션 서버) --- 백엔드 (DB, 스토리지 등) 여기서 유저는 가장 상단의 Nginx 서버에만 접근이 가능하다. 이러한 구성은 기본적으로 보안이나 관리 등에 용이하다. 그리고 각 서버들의 상태 모니터링 및 로그 수집을 위해 2가지 시스템을 혼용하여 사용하는데 ELK 와 TICK 이 바로 그것이다. ELK는 Elasticsearch, Logstash, Kibana 를 지칭하는데 과거 버전에서 5.x 버전으로 업그레이드를 하면서 이 로그 수집방식이 Logstash-forward 대신에 beat 로 대체 되었다. 그래서 각 단말에 beat가 서버의 로그를 수집하여 Elasticsea..

Read More

[NGINX] Reverse Proxy 설정 시 Nginx 에서 Error Page 설정

참고 : http://serverfault.com/questions/511109/nginx-local-fallback-error-page-if-proxy-destination-is-unavailable Nginx 에서 리버스 프록시 설정을 하여 사용할때 에러 페이지의 경우는 Nginx 설정이 아닌 프록시 서버의 설정을 따르게 된다. (Nginx - Tomcat 설정인 경우 Tomcat 에러 페이지가 노출) 이때 Nginx 에서 에러 페이지를 설정하기 위해서는 아래의 옵션을 함께 사용하면 된다. (Server 블록 내에서 사용) server { ... location / { proxy_intercept_errors on; proxy_pass http://localhost:8080/; } error_page..

Read More

[Nginx] 특정 에이전트 로그 제외하기

웹 서버를 운영하다 보면 서버의 로그를 수집하고 모니터링을 하는 부분이 매우 중요해진다. 그런데 로그를 살펴보면 각종 검색엔진의 crawler로 인해 로그가 고통받는걸 볼 수 있다. (어디가든 bot 이 문제야! ㅠㅠ) 그래서 이 bot 들의 로그를 남기지 않기 위해서는 다음과 같이 설정하여 주면 된다. 참조 : https://bjornjohansen.no/exclude-requests-from-nginx-access-log map $http_user_agent $log_ua { ~Pingdom 0; ~Googlebot 0; ~Baiduspider 0; default 1; } server { […] access_log /var/log/nginx/access.log main if=$log_ua; }user..

Read More

[Tomcat] Data load time out 장애 조치

오늘 개발 중인 테스트 서버에서 장애가 접수되었다. 장애는 특정 데이터를 선택해서 그래프를 그려야 하는데 이 그래프를 그리기 위해서 서버쪽에서 response header 에 많은 chunked data 를 붙여서 응답한다. 근데 이 사이즈가 매우 커서 브라우저에서는 해당 data를 읽지 못하고 장애가 발생한 것. 하여 관련 옵션을 찾아 tomcat server.xml 에 추가 후 restart 하였다. compression="on"maxHttpHeaderSize="8192" 두개의 옵션을 에 추가하여 주었고 다시 확인해보니 그래프 기능이 정상으로 동작하였다.

Read More

[쇼핑몰] SSL 인증서 적용

꾸준히 만들고 있는 www.jaram.kr 쇼핑몰 사이트 (언제쯤 오픈할 수 있을련지 ㅠㅠ 눙물) SSL 인증서를 도입하였다. 아무래도 회원가입이나 로그인, 카트 같은 개인정보가 필요한 쇼핑몰이다 보니 보안을 위해서 HTTPS 적용을 염두에 두고는 있었는데.. 발급비용이나 갱신비용때문에 선듯 도입을 하지 않았다. (근데 대부분의 쇼핑몰에 SSL 적용이 안되어 있더라?!? 시행법인데?? 뭐지?) 근데 Let's Encrypt 에 대해서 우연히 알게되었다. 아니 이것은 오오!?!? SSL의 확산을 위해서 여러 재단에서 만든 SSL 인증 기관! 이걸 사용하면 누구나 Free 로 SSL 을 발급 받을 수 있다. 다만 갱신 기간이 짧다. 3개월.. 하지만 이게 어딘가! 공식 사이트 : https://letsenc..

Read More

진행중인 프로젝트 목록

기본적인 디자인들은 bootstrap 유료 디자인을 판매하는 wrapbootstrap 에서 구매하여 사용하고 있습니다. 회사1. javascript + nodejs + expressjs + bootstrap ui 사용한 서버실 관리 서비스 (회사 내부 VM / CentOS 7.1) 개인1. javascript + angularjs + nodejs 쇼핑몰 (vultr 가상 호스팅 Tokyo Location / ubuntu 15.04 / nginx) 2. javascript + nodejs 창세기전 2 웹 게임 (개인 프로젝트 스프라이트 추출 단계) 창세기전2는 현재 스프라이트 추출은 거의 다 된 상태인데 맵 타일 위치를 못찾은 상태. 그리고 회사일이나 기타 사정으로 중지상태임. 하지만 시간을 내서 곧 웹 ..

Read More

Nginx, GeoIP, Grok Pattern, InfluxDB, Telegraf, WroldMap, Grafana 연동 삽질기

각 서비스의 접속 지역을 확인하기 위해 Nginx 를 1.13.3 으로 소스 재컴파일을 하였고


GeoIP Module 을 설치하였으며 (이와중에 dependancy 로 설치된 nginx 때문에 소스 컴파일 한


nginx 가 영향을 받아 스크립트가 정상동작 하지 않는 부분이 발생.. 하여 system service daemon 을


수정하여 정상 동작 확보 - bin 파일을 rpm 의 nginx 가 아닌 source build 된 nginx 로 실행 위치 변경)


이후 grafana 에 world map plugin 을 설치하고 지도에 표시하느라 쿼리와 telegraf, influxdb 에 


nginx log 넣느라 삽질 삽질 하다가 어 됬다! 하고 좋아했다. (지난번 포스트)


그런데 몇일 후 보니.. 다시 정상적으로 안나온다 ㅠㅠ What!!!


influxdb 쪽 로그를 보니 사용자 태그로 설정한 geoip_country_code 가 nginx 로그 상에는


아무런 문제가 없지만 inflxudb 로 들어가면 앞에 /"KR/" 형태가 붙는걸 발견..


헐.. 처음엔 안그랬는데?!?!


이걸 해결하려고 nginx log format 을 바꿔보고 telegraf 에서 grok pattern 을 이거저거 수정해보았는데


원인은 일반적인 fields 는 " " 안의 값만 input 으로 받는데 tag로 설정한 값은 " " 값도 같이 


인식해서 db에 넣는다. 덕분에 /" /" 가 같이 붙는것..


그래서 nginx log format 에서 tag 로 사용할 $geoip_country_code 는 " " 를 빼고 그냥 사용해주고


telegraf에서 %{type:tag_name:tag} 로 설정해서 테스트 하니 다시 정상적으로 db로 입력이 된다.


이제야 다시 맵에서 정상적으로 확인이 된다...


원인을 찾아봐야겠는데.. 


https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns


여길 참고하면 기본 tag로 지정되는 verb 값은 "" 안에 있지만 정규식으로 추출해서 쓰는 문법으로 추정된다.


으음 아직 내공이 부족하다 ㅠㅠ



반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

Nginx, GeoIP, Telegraf, Influxdb, Grafana 연동!

회사에서 사용하고 있는 웹 서비스의 구성은 간단하게 다음과 같다.


Nginx (리버스 프록시 서버) --- WAS (각 어플리케이션 서버) --- 백엔드 (DB, 스토리지 등)


여기서 유저는 가장 상단의 Nginx 서버에만 접근이 가능하다. 이러한 구성은 


기본적으로 보안이나 관리 등에 용이하다.


그리고 각 서버들의 상태 모니터링 및 로그 수집을 위해 2가지 시스템을 혼용하여 사용하는데


ELK 와 TICK 이 바로 그것이다.


ELK는 Elasticsearch, Logstash, Kibana 를 지칭하는데 과거 버전에서 5.x 버전으로 


업그레이드를 하면서 이 로그 수집방식이 Logstash-forward 대신에 beat 로 대체 되었다.


그래서 각 단말에 beat가 서버의 로그를 수집하여 Elasticsearch 로 보내고 저장되며 Kibana를 통해


모니터링 및 대시보드를 통한 Visualize 가 가능하다.


Elasticsearch 와 Kibana 는 Docker와 Docker-composer 를 통해 관리된다. 


TICK 은 Telegraf, Influxdb, Chronograf, Kapacitor를 의미하며 각각 수집, 시계열DB, 모니터링 및 관리, 알람


의 기능을 가지고 있다.


그리고 이 데이터들은 Grafana 라는 Visualize platform 에서 활용이 가능하다.


이번에 한 작업은 다음의 목적을 가지고 진행되었다.


1. 특정 사이트의 접속 로그에 대한 모니터링이 필요

2. 접속 지역에 대한 확인이 가능할 것.

3. Nginx access log 에는 기본 apache log + agent, response time 이 붙은 custom log 이며 접속자의 IP가

   확인이 된다. 이 IP를 IP조회 사이트에서 조회하여 지역이 확인이 가능하나 불편하다.

4. Dashboard 를 통해 바로 확인할 방법이 필요.


그래서 위의 목적을 달성하기 위해 다음과 같은 작업을 진행 하였다.


1. 기존 리버스 프록시 서버인 Nginx 서버에 GeoIP Module 연동

  1.1. nginx-module-geoip 를 설치

  1.2. 설정 파일에 load module 후 테스트 -> 로드 X (버전 문제 nginx geoip version 1013003 

        instead of 1013000, 즉 현재 nginx 는 1.13.0 버전 이고 모듈은 1.13.3 버전

  1.2. 기존 사용하던 1.13.0 버전을 1.13.3 버전으로 재컴파일 (rpm, yum 버전 등 build 버전은 사용하지 않음

        http2 지원등을 위해 직접 소스 컴파일, 라이브 서버에 적용 전 VM에 테스트 후 진행)

  1.3. 1.13.3 버전 설치 후 모듈 연동 테스트 -> 성공

  1.4. access log 형식에 geoip_city, geoip_region, geoip_country_code, geoip_country_code2 추가 후 확인 완료


2. Telegraf 수집 형식 변경

  2.1. 기존 logparse 에 grok matching 을 위해 필드 추가 적용 (country_code 는 2개 추가한 이유가 하나는 tag로

       지정하기 위함.)

  2.2. influxdb 에서 수집된 field, tag 에 반영 확인


3. Grafana 연동

  3.1. Grafana World Map Plugin 설치

  3.2. https://github.com/grafana/worldmap-panelhttps://github.com/grafana/worldmap-panel/issues/30

       참고하여 설정 진행

  3.3. World-Map 연동 확인




총평. 진행된 내용만 간략히 적었지만 사실 각 작업간에 많은 시행착오가 있었다. 물논 그런 시행착오가 없을 순

       없다. 각 작업 내용은 다시 한번 정리해서 추후 포스팅 해야겠다.

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

[NGINX] Reverse Proxy 설정 시 Nginx 에서 Error Page 설정

참고 : http://serverfault.com/questions/511109/nginx-local-fallback-error-page-if-proxy-destination-is-unavailable


Nginx 에서 리버스 프록시 설정을 하여 사용할때 에러 페이지의 경우는 Nginx 설정이 아닌


프록시 서버의 설정을 따르게 된다. (Nginx - Tomcat 설정인 경우 Tomcat 에러 페이지가 노출)


이때 Nginx 에서 에러 페이지를 설정하기 위해서는 아래의 옵션을 함께 사용하면 된다.


(Server 블록 내에서 사용)



server {

...

  location / {

    proxy_intercept_errors on;

    proxy_pass http://localhost:8080/;

  }

  error_page 404 500 502 503 504 /custom_error.html;

  location = /custom_error.html {

    root /usr/share/nginx/html;

    internal;

  }

...

}

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

[Nginx] 특정 에이전트 로그 제외하기

웹 서버를 운영하다 보면 서버의 로그를 수집하고 모니터링을 하는 부분이 매우 중요해진다.


그런데 로그를 살펴보면 각종 검색엔진의 crawler로 인해 로그가 고통받는걸 볼 수 있다.


(어디가든 bot 이 문제야! ㅠㅠ)


그래서 이 bot 들의 로그를 남기지 않기 위해서는 다음과 같이 설정하여 주면 된다.


참조 : https://bjornjohansen.no/exclude-requests-from-nginx-access-log


map $http_user_agent $log_ua {

    ~Pingdom 0;
    ~Googlebot 0;
    ~Baiduspider 0;

    default 1;
}

server {
       
    […]

    access_log /var/log/nginx/access.log main if=$log_ua;

}

user_agent 에 특정 문자열을 포함한 경우는 로그를 남기지 않게 설정할 수 있다.


이 설정을 응용하여 특정 ip 나 특정 refferer 에서 로그를 남기지 않게 설정할 수 있다.


위 설정 도입 후 모니터링 솔루션에서 수집되는 로그수가 많이 감소하였다.

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

[Tomcat] Data load time out 장애 조치

오늘 개발 중인 테스트 서버에서 장애가 접수되었다.


장애는 특정 데이터를 선택해서 그래프를 그려야 하는데 이 그래프를 그리기 위해서


서버쪽에서 response header 에 많은 chunked data 를 붙여서 응답한다.


근데 이 사이즈가 매우 커서 브라우저에서는 해당 data를 읽지 못하고 장애가 발생한 것.


하여 관련 옵션을 찾아 tomcat server.xml 에 추가 후 restart 하였다.


compression="on"

maxHttpHeaderSize="8192"


두개의 옵션을 <connector.../>


에 추가하여 주었고 다시 확인해보니 그래프 기능이 정상으로 동작하였다.



반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

[쇼핑몰] SSL 인증서 적용

꾸준히 만들고 있는 www.jaram.kr 쇼핑몰 사이트 (언제쯤 오픈할 수 있을련지 ㅠㅠ 눙물)


SSL 인증서를 도입하였다. 아무래도 회원가입이나 로그인, 카트 같은 개인정보가 필요한 쇼핑몰이다 보니


보안을 위해서 HTTPS 적용을 염두에 두고는 있었는데.. 발급비용이나 갱신비용때문에 선듯 도입을 하지 않았다.


(근데 대부분의 쇼핑몰에 SSL 적용이 안되어 있더라?!? 시행법인데?? 뭐지?)


근데 Let's Encrypt 에 대해서 우연히 알게되었다.


아니 이것은 오오!?!?


SSL의 확산을 위해서 여러 재단에서 만든 SSL 인증 기관! 이걸 사용하면 누구나 Free 로 SSL 을 발급 받을 수 있다.


다만 갱신 기간이 짧다. 3개월.. 하지만 이게 어딘가!


공식 사이트 : https://letsencrypt.org/

공식 사이트 : https://certbot.eff.org/

참고 사이트 : https://blog.outsider.ne.kr/1178


를 참고하여 SSL 인증서를 발급 받고 운영중인 NGINX 에 적용!


함께 HTTP2 프로토콜도 적용 완료! 


그리고 기본 HTTP 접속은 모두 HTTPS 로 연결되도록 해두었다.


추가로 내부에서 사용하는 nodejs 의 RESTful 주소를 정리했다. www.jaram.kr:포트번호/api_method 이런식으로


사용했는데 아무래도 보기에.. 좀 그래서 nginx 에서 /api/ location으로 proxy_pass 설정을 해주었다.


그리고 내부에 들어가있는 소스들을 모두 https://www.jaram/api/method 형식으로 변경 후 테스트도 완료!


오늘 작업 끝!


https://www.jaram.kr



반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

진행중인 프로젝트 목록

기본적인 디자인들은 bootstrap 유료 디자인을 판매하는 wrapbootstrap 에서 구매하여 사용하고 있습니다.


회사

1. javascript + nodejs + expressjs + bootstrap ui 사용한 서버실 관리 서비스 (회사 내부 VM / CentOS 7.1)




개인

1. javascript + angularjs + nodejs 쇼핑몰 (vultr 가상 호스팅 Tokyo Location / ubuntu 15.04  / nginx)


2. javascript + nodejs 창세기전 2 웹 게임 (개인 프로젝트 스프라이트 추출 단계)


창세기전2는 현재 스프라이트 추출은 거의 다 된 상태인데 맵 타일 위치를 못찾은 상태. 그리고 회사일이나 기타 사정으로 중지상태임. 하지만 시간을 내서 곧 웹 게임 제작을 꼭 해볼 생각임. (물론 개인 - 비공개 - 공부용! 저작권 라이선스를 준수합니다.)

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post