2017-01-11 4 views
1

私の現在の設定では私のネットワークで192.168.1.35:9200上でelasticsearchを実行しています。そして、そのマシン(192.168.1.40)からメトリックを収集している192.168.1.40のメトリック・ビート。私は私が望む結果を得る、このメソッドが呼び出される特定のmetricbeatdataを取得するためにElasticsearchを照会する方法は?

def es_match_all(): 
    elasticsearch = Elasticsearch(
    ['192.168.1.35'], 
    port=9200, 
    ) 
    result = elasticsearch.search(index='metricbeat-*', body={"query":{"match_all": {}}}) 
    print(result) 

:私metricbeat.ymlは私のpythonのコードでは、この

metricbeat.modules: 
- module: system 
    metricsets: 
    - core 
    - cpu 
    - filesystem 
    - memory 
    - network 
    - process 
    cgroups: true 
    enabled: true 
    period: 10 
    procs: [".*"] 
    cpu_ticks: false 


output.elasticsearch: 
    hosts: ['192.68.1.35:9200'] 

私は私のElasticsearchを照会するElasticsearchのAPIを使用していますように見えます。

{"hits": {"total": 2375277, "hits": [{"_id": "AVmI873zkPW_EI4mzGOc", "_source": {"beat": {"hostname": "ip-172-31-53-117", "name": "ip-172-31-53-117", "version": "5.1.1"}, "system": {"memory": {"total": 3945406464, "free": 2389319680, "swap": {"total": 0, "free": 0, "used": {"bytes": 0, "pct": 0.0}}, "used": {"bytes": 1556086784, "pct": 0.3944}, "actual": {"free": 3663335424, "used": {"bytes": 282071040, "pct": 0.0715}}}}, "type": "metricsets", "@timestamp": "2017-01-10T15:16:32.108Z", "metricset": {"module": "system", "name": "memory", "rtt": 97}}, "_score": 1.0, "_type": "metricsets", "_index": "metricbeat-2017.01.10"} ... 

は今、私は特定のホスト名のためだけにいくつかのinfromationを得るためにESを照会する(ip-172-31-53-117を)したい:私は下に短いバージョン印刷

def es_match_hostname(): 
    elasticsearch = Elasticsearch(
    ['192.168.1.35'], 
    port=9200, 
    ) 
    result = elasticsearch.search(
     index='metricbeat-*', 
     body={"query": {"match": {'hostname': "ip-172-31-53-117"}}} 
     ) 

をその後私は、次のような結果を得たときの方法

私のESの設定とインデックスは正しいですが、正しい情報を取得するための正しいクエリを書く方法が見つかりません。 bodyとしてelasticsearch.searchとしてください。

答えて

1

matchの代わりにquerystringを使用する解決方法が見つかりました。私は木場のメトリックビートを視覚化し、beat.nameまたはbeat.hostnameを使用した場合、そこに問い合わせることができることに気づいた。私は、その特定のビートからの結果を得た。これにより

def es_match_hostname(): 
    elasticsearch = Elasticsearch(
    ['192.168.1.35'], 
    port=9200, 
    ) 
    match = "beat.name: ip-172-31-53-117*" 
    result = elasticsearch.search(
     index='metricbeat-*', 
     body={"query":{"query_string":{"query": match, "analyze_wildcard":True}}} 
     ) 

:私はこのコードを得ました。

関連する問題