개요
- Foward
- 포워드
Forward는 Fluentd에서 피어 간에 메시지를 라우팅하는 데 사용하는 프로토콜입니다. forward 출력 플러그인은 Fluent Bit와 Fluentd 간의 상호운용성을 제공합니다. Fluentd가 있는 위치(로컬 또는 원격 목적지)를 지정하는 것 외에 필요한 설정 단계는 없습니다.
이 플러그인은 두 가지 전송 및 모드를 제공합니다.
- Forward (TCP): 플레인 TCP 연결을 사용합니다.
- Secure Forward (TLS): TLS가 활성화되면, 플러그인이 Secure Forward 모드로 전환됩니다.
설정 파라미터
다음 파라미터들은 Forward 또는 Secure Forward 모드에 필수입니다.
| 키 | 설명 | 기본값 |
|---|---|---|
| Host | Fluent-Bit 또는 Fluentd가 Forward 메시지를 수신하는 대상 호스트 | 127.0.0.1 |
| 포트 | 대상 서비스의 TCP 포트 | 24224 |
| Time_as_Integer | 타임스탬프 정수 형식 설정. Fluentd v0.12 계열에 대한 호환성 모드가 활성화됩니다. | False |
| Upstream | Forward가 단순 호스트 대신 업스트림에 연결하는 경우, 이 속성은 업스트림 설정 파일의 절대 경로를 정의합니다. 이에 대한 자세한 내용은 업스트림 서버 문서 섹션을 참조하세요. | |
| Unix_Path | 전달 메시지를 보낼 유닉스 소켓의 경로를 지정합니다. 설정된 경우 Upstream무시됩니다. | |
| Tag | 전송하는 동안 태그를 덮어씁니다. 이를 통해 수신 파이프라인이 새로 시작되거나 소스 속성을 지정할 수 있습니다. | |
| Send_options | 항상 보내기 옵션 ("size"=메시지 개수) | False |
| Require_ack_response | "청크" 옵션을 보내고 서버로부터 "ack" 응답을 기다립니다. 최소 한 번 활성화하고 수신 서버가 트래픽 속도를 제어할 수 있습니다. (Fluentd v0.14.0+ 서버 필요) | False |
| Compress | gzip 압축을 활성화하려면 "gzip"으로 설정하세요. Time_as_Integer=True 및 Rewrite Tag 필터를 사용하여 동적으로 설정된 태그와 호환되지 않습니다. (Fluentd v0.14.7+ 서버 필요) | |
| Workers | 이 출력에 대한 전용 스레드를 활성화합니다. 기본값은 1.8.13 버전부터 설정되어 있습니다. 이전 버전의 경우 0입니다. | 2 |
Secure Forward 모드 설정 파라미터
Secure Forward 모드를 사용하는 경우, TLS 모드를 활성화해야 합니다. 다음과 같은 추가 설정 파라미터를 사용할 수 있습니다.
| 키 | 설명 | 기본값 |
|---|---|---|
| Shared_Key | 인증에 사용되는 원격 Fluentd에 알려진 키 문자열 | |
| Empty_Shared_Key | 길이가 0인 시크릿을 사용하여 Fluentd에 연결하려면 이 옵션을 사용하세요. | False |
| Username | user_auth를 활성화하는 Fluentd 서버에 표시할 사용자명을 지정합니다.
|
|
| Password | 사용자명에 대응되는 패스워드를 지정합니다. | |
| Self_Hostname | 자동생성된 인증서 common name (CN)의 기본값 | localhost |
| tls | TLS 지원 활성화 또는 비활성화 | Off |
| tls.verify | 인증서 검증 강제화 | On |
| tls.debug | TLS 디버그 상세 수준을 설정합니다. 다음 값을 허용합니다: 0(디버그 없음), 1(오류), 2(상태변경), 3(정보), 4(Verbose) | 1 |
| tls.ca_file | CA 인증서 파일의 절대 경로 | |
| tls.crt_file | 인증서 파일의 절대 경로 | |
| tls.key_file | 개인키 파일의 절대 경로 | |
| tls.key_passwd | tls.key_file 파일의 선택적 패스워드 |
Forward 셋업
진행하기 전에, Fluentd가 설치되어 있는지 확인하시고, 설치되지 않은 경우에는 다음의 Fluentd 설치 문서를 참고하여 진행하시기 바랍니다.
Fluentd가 설치되면, 데이터를 스트리밍할 수 있는 다음 설정 파일 예제를 만듭니다.
<source>
type forward
bind 0.0.0.0
port 24224
</source>
<match fluent_bit>
type stdout
</match>
이 설정 파일은 forward 입력 유형을 통해 포트 24224에서 TCP 연결을 수신하도록 지정합니다. 그런 다음 fluent_bit TAG가 있는 모든 메시지에 대해 메시지를 표준 출력으로 프린트합니다.
터미널에서 생성된 새 설정 파일을 지정하여 Fluentd를 기동합니다.
$ fluentd -c test.conf
2017-03-23 11:50:43 -0600 [info]: reading config file path="test.conf"
2017-03-23 11:50:43 -0600 [info]: starting fluentd-0.12.33
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.1'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-docker' version '0.1.0'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-elasticsearch' version '1.4.0'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-flatten-hash' version '0.2.0'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-flowcounter-simple' version '0.0.4'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-influxdb' version '0.2.8'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-json-in-json' version '0.1.4'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-mongo' version '0.7.10'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-out-http' version '0.1.3'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-parser' version '0.6.0'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-record-reformer' version '0.7.0'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '1.5.1'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-stdin' version '0.1.1'
2017-03-23 11:50:43 -0600 [info]: gem 'fluent-plugin-td' version '0.10.27'
2017-03-23 11:50:43 -0600 [info]: adding match pattern="fluent_bit" type="stdout"
2017-03-23 11:50:43 -0600 [info]: adding source type="forward"
2017-03-23 11:50:43 -0600 [info]: using configuration file: <ROOT>
<source>
type forward
bind 0.0.0.0
port 24224
</source>
<match fluent_bit>
type stdout
</match>
</ROOT>
2017-03-23 11:50:43 -0600 [info]: listening fluent socket on 0.0.0.0:24224
Fluent Bit + Forward 셋업
이제 메시지를 수신할 준비가 되었으므로 다음 형식을 사용하여 forward 출력 플러그인이 정보를 플러시할 위치를 지정해야 합니다 .
bin/fluent-bit -i INPUT -o forward://HOST:PORT
TAG 파라미터가 설정되지 않은 경우 플러그인은 태그를 유지합니다. TAG는 Fluentd 내부의 라우팅 규칙에 중요하다는 점을 기억하세요.
CPU 입력 플러그인을 사용하면 fluent_bit 태그를 사용하여 CPU 메트릭을 Fluentd로 플러시합니다 .
$ bin/fluent-bit -i cpu -t fluent_bit -o forward://127.0.0.1:24224
이제 Fluentd 측에서는, 마지막 몇 초 동안 수집된 CPU 메트릭을 볼 수 있습니다.
2017-03-23 11:53:06 -0600 fluent_bit: {"cpu_p":0.0,"user_p":0.0,"system_p":0.0,"cpu0.p_cpu":0.0,"cpu0.p_user":0.0,"cpu0.p_system":0.0,"cpu1.p_cpu":0.0,"cpu1.p_user":0.0,"cpu1.p_system":0.0,"cpu2.p_cpu":0.0,"cpu2.p_user":0.0,"cpu2.p_system":0.0,"cpu3.p_cpu":1.0,"cpu3.p_user":1.0,"cpu3.p_system":0.0}
2017-03-23 11:53:07 -0600 fluent_bit: {"cpu_p":2.25,"user_p":2.0,"system_p":0.25,"cpu0.p_cpu":3.0,"cpu0.p_user":3.0,"cpu0.p_system":0.0,"cpu1.p_cpu":1.0,"cpu1.p_user":1.0,"cpu1.p_system":0.0,"cpu2.p_cpu":1.0,"cpu2.p_user":1.0,"cpu2.p_system":0.0,"cpu3.p_cpu":3.0,"cpu3.p_user":2.0,"cpu3.p_system":1.0}
2017-03-23 11:53:08 -0600 fluent_bit: {"cpu_p":1.75,"user_p":1.0,"system_p":0.75,"cpu0.p_cpu":2.0,"cpu0.p_user":1.0,"cpu0.p_system":1.0,"cpu1.p_cpu":3.0,"cpu1.p_user":1.0,"cpu1.p_system":2.0,"cpu2.p_cpu":3.0,"cpu2.p_user":2.0,"cpu2.p_system":1.0,"cpu3.p_cpu":2.0,"cpu3.p_user":1.0,"cpu3.p_system":1.0}
2017-03-23 11:53:09 -0600 fluent_bit: {"cpu_p":4.75,"user_p":3.5,"system_p":1.25,"cpu0.p_cpu":4.0,"cpu0.p_user":3.0,"cpu0.p_system":1.0,"cpu1.p_cpu":5.0,"cpu1.p_user":4.0,"cpu1.p_system":1.0,"cpu2.p_cpu":3.0,"cpu2.p_user":2.0,"cpu2.p_system":1.0,"cpu3.p_cpu":5.0,"cpu3.p_user":4.0,"cpu3.p_system":1.0}
CPU 메트릭이 수집되여 Fluentd에 적절하게 플러시되었습니다.
Fluent Bit + Secure Forward 셋업
면책조항: 다음 예시에서는 프로덕션 환경의 모범 사례에 대한 인증서 생성을 고려하지 않습니다.
Secure Forward는 TLS를 사용하여 원격 Fluentd 서비스와의 통신 보안 채널을 제공하는 것을 목표로 합니다 .
Fluent Bit
flb.conf라는 파일에 이 내용을 붙여 넣습니다 .
[SERVICE]
Flush 5
Daemon off
Log_Level info
[INPUT]
Name cpu
Tag cpu_usage
[OUTPUT]
Name forward
Match *
Host 127.0.0.1
Port 24284
Shared_Key secret
Self_Hostname flb.local
tls on
tls.verify off
Fluentd
fld.conf라는 파일에 이 내용을 붙여 넣습니다 .
<source>
@type secure_forward
self_hostname myserver.local
shared_key secret
secure no
</source>
<match **>
@type stdout
</match>
Fluentd v1을 사용하는 경우, 아래와 같이 설정하세요.
<source>
@type forward
<transport tls>
cert_path /etc/td-agent/certs/fluentd.crt
private_key_path /etc/td-agent/certs/fluentd.key
private_key_passphrase password
</transport>
<security>
self_hostname myserver.local
shared_key secret
</security>
</source>
<match **>
@type stdout
</match>
통신 테스트
Fluentd 시작하기
$ fluentd -c fld.conf
Fluent Bit 시작하기
$ fluent-bit -c flb.conf
5초 후에, Fluent Bit는 Fluentd에 레코드를 씁니다. Fluentd 출력에 다음과 같은 메시지가 표시됩니다.
2017-03-23 13:34:40 -0600 [info]: using configuration file: <ROOT>
<source>
@type secure_forward
self_hostname myserver.local
shared_key xxxxxx
secure no
</source>
<match **>
@type stdout
</match>
</ROOT>
2017-03-23 13:34:41 -0600 cpu_usage: {"cpu_p":1.0,"user_p":0.75,"system_p":0.25,"cpu0.p_cpu":1.0,"cpu0.p_user":1.0,"cpu0.p_system":0.0,"cpu1.p_cpu":2.0,"cpu1.p_user":1.0,"cpu1.p_system":1.0,"cpu2.p_cpu":1.0,"cpu2.p_user":1.0,"cpu2.p_system":0.0,"cpu3.p_cpu":2.0,"cpu3.p_user":1.0,"cpu3.p_system":1.0}
2017-03-23 13:34:42 -0600 cpu_usage: {"cpu_p":1.75,"user_p":1.75,"system_p":0.0,"cpu0.p_cpu":3.0,"cpu0.p_user":3.0,"cpu0.p_system":0.0,"cpu1.p_cpu":2.0,"cpu1.p_user":2.0,"cpu1.p_system":0.0,"cpu2.p_cpu":0.0,"cpu2.p_user":0.0,"cpu2.p_system":0.0,"cpu3.p_cpu":1.0,"cpu3.p_user":1.0,"cpu3.p_system":0.0}
2017-03-23 13:34:43 -0600 cpu_usage: {"cpu_p":1.75,"user_p":1.25,"system_p":0.5,"cpu0.p_cpu":3.0,"cpu0.p_user":3.0,"cpu0.p_system":0.0,"cpu1.p_cpu":2.0,"cpu1.p_user":2.0,"cpu1.p_system":0.0,"cpu2.p_cpu":0.0,"cpu2.p_user":0.0,"cpu2.p_system":0.0,"cpu3.p_cpu":1.0,"cpu3.p_user":0.0,"cpu3.p_system":1.0}
2017-03-23 13:34:44 -0600 cpu_usage: {"cpu_p":5.0,"user_p":3.25,"system_p":1.75,"cpu0.p_cpu":4.0,"cpu0.p_user":2.0,"cpu0.p_system":2.0,"cpu1.p_cpu":8.0,"cpu1.p_user":5.0,"cpu1.p_system":3.0,"cpu2.p_cpu":4.0,"cpu2.p_user":3.0,"cpu2.p_system":1.0,"cpu3.p_cpu":4.0,"cpu3.p_user":2.0,"cpu3.p_system":2.0}