私は開発ツールを使用していますが、BellowQueryはKibanaDiscoverで正常に機能します
log.file.path:*MY.log* AND "[COMMAND:HEARTBEAT]" AND "[CHARGING:0]"
しかし、開発ツールで同じことをしているときは、HEARTBEATのみを取得しますが、0と1を充電するすべてのデータを表示しますが、必要なのは0だけです。
GET filebeat-*/_search
{
"size": 1000,
"query": {
"bool": {
"must": [
{
"match": {
"log.file.path": "LOG.log"
}
},
{
"term": {
"COMMAND": {
"value": "HEARTBEAT"
}
}
},
{
"term": {
"CHARGING": {
"value": "0"
}
}
}
],
"filter": {
"range": {
"@timestamp": {
"gte": "now-15m"
}
}
}
}
}
}
LOGマッピング同じログ私は2つの方法で取得しています。1つはメッセージで、logstashを使用してJsonとして変換しています。両方をここに追加しました。
{
"_index": "filebeat-7.2.0-2019.09.14",
"_type": "_doc",
"_id": "Aps9MW0BBmrGS9dAswgZ",
"_version": 1,
"_score": null,
"_source": {
"ecs": {
"version": "1.0.0"
},
"@version": "1",
"message": "[COMMAND:HEARTBEAT],[GPS STATUS:true],[INFO:false],[SIGNAL:false],[ENGINE:0],[DOOR:0],[LON:0],[LAT:0],[SPEED:0.0],[HEADING:-1.0],[BATTERY:100.0%],[CHARGING:0],[O&E:CONNECTED],",
"GPS-LOG": {
"O&E": "CONNECTED",
"GPS POS": "true",
"ENGINE": "0",
"COMMAND": "HEARTBEAT",
"GSM_SIGNAL": "75",
"CHARGING": "0",
"HEADING": "-1.0",
"FUEL": "0.0V/0.0%",
"SPEED": "0.0",
"GPS STATUS": "true",
"ALARM": "NONE",
"BATTERY": "100.0%",
"TIMESTAMP": "null",
"LON": "0",
"LAT": "0",
"DOOR": "0",
"SERIAL": "1670",
"SIGNAL": "false",
"INFO": "false",
"GPS_SATS": "11"
},
私の本当のログはこれです
18:15:53,909 DEBUG [com.] (default-threads - 57) (338)>[TIMESTAMP:Sun Sep 15 18:15:53 UTC 2019],[COMMAND:INFO],[GPS STATUS:true],[INFO:true],[SIGNAL:false],[ENGINE:0],[DOOR:0],[LON:90],[LAT:2],[SPEED:0.0],[HEADING:240.0],[BATTERY:83.0%],[CHARGING:0],[O&E:CONNECTED],[GSM_SIGNAL:100],[GPS_SATS:8],[GPS POS:true],[FUEL:0.0V/0.0%],[ALARM:NONE],[SERIAL:03AA]
助けてくれてありがとう
Kibana Discoveryは、Lucene構文(LuceneはElasticsearchが構築されている検索エンジン/テクノロジー)を使用して、データをクエリできるようにします。ただし、DevToolを介してリクエストを送信する場合は、基本的にElasticsearch RESTAPIを呼び出します。そこではLucene構文を使用できません。
2番目の一致クエリが問題です。
完全に一致するものを検索したいとします(コマンド== HEARTBEAT;課金== 0)。ただし、一致クエリを使用すると、フィールドで全文検索を実行できます。
一致クエリの代わりに、クエリという用語を使用する必要があります。したがって、最初の一致クエリの後に、must-clause内に2つの用語クエリ(1つはコマンドフィールド用、もう1つは課金フィールド用)を定義します。must句を使用すると、その中のすべてのクエリにAND演算子が自動的に適用されることに注意してください。
クエリは次のようになります(テストされていません)。
GET filebeat-*/_search
{
"size": 1000,
"query": {
"bool": {
"must": [
{
"match": {
"log.file.path": "MYlog"
}
},
{
"term": {
"command": {
"value": "HEARTBEAT"
}
}
},
{
"term": {
"charging": {
"value": 0
}
}
}
],
"filter": {
"range": {
"@timestamp": {
"gte": "now-15m"
}
}
}
}
}
}
または、コマンドで検索することもできます。キーワードフィールド。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加