2016-09-28 2 views
3

Kubernetes에서 fluentd를 사용하여 진입 nginx 로그를 구문 분석하고 싶습니다. Logstash에서는 꽤 쉬웠지만 유창한 구문에 대해서는 혼란 스럽습니다.nginx 진입 로그를 유창하게 해석하십시오.

는 지금은 다음과 같은 규칙이 있습니다

<source> 
    type tail 
    path /var/log/containers/*.log 
    pos_file /var/log/es-containers.log.pos 
    time_format %Y-%m-%dT%H:%M:%S.%NZ 
    tag kubernetes.* 
    format json 
    read_from_head true 
    keep_time_key true 
</source> 

<filter kubernetes.**> 
    type kubernetes_metadata 
</filter> 

그리고 그 결과로 나는이 로그를 얻을 수를하지만, 해석 대상 외입니다 :

127.0.0.1 - [127.0.0.1] - user [27/Sep/2016:18:35:23 +0000] "POST /elasticsearch/_msearch?timeout=0&ignore_unavailable=true&preference=1475000747571 HTTP/2.0" 200 37593 "http://localhost/app/kibana" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Centos Chromium/52.0.2743.116 Chrome/52.0.2743.116 Safari/537.36" 951 0.408 10.64.92.20:5601 37377 0.407 200 
내가 할 수 필터 규칙을 적용 할

IP 주소, HTTP 방식 등으로 검색 할 수 있습니다. 어떻게 구현할 수 있습니까?

답변

4

파이프 라인은 logstash와 fluentd에서 매우 다릅니다. 그리고 작업 Kubernetes -> Fluentd -> Elasticsearch -> Kibana 솔루션을 만드는 데는 시간이 걸렸습니다.

<filter kubernetes.var.log.containers.nginx-ingress-controller-**.log> 
    type parser 
    format /^(?<host>[^ ]*) (?<domain>[^ ]*) \[(?<x_forwarded_for>[^\]]*)\] (?<server_port>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+[^\"])(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")? (?<request_length>[^ ]*) (?<request_time>[^ ]*) (?:\[(?<proxy_upstream_name>[^\]]*)\])?(?<upstream_addr>[^ ]*) (?<upstream_response_length>[^ ]*) (?<upstream_response_time>[^ ]*) (?<upstream_status>[^ ]*)$/ 
    time_format %d/%b/%Y:%H:%M:%S %z 
    key_name log 
    types server_port:integer,code:integer,size:integer,request_length:integer,request_time:float,upstream_response_length:integer,upstream_response_time:float,upstream_status:integer 
    reserve_data yes 
</filter> 

:

는 내 질문에

짧은 대답은 (나는 그것이 표준 패키지에서 제공되지 않는 이유를 궁금해) 유창 - 플러그인 파서에게 플러그인을 설치하고 kubernetes_metadata 후 필터를이 규칙을 배치하는 것입니다 예를 많이 긴 대답은 여기에 있습니다 : https://github.com/kayrus/elk-kubernetes/

0

당신은 멀티 포맷 파서 플러그인을 사용할 수 https://github.com/repeatedly/fluent-plugin-multi-format-parser

<match> 
    format multi_format 
    <pattern> 
    format json 
    </pattern> 
    <pattern> 
    format regexp... 
    time_key timestamp 
    </pattern> 
    <pattern> 
    format none 
    </pattern> 
</match> 

참고 : 필자는 필터 파서를 포함한 최종 구성 파일이 무엇인지 궁금합니다.