환경 : 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)
여기에 script 문하고 나와있다.
아직까지는 Exception이 발생하지 않는 것으로 보여 이렇게 설치한 뒤 해도 될거 같다.
끝!
'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 |
Comment