과거 influxdb 1에서 grafana 연동 후 사용하는 쿼리는 influxql 기반으로 호출을 하였었고 호출한 데이터의 legend를 위와 같이 ALIAS BY로 재정의 할 수 있었다. 그러나 최근 influxdb 2 기반에서는 사용하는 쿼리가 flux로 변경이 되었고 grafana 에서 과거와 같이 alias by 를 사용할 수 없어 대체 방법을 찾아보았고 아래와 같은 방법으로 사용하면 된다. 오른쪽의 Overrides 탭을 선택하여 Fields with name 추가 후 변경하고자 하는 Legend 를 선택하고 Add override property를 클릭하여 Standard options > Display name을 추가한 뒤 사용하고자 하는 필드명을 입력한다. 끝. 참고사이트 : 정규표현식의..
Read More각 서비스의 접속 지역을 확인하기 위해 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 (리버스 프록시 서버) --- WAS (각 어플리케이션 서버) --- 백엔드 (DB, 스토리지 등) 여기서 유저는 가장 상단의 Nginx 서버에만 접근이 가능하다. 이러한 구성은 기본적으로 보안이나 관리 등에 용이하다. 그리고 각 서버들의 상태 모니터링 및 로그 수집을 위해 2가지 시스템을 혼용하여 사용하는데 ELK 와 TICK 이 바로 그것이다. ELK는 Elasticsearch, Logstash, Kibana 를 지칭하는데 과거 버전에서 5.x 버전으로 업그레이드를 하면서 이 로그 수집방식이 Logstash-forward 대신에 beat 로 대체 되었다. 그래서 각 단말에 beat가 서버의 로그를 수집하여 Elasticsea..
Read More[모니터링] influxdb 2과 grafana 연동 시 과거 alias by 대체하기
과거 influxdb 1에서 grafana 연동 후 사용하는 쿼리는 influxql 기반으로 호출을 하였었고 호출한 데이터의 legend를
위와 같이 ALIAS BY로 재정의 할 수 있었다.
그러나 최근 influxdb 2 기반에서는 사용하는 쿼리가 flux로 변경이 되었고 grafana 에서 과거와 같이 alias by 를 사용할 수 없어 대체 방법을 찾아보았고 아래와 같은 방법으로 사용하면 된다.
오른쪽의 Overrides 탭을 선택하여 Fields with name 추가 후 변경하고자 하는 Legend 를 선택하고
Add override property를 클릭하여 Standard options > Display name을 추가한 뒤 사용하고자 하는 필드명을 입력한다.
끝.
참고사이트 : 정규표현식의 개념과 패턴 사용법 총정리 · Wireframe (soooprmx.com)
참고사이트 : RegExr: Learn, Build, & Test RegEx
참고사이트 : range() function | Flux 0.x Documentation (influxdata.com)
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 값은 "" 안에 있지만 정규식으로 추출해서 쓰는 문법으로 추정된다.
으음 아직 내공이 부족하다 ㅠㅠ
'Work/LINUX+SERVER' Related Articles / more
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-panel / https://github.com/grafana/worldmap-panel/issues/30
참고하여 설정 진행
3.3. World-Map 연동 확인
총평. 진행된 내용만 간략히 적었지만 사실 각 작업간에 많은 시행착오가 있었다. 물논 그런 시행착오가 없을 순
없다. 각 작업 내용은 다시 한번 정리해서 추후 포스팅 해야겠다.
Discuss about post