2017-02-21 3 views
1

Edit: unten für die Lösung SieheGrafana 4 Templating mit Elasticsearch 5

Zeit ein Problem mit dem Templat in Grafana mit - versuchen, einen Drop-Down von Host-Namen von einigen Daten zu erhalten, in dem ich Fütterung über Logstash des Graphit Elasticsearch Plugin, damit ich in Grafana eine dynamische Vorlage erstellen kann.

Versionen sind Grafana 4.1.2 + Elasticsearch/Logstash 5.2.1

Die Abfragebegriffe in Grafana ich versuche zu verwenden, wie laut docs auf grafana Website folgt - http://docs.grafana.org/features/datasources/elasticsearch/:

{"find": "terms", "field": "host_name"} 

Dies funktioniert gut, wenn das Feld ein numerisches Feld ist - zB bekomme ich Ergebnisse in der Vorlage für metric_value, aber das scheint nicht für Text/String-Felder zu funktionieren. Ich frage mich, ob das vielleicht auf die Art und Weise zurückzuführen ist, wie ich die Felder erstelle oder aufnehme - Du kannst unten sehen, wie ich das versuche - beachte, ich habe "Keyword" - und "Text" -Typen dafür ausprobiert versucht, den Graphit Stil Metrik in einzelne Felder aufgeteilt grundsätzlich - - Felder, scheinen weder arbeiten zu

Dies ist die Logstash Eingangsfilter, die ich benutze.

input { 
    graphite { 
    type => graphite 
    port => 2003 
    id => "graphite_input" 
    } 
} 

filter { 
     if [type] == "graphite" { 
       grok { 
         match => [ "message", "\Aicinga2\.%{MONGO_WORDDASH:host_name:keyword}\.%{WORD:metric_type:keyword}\.%{NOTSPACE:metric_name:keyword}\.value%{SPACE}%{NUMBER:metric_value:float}%{SPACE}%{POSINT:timestamp:date}" ] 
       } 
     } 

} 

output { 
     if [type] == "graphite" { 
       elasticsearch { 
         index => "graphite-%{+YYYY.MM}" 
         hosts => ["localhost"] 
       } 
     } 

} 

und ein Beispiel Dokument, das ich Indizierung bin (aus Kibana)

{ 
    "_index": "graphite-2017.02", 
    "_type": "graphite", 
    "_id": "XYZdflksdf", 
    "_score": null, 
    "_source": { 
    "@timestamp": "2017-02-21T00:17:16.000Z", 
    "metric_name": "interface-eth0.snmp-interface.perfdata.eth0_in_discard", 
    "port": 37694, 
    "icinga2.XXXYYY.services.interface-eth0.snmp-interface.perfdata.eth0_in_discard.value": 357237, 
    "@version": "1", 
    "host": "192.168.1.1", 
    "metric_type": "services", 
    "metric_value": 357237, 
    "message": "icinga2.XXXYYY.services.interface-eth0.snmp-interface.perfdata.eth0_in_discard.value 357237 1487636236", 
    "type": "graphite", 
    "host_name": "XXXYYY", 
    "timestamp": "1487636236" 
    }, 
    "fields": { 
    "@timestamp": [ 
     1487636236000 
    ] 
    }, 
    "sort": [ 
    1487636236000 
    ] 
} 
+0

https://github.com/grafana/grafana/issues/7335 – trogs

+0

http://www.pipebug.com/elasticsearch-logstash-kibana-4-mapping-4.html – trogs

+0

https: // www. elastic.co/guide/de/beats/filebeat/1.2/filebeat-template.html – trogs

Antwort

0

ich jetzt dieses Problem selbst gelöst haben. Die String-Felder müssen als not_analyz definiert sein, damit sie im Grafana-Dashboard erscheinen.

Hier ist ein Beispiel Vorlage Sie verwenden können: Hinweis: (vielleicht ein Bug) Sie dies manuell installieren, scheint es wie logstash wird es aus irgendeinem Grund nicht in Elasticsearch installieren wie so installieren (unter der Annahme, Pfad ist /etc/logstash/graphite-new.json:

curl -XPUT 'http://localhost:9200/_template/graphite-*' [email protected]/etc/logstash/graphite-new.json 

Vorlage:

{ 
    "template" : "graphite-*", 
    "settings" : { "index.refresh_interval" : "60s" }, 
    "mappings" : { 
     "_default_" : { 
      "_all" : { "enabled" : false }, 
      "dynamic_templates" : [{ 
       "message_field" : { 
       "match" : "message", 
       "match_mapping_type" : "string", 
       "mapping" : { "type" : "string", "index" : "not_analyzed" } 
       } 
      }, { 
       "string_fields" : { 
       "match" : "*", 
       "match_mapping_type" : "string", 
       "mapping" : { "type" : "string", "index" : "not_analyzed" } 
       } 
      }], 
      "properties" : { 
       "@timestamp" : { "type" : "date", "format" : "dateOptionalTime" }, 
       "@version" : { "type" : "integer", "index" : "not_analyzed" }, 
       "metric_name" : { "type" : "string", "index" : "not_analyzed" }, 
       "host" : { "type" : "string", "index" : "not_analyzed" }, 
       "host_name" : { "type" : "string", "index" : "not_analyzed" }, 
       "metric_type" : { "type" : "string", "index" : "not_analyzed" } 
      } 
     } 
    } 
} 

ich habe noch habe dies auch in den logstash Filter definiert:

if [type] == "graphite" { 
     elasticsearch { 
       index => "graphite-%{+YYYY.MM}" 
       hosts => ["localhost"] 
       template => "/etc/logstash/graphite-new.json" 
     } 
}