상세 컨텐츠

본문 제목

InfluxDB & Grafana 연결 문제 해결 (Bad Gateway, Bad Request, Error reading InfluxDB)

Log.Develop/DevOps

by bluayer 2021. 6. 24. 16:17

본문

서론

필자는 사내에서 InfluxDB로 시계열 데이터를 수집하고, Grafana로 해당 대쉬보드를 만드는 업무를 맡게 되었다.

그 과정에서 자연스럽게 InfluxDB와 Grafana를 연결하는 태스크가 있었는데, 해당 업무를 진행하던 중 겪었던 어이없던 이슈를 소개하고자 한다.

 

빠른 체크리스트

독자 여러분을 위해 빠른 체크리스트를 작성해봤다. 시간이 없으신 분들은 이것부터 빠르게 훑어보자.

  • (InfluxDB에 설정을 하지 않았다면) URL의 포트가 8086인가?
  • (InfluxDB에 설정을 하지 않았다면) URL의 prefix가 http인가?
  • (InfluxDB 버전이 1.x가 아니라면) Query Language로 Flux를 설정했는가?
  • InfluxDB Details에 Organization과 Token 값을 정확히 잘 넣었는가?
  • (도커를 사용하고 있다면) Docker Network를 통해 Grafana와 InfluxDB가 통신하고 있는가?

 

Bad Gateway

InfluxDB와 Grafana를 연동하다 보면 종종 발생하는 문제이다.

보통 Bad Gateway는 해당 리소스를 찾을 수 없어 아예 접근하지 못하는 상황에서 발생한다.

따라서 이 문제가 발생했다면, 무조건 네트워크 상으로 연결이 되는지 여부를 확인해야 한다.

특히, InfluxDB의 default port8086임을 기억하자.

(필자는 8806인 줄 알고 삽질하다 1시간을 날렸다...)

이렇게 해서 잘 연결되었는가? 아주 손쉽게 에러를 해결했다! 축하한다!!

이렇게 했는데 Bad Request 혹은 Error reading InfluxDB 라는 오류를 만났는가? 아래로 가보자!

 

Bad Request

InfluxDB에 연동 시도를 할 때 흔하게 만날 수 있는 문제이다.

특히 2.0으로 올라간지 얼마 안 된 지금 상황에서 더더욱 그렇다.

1.x 버전까지는 InfluxQL을 지원하지만, 2.0+부터는 InfluxQL을 지원하지 않는다!

따라서 만약 본인의 InfluxDB가 2.0+를 사용하고 있다면, Flux 방식을 선택해야 한다.

 

여기서 Flux를 선택할 수 있다.

 

아래와 같이 InfluxQL이 아닌 Flux를 선택하게 되면 연결해야 하는 정보부터 달라지는 것을 볼 수 있다.

 

InfluxQL 선택시
Flux 선택 시

 

해당 부분에 Organization과 Token을 넣어주도록 하자.

 

Error reading InfluxDB

사실 위의 문제들이 아니라면 이 문제가 최종 보스처럼 등장한다.

이럴 때는 Organization 이름이나 Token 값이 잘못되었을 가능성이 일차적으로 높다.

특히 Token 값은 값이 보이지 않기 때문에 틀렸을 가능성이 훨씬 높다.

두 가지를 한 번 확인해보도록 하자.

또한 http인지 https인지 잘 확인하도록 하자.

만약 ssl 설정을 influxdb에서 해 두었다면 괜찮겠지만, 아니라면 오류가 발생한다!

(이걸로도 한 시간을 날렸다...)

 

만약 도커를 사용하고 있다면,

Error Reading InfluxDB 혹은 Bad Gateway가 발생할 확률이 굉장히 높다(특히 전자)

특히 InfluxDB와 Grafana를 둘 다 각각 다른 컨테이너에 띄우는 경우라면 네트워크를 신경써야"만" 한다.

그럴 때는 Docker Network를 이용해보자.

 

1. 도커 네트워크 생성

# Docker Network 생성 명령어
# 네트워크의 이름이 influx-grafana이다.
$ docker network create influx-grafana

 

2. 컨테이너를 실행할 때 —network 옵션을 통해 네트워크 설정을 해주자.

# Grafana Latest 이미지로 컨테이너 실행
$ docker run -d -p 3000:3000 --name grafana --network influx-grafana grafana/grafana

# influxdb Latest 이미지로 컨테이너 실행
$ docker run -d -p 8086:8086 --name influx --network influx-grafana influxdb

 

3. 아래의 명령어를 통해 네트워크 설정이 잘 되어 있나 확인하고,

# Grafana Latest 이미지로 컨테이너 실행
# influx-grafana는 위에서 network 만들 때 쓴 이름이다.
$ docker network inspect influx-grafana

 

4. 그라파나 URL에 컨테이너 이름을 적어주자! => http://influx:8086/

(단, 포트 넘버는 docker run할 때 expose 하는 포트 넘버가 아니라 컨테이너 내부 포트 넘버이다.)

 

influx는 컨테이너 이름이다!

# 만약,
$ docker run -d -p 8087:8086 --name influx-master --network influx-grafana influxdb
# 라고 실행했다면
# http://influx-master:8086/
# 을 적는다는 것이다.

 

5. 나머지 InfluxDB Details는 Organization과 Token을 잘 넣어주기만 하면 된다.

 

결론

아주 쉬워보이지만, 필자는 삽질을 엄청나게 했다. (심지어 리서치도 잘 안 된다ㅠㅠ)

독자 여러분은 빠른 체크리스트를 통해 해당 문제들을 쉽게 해결하길 기원한다 😉

관련글 더보기

댓글 영역