2014-12-17 7 views
5

Io uso logstash + elasticsearch per raccogliere syslog e voglio impostare TTL per log invecchiamentoposso impostare logstash mappatura elasticsearch predefinita attraverso elasticsearch-template.json

trovo un file chiamato elasticsearch-template.json nel logstash, il percorso è logstash/logstash-1.4.2/lib/logstash/uscite/elasticsearch/elasticsearch-template.json

aggiungo informazioni TTL nel file in questo modo:

{ 
    "template" : "logstash-*", 
    "settings" : { 
    "index.refresh_interval" : "5s" 
    }, 
    "mappings" : { 
    "_default_" : { 
     "_all" : {"enabled" : true}, 
     "dynamic_templates" : [ { 
     "string_fields" : { 
      "match" : "*", 
      "match_mapping_type" : "string", 
      "mapping" : { 
      "type" : "string", "index" : "analyzed", "omit_norms" : true, 
       "fields" : { 
       "raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256} 
       } 
      } 
     } 
     } ], 
     "_ttl": { 
     "enabled": true, 
     "default": "1d" 
     }, 
     "properties" : { 
     "@version": { "type": "string", "index": "not_analyzed" }, 
     "geoip" : { 
      "type" : "object", 
      "dynamic": true, 
      "path": "full", 
      "properties" : { 
       "location" : { "type" : "geo_point" } 
      } 
     } 
     } 
    } 
    } 
} 

quindi riavviare logstash, eliminare tutto l'indice elasticsearch. Controllo la mappatura del nuovo indice in elasticsearch, ma non ha funzionato in questo modo.

Come posso configurare il modello di indice?

+0

Per i nuovi visitatori, non c'è un plugin chiamato "Kopf" con un sacco di funzioni. Uno di questi è modificare facilmente il modello e salvarlo in un editor. Cose come cambiare il numero di frammenti/replica in base al tuo cluster, ecc. – Maziyar

risposta

2

Non sembra che il file JSON sia nella cartella corretta. Ecco la documentazione su come utilizzare i modelli: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-templates.html Informazioni sulla cartella:

Config

modelli indice può anche essere posizionato all'interno del percorso di configurazione (path.conf) nella directory dei modelli (nota, fare sicuro di posizionarli su tutti i nodi principali idonei). Ad esempio, un file chiamato template_1.json può essere inserito in config/templates e verrà aggiunto se corrisponde a un indice. Ecco un esempio del file menzionato:

+0

grazie per la risposta. Trovo la configurazione (path.conf) in "/elasticsearch-1.4.0/config/elasticsearch.yml", ma come impostare il modello di indice da utilizzare in questo modo? Mi dispiace, non vedo il tuo file di esempio. – user4369887

+0

Basta creare la cartella dei modelli all'interno della cartella config e copiare il file JSON. Quindi riavvia ES e dovresti avere la mappatura. –

8

è necessario modificare la configurazione del logstash.

se hai seguito le impostazioni predefinite, logstash ha già creato un modello all'interno di elasticsearch chiamato logstash, logstash continuerà a utilizzare quel modello memorizzato in elasticsearch a meno che tu non lo dica esplicitamente.

modificare quel file di modello che hai trovato, ma in aggiunta a ciò, nella configurazione logstash, impostare la seguente:

output { 
    elasticsearch { 
    ... 
    template_overwrite => true 
    ... 
    } 
} 
+1

Come posso accedere al file modello logstash? dove si trova? – learner

+1

Dovrebbe essere nella directory logstash, se non la trovi puoi sempre crearne una e chiedere a logstash di usare il file modello personalizzato nel file di configurazione di logstash. Aggiungi 'modello =>"/percorso/a/elasticsearch_template.json "\ n template_name =>" the_name_you_want "' nella configurazione del logstash. Ho degli esempi qui: https://github.com/xialingxiao/andokaelk/blob/master/roles/logstash/templates/logstash_connector.conf per la configurazione di logstash e https://github.com/xialingxiao/andokaelk/blob/master/roles/logstash/templates/elasticsearch_template.json per elasticsearch_template. – lingxiao

+0

Si noti che il campo 'template' in' elasticsearch_template.json' deve essere compatibile con elasticsearch ' index' nome logstash sta scrivendo su configurato in 'logstash.conf'. – lingxiao

0

ho creato nuovo file template.json e il percorso definito in modo da in blocco di uscita elasticsearch di logstash.yml file di configurazione:

stdout { codec => json_lines } 

elasticsearch { 

"hosts" => ["ip:port"] 
"index" => "name-of-index-%{+dd.MM.YYYY}" 
template => "/{path-to-logstash-folder}/templates/your-template.json" 
template_overwrite => true 
manage_template => false 
} 

DOCUMENT_TYPE per elastico ho definito nel blocco di ingresso del file di configurazione logstash.yml:

input { 

file { 
path => "/your-path-to-directory/*.log" 
type => "name-of-type" 
} 
} 

C'è il mio file template.json

{ 
"name-of-index": { 
"order": 0, 
"version": 50001, 
"template": "name-of-index-*", 
"settings": { 
    "index": { 
    "refresh_interval": "5s" 
    } 
}, 
"mappings": { 
    "_default_": { 
    "dynamic_templates": [ 
     { 
     "message_field": { 
      "path_match": "message", 
      "mapping": { 
      "norms": false, 
      "type": "text" 
      }, 
      "match_mapping_type": "string" 
     } 
     }, 
     { 
     "string_fields": { 
      "mapping": { 
      "norms": false, 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword" 
       } 
      } 
      }, 
      "match_mapping_type": "string", 
      "match": "*" 
     } 
     } 
    ], 
    "_all": { 
     "norms": false, 
     "enabled": true 
    }, 
    "properties": { 
     "@timestamp": { 
     "include_in_all": false, 
     "type": "date" 
     }, 
     "geoip": { 
     "dynamic": true, 
     "properties": { 
      "ip": { 
      "type": "ip" 
      }, 
      "latitude": { 
      "type": "half_float" 
      }, 
      "location": { 
      "type": "geo_point" 
      }, 
      "longitude": { 
      "type": "half_float" 
      } 
     } 
     }, 
     "@version": { 
     "include_in_all": false, 
     "type": "keyword" 
     } 
    } 
    } 
}, 
"aliases": {} 
} 
}