Fluentd Installation ( ruby gem )
728x90

환경 : CentOS 6.10

 

fluentd 에 내장되 있는 ruby는 컴파일 할 때 박살이 날 수 있다.

기존에 설치한 td-agent(fluentd)에서 azure-loganalytics 플러그인을 설치할 때 

Building native extensions.  This could take a while...
ERROR:  Error installing fluent-plugin-azure-loganalytics:
        ERROR: Failed to build gem native extension.

    current directory: /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/unf_ext-0.0.8.2/ext/unf_ext
/opt/td-agent/embedded/bin/ruby -r ./siteconf20220725-12736-1xscryi.rb extconf.rb
checking for -lstdc++... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/opt/td-agent/embedded/bin/$(RUBY_BASE_NAME)
        --with-static-libstdc++
        --without-static-libstdc++
        --with-stdc++lib
        --without-stdc++lib
/opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:468:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:553:in `try_link0'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:568:in `try_link'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:787:in `try_func'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:1014:in `block in have_library'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:957:in `block in checking_for'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:351:in `block (2 levels) in postpone'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:321:in `open'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:351:in `block in postpone'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:321:in `open'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:347:in `postpone'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:956:in `checking_for'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:1009:in `have_library'
        from extconf.rb:6:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /opt/td-agent/embedded/lib/ruby/gems/2.4.0/extensions/x86_64-linux/2.4.0/unf_ext-0.0.8.2/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/unf_ext-0.0.8.2 for inspection.
Results logged to /opt/td-agent/embedded/lib/ruby/gems/2.4.0/extensions/x86_64-linux/2.4.0/unf_ext-0.0.8.2/gem_make.out

이러한 Exception 이 뜨면서 설치가 안되는 상황이 발생했다.

 

fluentd 의 내장되 있는 ruby를 업그레이드 하려고 해도 되지 않고 ruby를 따로 설치해서 /etc/init.d/td-agent 스크립트에서 환경변수 경로를 설치한 ruby로 설정 하려고 하니 귀찮아서 ruby를 설치 후 gem 으로 fluentd 플러그인을 설치 했다.

ruby 설치는 rvm 과 rbenv가 있는데 rvm 과 rbenv의 차이점은 rbenv가 좀 더 가볍다는 차이이다. 나는 예전에 rvm으로 ruby 설치를 하다가 잘못된 적이 있으므로 rbenv로 설치해보려고 한다.

필수 Dependency 설치

sudo yum install git-core zlib zlib-devel gcc-c++ patch readline readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison curl sqlite-devel

설치 안하면 rbenv 설치하다가 에러난다.

Ruby 설치

rbenv 라는 녀석으로 ruby를 설치하도록 한다.

sudo curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash

Ruby 환경 변수 설정

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

저 위에 걸 하기 싫다면 

sudo vi /etc/profile(전 사용자) 또는 현재 사용자에만 설정하고 싶다면 sudo vi ~/.bashrc 후

맨 밑에 
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)" 한 후 :wq! 로 저장 후에 

source /etc/profile 또는 source ~/.bashrc

설치 가능 버전 확인

rbenv install -l

2.6.10
2.7.3
3.0.1
jruby-9.2.19.0
mruby-3.0.0
rbx-5.0
truffleruby-21.1.0
truffleruby+graalvm-21.1.0

설치 후 global 등록

rbenv install 2.6.10

rbenv global 2.6.10

ruby --version
2.6.10

설치가 완료되었다면 ~/.rbenv/versions/2.6.10/bin 으로 이동 후

sudo ./gem install fluentd    # -v 옵션 없이 install 시 최신 버전으로 설치됨

그리고 nokogiri 라는 놈이 있는데 이 녀석은 glibc 2.17 버전을 넘는 녀석으로 컴파일을 해야지 되기 때문에 현재 사용하고 있는 서버인 CentOS6.10 에 있는 glibc 2.12로 컴파일 하다가는 Exception 파티가 난다.

그러므로

