logstash->output->elasticsearch 동적 템플릿부터

20126 단어 Elasticsearch

logstash 인덱스 맵

"mappings": {
    "_default_": {
        "dynamic_templates": [
            {
                "string_fields": {
                    "mapping": {
                        "index": "analyzed",
                        "omit_norms": true,
                        "type": "string",
                        "fields": { "raw": { "index": "not_analyzed", "ignore_above": 256, "type": "string" } } },
                    "match": "*",
                    "match_mapping_type": "string"
                }
            }
        ],
        "_all": {
            "enabled": true
        },
        "properties": {
            "@version": {
                "type": "string",
                "index": "not_analyzed"
            },
            "geoip": {
                "dynamic": "true",
                "properties": {
                    "location": { "type": "geo_point" } }
            }
        }
    },
    "hkt_log": {
        "dynamic_templates": [
            {
                "string_fields": {
                    "mapping": {
                        "index": "analyzed",
                        "omit_norms": true,
                        "type": "string",
                        "fields": { "raw": { "index": "not_analyzed", "ignore_above": 256, "type": "string" } } },
                    "match": "*",
                    "match_mapping_type": "string"
                }
            }
        ],
        "_all": {
            "enabled": true
        },
        "properties": {
            "@timestamp": {
                "type": "date",
                "format": "dateOptionalTime"
            },
            "@version": {
                "type": "string",
                "index": "not_analyzed"
            },
            "geoip": {
                "dynamic": "true",
                "properties": {
                    "location": { "type": "geo_point" } }
            },            
            "host": {
                "type": "string",
                "norms": {
                    "enabled": false },
                "fields": {
                    "raw": { "type": "string", "index": "not_analyzed", "ignore_above": 256 } }
            },
            "message": {
                "type": "string",
                "norms": {
                    "enabled": false },
                "fields": {
                    "raw": { "type": "string", "index": "not_analyzed", "ignore_above": 256 } }
            },
            "path": {
                "type": "string",
                "norms": {
                    "enabled": false },
                "fields": {
                    "raw": { "type": "string", "index": "not_analyzed", "ignore_above": 256 } }
            },
            "type": {
                "type": "string",
                "norms": {
                    "enabled": false },
                "fields": {
                    "raw": { "type": "string", "index": "not_analyzed", "ignore_above": 256 } }
            }
        }
    }    
}

_ default _매핑


logstash의 출력 플러그인이elasticsearch일 때, logstash는 ES의 index 데이터에 현재'default'의 맵을 자동으로 생성합니다. 이 인덱스에 새로 추가된 type 맵핑은 이 default의 맵을 계승합니다. 이 default 맵, _all 필드는 disabled로 인식됩니다. 이 필드는 기본적으로 @version 필드를 추가합니다.geoip 필드dynamictrue는 이 필드에 동적으로 새 필드를 추가할 수 있음을 나타냅니다.
다음 type hkt_log는 default의 맵 내용을 계승합니다.

dynamic_templates


dynamic_를 통해templates, 새로운 필드에 대한 동적 맵 규칙을 완전히 제어할 수 있습니다.필드 이름이나 유형에 따라 다른 맵 규칙을 사용할 수 있도록 설정합니다.
모든 템플릿에는 이름이 하나 있는데, 이 템플릿이 무엇을 했는지 설명할 수 있다.또한 맵핑은 구체적인 맵 정보를 지정하는 데 사용되고, 최소한 매개 변수 (예를 들어 match) 는 어떤 필드에 이 템플릿을 사용해야 하는지를 규정하는 데 사용됩니다.
템플릿의 일치는 순서가 있습니다. 첫 번째 일치하는 템플릿이 사용됩니다.
위의 logstash 템플릿에서 모든 문자열 필드의 통계 설정 템플릿을 정의합니다.
{
    "string_fields": {
        "mapping": {
            "index": "analyzed",
            "omit_norms": true,
            "type": "string",
            "fields": {
                "raw": {
                    "index": "not_analyzed",
                    "ignore_above": 256,
                    "type": "string" }
            }
        },
        "match": "*",
        "match_mapping_type": "string"
    }
}
  • string_fields는 템플릿 이름입니다. 모든 문자열 필드는 통일적으로 정의됩니다
  • match_mapping_type는 표준 동적 맵 규칙과 같이string,long 등 특정 형식의 필드에만 템플릿을 사용할 수 있습니다
  • match 매개 변수는 필드 이름만 일치합니다..
  • 그리고 path_match 매개 변수는 대상의 필드와 일치하는 전체 경로에 사용됩니다. 예를 들어address.*입니다.name 은 다음 필드와 일치합니다
    {
        "address":
            "city":
                "name": "New York"
            }
        }
    }
  • unmatch 및 path_unmatch 모드는 일부 필드를 제외하는 데 사용할 수 있으며, 제외되지 않은 필드는 일치합니다..
  • fields는 다중 필드 속성으로 만약에message라고 하는 필드가 있다면 하위 필드의 메시지가 있음을 나타낸다.raw, 메시지 필드의 원시 내용이 저장되어 있으며 분석기에 의해 분석되지 않습니다.
  • "index": "not_analyzed"필드 내용을 분석하지 않습니다
  • "ignore_above": 256에서 최대 256자를 처리합니다
  • "type": "string"문자열 형식


  • hkt_log 형식 매핑


    우리는 hkt_를 볼 수 있다log 형식의 맵은default의 맵 내용을 완전히 계승하고 특정한 필드를 동적으로 추가하지만 모든 문자열 필드가string_를 따르는 것을 볼 수 있습니다fields 템플릿의 정의, 예를 들어 메시지 필드:
    "message": {
        "type": "string",
        "norms": {
            "enabled": false
        },
        "fields": {
            "raw": {
                "type": "string",
                "index": "not_analyzed",
                "ignore_above": 256
            }
        }
    }

    메시지는 분석기가 분석하지 않은 원시적인 내용을 저장하는 하위 섹션raw가 있습니다.
    그럼 많아졌어요. 이런 필드가 뭐가 좋을까요?우리 먼저 hkt_log에 문서 추가:
    put logstash-2015.10.01/hkt_log/1
    {
        "message": "jfy/zhyy?123",
        "@version": "1",
        "@timestamp": "2015-11-12T03:14:41.435Z",
        "type": "hostapd1_log",
        "host": "server114",
        "path": "/root/hostapd/hostapd1.log"
    }

    다음 검색 메시지 필드에 포함됩니까?의 문서:
    {
      "query":{
        "regexp":{
          "message":{"value":".*\\?.*"}
        }
      }
    }

    결과를 찾을 수 없습니다.
    {
      "query":{
        "regexp":{
          "message.raw":{"value":".*\\?.*"}
        }
      }
    }

    조회할 수 있습니다.
    메시지 필드 내용 때문에 "jfy/zhyyy?123'은 분석기에 의해 분석된 후 세 단어로 변했다. jfy,zhyy,123, 그중의'/'와'?'분석기는 무시했다.
    POST logstash-2015.10.01/_analyze
    jfy/zhyy?123
    
    {
        "tokens": [
            {
                "token": "jfy",
                "start_offset": 0,
                "end_offset": 3,
                "type": "",
                "position": 1
            },
            {
                "token": "zhyy",
                "start_offset": 4,
                "end_offset": 8,
                "type": "",
                "position": 2
            },
            {
                "token": "123",
                "start_offset": 9,
                "end_offset": 12,
                "type": "",
                "position": 3
            }
        ]
    }

    메시지.raw는 원형으로 저장되어 있기 때문에 어댑터로 조회할 수 있습니다.

    좋은 웹페이지 즐겨찾기