Fluentd 버퍼 테스트 하기(2) - Gin구현 및 Fluentd연결

임태빈·2022년 1월 2일
0

project

목록 보기
2/4

안녕하세요.

갈비만두를 좋아하는 개발자 임태빈입니다.

"Fluentd 버퍼 테스트 하기(1) - 설계" 이라는 이름으로 포스팅했던 내용을 이어 Gin을 활용해 웹서버를 만들고 이를 fluentd와 연동해보겠습니다.

(첫번째 포스팅을 안보셨다면 이 링크를 통해 봐주시면 감사드리겠습니다.)

먼저 gin을 설치하기 위해 다음과 같은 코드를 입력하겠습니다.

go get -u github.com/gin-gonic/gin

설치가 완료되었다면 간단하게 GetMapping을 해보겠습니다.

package main

import (
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
)

func getting(c *gin.Context) {
	log.Println("testtest")
	c.String(http.StatusOK, "hello world")
}

func main() {
	//gin 선언하기
	router := gin.Default()
    //Get Mapping
	router.GET("/", getting)
	//서버 실행
    router.Run()
}

위 코드를 실행하시고 localhost:8080 에 들어가시면 hellow world를 확인하실 수 있습니다.

gin을 활용한 웹 서버를 구현했으니 그 다음으로는 fluentd 연동을 위한 작업을 진행해보겠습니다.

먼저 해야할 것은 fluentd한테 로그를 보내주는 모듈을 설치해야 합니다.

go get github.com/fluent/fluent-logger-golang/fluent

위 명령어를 통해 설치 하실 수 있습니다:)
그런 다음 gin으로 만든 코드에 추가해보겠습니다.

package main

import (
	"github.com/fluent/fluent-logger-golang/fluent"
	"github.com/gin-gonic/gin"
	"net/http"
)

var logError error
var logger *fluent.Fluent

func init() {
	logger, logError = fluent.New(fluent.Config{FluentNetwork: "tcp"})
	if logError != nil {
		panic(logError.Error())
	}
}

func getting(c *gin.Context) {
	tag := "myapp.log"
	var data = map[string]string{
		"foo":  "bar",
		"hoge": "hoge",
	}
	logger.Post(tag, data)
	c.String(http.StatusOK, "hello world")
}

func main() {
	//gin 선언하기
	router := gin.Default()
	//Get Mapping
	router.GET("/", getting)
	//서버 실행
	router.Run()
}

gin에서 해야할 부분은 이제 다 진행했습니다.

코드에 대해 간단하게 설명드리면 전체 변수로 logger와 logError를 선언해주고 init함수를 활용해 서버가 돌기전 fluentd log설정을 진행해주었습니다.

여기서 fluentd의 input plugin중 하나인 forward를 사용하기 위해서 FluentNetworkd 옵션에 "tcp"를 설정해 주었습니다. 그리고 fluentd로 값을 보내주기 위해 tag값과 data를 만들어 주었습니다.

이제 이 포스팅의 마지막 부분인 fluentd 의 docker image를 만들어 보겠습니다.

필용한 것은 총 2가지 입니다.

fluentd를 실행할 conf파일과 Docker image를 만들어주는 Dockerfile입니다.

먼저 fluentd를 실행할 conf파일을 생성해 보겠습니다.

저는 test.conf파일이라고 만들겠습니다.

# vi test.conf
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>
<match *.log>
  @type stdout
</match>

test.conf파일의 코드를 간단하게 설명하면 forward라는 input plugin을 활용해 데이터를 받고 stdout라는 plugin을 활용해 값을 출력하는 간단한 내용입니다.

FROM tae2089/ubuntu:1.1
WORKDIR /home/ubuntu
USER ubuntu
COPY test.conf /home/ubuntu
RUN sudo apt-get update -y
RUN sudo apt-get install -y git vim patch make bzip2 autoconf automake libtool bison curl ruby-full
RUN sudo gem install bundler
RUN sudo gem install fluentd

위 내용을 가지고 Dockerfile을 생성하시면 됩니다. 여기서 test.conf파일과 Dockerfile의 위치는 동일 선상에 있어야 합니다.

docker build . -t fluentd_test
docker run -it -d --rm --name fluentd_gin -p 24224:24224 fluentd_test:latest
docker exec -it agitated_elgamal sh -c "fluentd -c test.conf"

위 명령어를 순서대로 실행하시면 fluentd가 실행됩니다. 마지막으로 확인해야 하는것은 값이 들어오는 것입니다. postman을 활용하셔도 되고 아니면 브라우저에 직접 localhost:8080을 입력하셔서 들어가셔도 됩니다.

다음과 같이 나오시면 잘 실행하신 거라고 생각하시면 됩니다

이것으로 Gin 웹서버 구현 및 fluentd 연동이었습니다~~

다음 포스팅에서는 Fluentd와 fluentd 연동 및 버퍼 테스트 첫번째 케이스를 해보겠습니다.

profile
golang과 서버 개발을 하고 있는 개발자입니다.

0개의 댓글