sudo ./gem install nokogiri --platform=ruby 

명령어로 컴파일이 완료된 녀석을 설치해주도록 하자. 그러면 컴파일 과정을 거치지 않고 넘어가게 된다.

그 후에 플러그인 설치

# path : ~/.rbenv/versions/2.6.10/bin

sudo ./gem install <plugin-name> [option]

Fluentd 실행 명령어 및 옵션

# command : sudo ./fluentd -h 누르면 나옴
Usage: fluentd [options]
    -s, --setup [DIR=/etc/fluent]    디렉토리에 샘플 구성 파일 설치
    -c, --config PATH                설정파일 경로 (default: /etc/fluent/fluent.conf)
        --dry-run                    설정파일 검사(fluentd 실행 x)
        --show-plugin-config=PLUGIN  [DEPRECATED] Show PLUGIN configuration and exit(ex: input:dummy)
    -p, --plugin DIR                 add plugin directory
    -I PATH                          add library path
    -r NAME                          load library
    -d, --daemon PIDFILE             fluentd 데몬화

        --under-supervisor           run fluent worker under supervisor (this option is NOT for users)
        --no-supervisor              run fluent worker without supervisor
        --workers NUM                specify the number of workers under supervisor
        --user USER                  user 변경
        --group GROUP                group 변경
        --umask UMASK                change umask
    -o, --log PATH                   fluentd 로그 파일 경로
        --log-rotate-age AGE         generations to keep rotated log files
        --log-rotate-size BYTES      sets the byte size to rotate log files
        --log-event-verbose          enable log events during process startup/shutdown
    -i CONFIG_STRING,                inline config which is appended to the config file on-the-fly
        --inline-config
        --emit-error-log-interval SECONDS
                                     suppress interval seconds of emit error logs
        --suppress-repeated-stacktrace [VALUE]
                                     suppress repeated stacktrace
        --without-source             invoke a fluentd without input plugins
        --use-v1-config              Use v1 configuration format (default)
        --use-v0-config              Use v0 configuration format
        --strict-config-value        Parse config values strictly
        --enable-input-metrics       Enable input plugin metrics on fluentd
        --enable-size-metrics        Enable plugin record size metrics on fluentd
    -v, --verbose                    increase verbose level (-v: debug, -vv: trace)
    -q, --quiet                      decrease verbose level (-q: warn, -qq: error)
        --suppress-config-dump       suppress config dumping when fluentd starts
    -g, --gemfile GEMFILE            Gemfile path
    -G, --gem-path GEM_INSTALL_PATH  Gemfile install path (default: $(dirname $gemfile)/vendor/bundle)
        --conf-encoding ENCODING     specify configuration file encoding
        --disable-shared-socket      Don't open shared socket for multiple workers

fluentd 실행 명령어

sudo ./fluentd --user root --group root --daemon /var/run/fluentd.pid

user, group을 root로 한 이유는 설정 없이 그냥 실행시키면 권한 문제 때문에 에러난다. 

fluentd 실행을 서비스 등록한 것은

2022.07.25 - [OS/Linux] - Linux (CentOS 6)

 

Linux (CentOS 6)

Linux (CentOS)에서 init.d 등록하기 fluentd 를 설치했는데 실행, 재실행, 중지 명령어를 bin 폴더로 들어가서 하는게 귀찮아서 서비스 등록해서 사용하려고 한다. centos7은 이 설정과 다르니 다른 블로그

my-trash-code.tistory.com

여기에 script 문하고 나와있다.

 

아직까지는 Exception이 발생하지 않는 것으로 보여 이렇게 설치한 뒤 해도 될거 같다.

 

끝!

728x90

'Fluentd > 적용' 카테고리의 다른 글

Fluentd Config 파일 분리하기  (0) 2022.07.25
Fluentd + Azure Loganalytics  (0) 2022.07.25
Fluentd access log 500 에러만 남기기  (0) 2022.06.23
Fluentd + MongoDB  (0) 2022.05.10
Fluentd Test  (0) 2022.05.06