2017-10-23 18 views
0

Fluentd를 처음 사용했습니다. GKE에서 stackdriver를 사용하고 있으며 GKE에서 Fluentd 구성을 사용자 정의하여 로그를 일부 변경합니다. 내 컨테이너의 로그에 대한 내 구성 파일에서Fluentd로 로깅 - 왜 json 로그 파일의 출력이 textpayload (jsonpayload가 아닌)로 표시됩니까?

내가 가진 : 일부 컨테이너의

<source> 
    type tail 
    format json 
    time_key time 
    path /var/log/containers/*.log 
    pos_file /var/log/gcp-containers.log.pos 
    time_format %Y-%m-%dT%H:%M:%S.%N%Z 
    tag reform.* 
    read_from_head true 
</source> 

로그를 JSON objests,하지만 난이 활성화 할 때 나는 textpayload (그들의 출력을 볼 수 내장 Fluentd에에 GKE 그들은 jsonpayload로 나타납니다).

나는 무엇이 이것을 일으키는 지 이해하지 못합니다. 조언을 주시면 감사하겠습니다.

답변

0

Fluentd 추출기는 로그 입력을 구문 분석하는 방법을 알지 못합니다. 그래서 로그 행을 필드로 분할해야하며 Stackdriver Logging에 jsonpayload로 표시됩니다. 예를 들어 Nginx 액세스 로그 파서가 작동 중입니다.

<source> 
    @type tail 
    format /^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/ 
time_format %d/%b/%Y:%H:%M:%S %z 
    path /var/log/nginx/*.access.log 
    path_key log_path 
    pos_file /var/lib/google-fluentd/pos/nginx-access.pos 
    read_from_head true 
    tag nginx-access 
</source>