Elasticsearch7.3 SQLクエリーの使用

9004 ワード

インテリジェントポイント
本文を読み終えて以下の技能を習得する
sqlを使用したドキュメントクエリーsqlをQueryDsl に翻訳
ぜんちじょうけん
Elasticsearch&kibana本明細書はElasticsearch 7に基づく.3&kibana7.3実演を行い、仮想マシンIP 192.168.1.14、kibanaアドレスhttp://192.168.1.14:5601関連環境がなければCentos 7を参照してElasticsearch&Kibana をインストールすることができる.
データの準備
デモンストレーションは、kibanaに内蔵サンプルデータに基づいて行い、以下の手順でサンプルデータ追加アクセスkibanaアドレスhttp://192.168.1.14:5601を行い、 アイコン-> Kibana を順次クリックし、下図の赤い線と矢印で示すElasticsearch7.3使用SQL查询_第1张图片をクリック をクリックしてサンプルWebログをkibanaに追加し、下図に示すElasticsearch7.3使用SQL查询_第2张图片データ追加が完了すると、 -> の順にクリック、下図に示すElasticsearch7.3使用SQL查询_第3张图片のように下図に示すダッシュボードが出現し、ダッシュボードにデータがある場合は、データのインポートに成功することを示す.Elasticsearch7.3使用SQL查询_第4张图片
SQLクエリー
サンプルデータの表示
前回インポートしたデータはkibana_sample_data_logsというインデックスに存在します.
#          
GET _cat/indices/*logs?v&h=index,docs.*
#     ,      14074   
index                   docs.count docs.deleted
kibana_sample_data_logs      14074            0

#   mapping  
GET kibana_sample_data_logs/_mapping
#     
{
  "kibana_sample_data_logs" : {
    "mappings" : {
      "properties" : {
        "@timestamp" : {
          "type" : "alias",
          "path" : "timestamp"
        }
        ...  
        "memory" : {
          "type" : "double"
        },
        "utc_time" : {
          "type" : "date"
        }
      }
    }
  }
}

mapping戻り情報に基づいて、次のフィールドを選択してクエリーテストを行います.
フィールド名
を選択します.
説明
timestamp
date
タイムスタンプ
clientip
ip
クライアントIP
machine.os
text
OSバージョン
request
text
要求url
response
text
ステータスコードを返す
単純なクエリー
#          
GET _sql?format=txt
{
  "query":"select * from kibana_sample_data_logs"
}
#     ,       sql   Array     
{
  "error": {
    "root_cause": [
      {
        "type": "sql_illegal_argument_exception",
        "reason": "Arrays (returned by [tags]) are not supported"
      }
    ],
    "type": "sql_illegal_argument_exception",
    "reason": "Arrays (returned by [tags]) are not supported"
  },
  "status": 500
}

#          
GET _sql?format=txt
{
  "query":"select timestamp,clientip,machine.os,request,response from kibana_sample_data_logs"
}
#       10 ,(      1000 )
       timestamp        |   clientip    |  machine.os   |                          request                          |   response    
------------------------+---------------+---------------+-----------------------------------------------------------+---------------
2019-09-29T00:39:02.912Z|223.87.60.27   |win 8          |/elasticsearch/elasticsearch-6.3.2.deb                     |200            
2019-09-29T03:26:21.326Z|130.246.123.197|win 8          |/beats/metricbeat                                          |200            
2019-09-29T03:30:25.131Z|120.49.143.213 |ios            |/styles/main.css                                           |503            
2019-09-29T03:34:43.399Z|99.74.118.237  |ios            |/beats/metricbeat/metricbeat-6.3.2-amd64.deb               |200            
2019-09-29T03:37:04.863Z|177.111.217.54 |win 7          |/enterprise                                                |200            
2019-09-29T03:49:40.669Z|106.225.58.146 |win 7          |/apm                                                       |503            
2019-09-29T03:57:39.612Z|6.138.148.165  |win 8          |/beats/metricbeat/metricbeat-6.3.2-amd64.deb               |200            
2019-09-29T04:18:12.345Z|218.148.135.12 |win 8          |/beats/filebeat/filebeat-6.3.2-linux-x86_64.tar.gz         |200      

統計Unique Visitors{{とうけい:Unique Visitors}}
今日のUnique Visitorsを集計し、ダッシュボードの数値と照合して -> Elasticsearch7.3使用SQL查询_第5张图片 -> をクリックし、下図に示すElasticsearch7.3使用SQL查询_第6张图片今日のデータを下図に示します.Unique Visitors=208 Elasticsearch7.3使用SQL查询_第7张图片 sqlを使用して統計検証を行います
#     Unique Visitors,                     IP
GET _sql?format=txt
{
  "query":"""select count(distinct clientip) from  kibana_sample_data_logs 
    where timestamp>= '2019-10-11T00:00:00+08:00' 
    and timestamp < '2019-10-12T00:00:00+08:00'"""
}

#     ,         
count(distinct clientip)
------------------------
208.0                   

SqlをqueryDslに翻訳
 #       
 GET _sql/translate
{
  "query":"select timestamp,clientip,machine.os,request,response from kibana_sample_data_logs"
}
#     
{
  "size" : 1000,
  "_source" : {
    "includes" : [
      "machine.os",
      "request",
      "response"
    ],
    "excludes" : [ ]
  },
  "docvalue_fields" : [
    {
      "field" : "timestamp",
      "format" : "epoch_millis"
    },
    {
      "field" : "clientip"
    }
  ],
  "sort" : [
    {
      "_doc" : {
        "order" : "asc"
      }
    }
  ]
}

#        queryDsl
GET kibana_sample_data_logs/_search
{
  "size" : 1000,
  "_source" : {
    "includes" : [
      "machine.os",
      "request",
      "response"
    ],
    "excludes" : [ ]
  },
  "docvalue_fields" : [
    {
      "field" : "timestamp",
      "format" : "epoch_millis"
    },
    {
      "field" : "clientip"
    }
  ],
  "sort" : [
    {
      "_doc" : {
        "order" : "asc"
      }
    }
  ]
}
#     

{
  "took" : 31,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "kibana_sample_data_logs",
        "_type" : "_doc",
        "_id" : "dSgCu20BA5mecxzOBkZa",
        "_score" : null,
        "_source" : {
          "request" : "/elasticsearch/elasticsearch-6.3.2.deb",
          "machine" : {
            "os" : "win 8"
          },
          "response" : 200
        },
        "fields" : {
          "timestamp" : [
            "1569717542912"
          ],
          "clientip" : [
            "223.87.60.27"
          ]
        },
        "sort" : [
          0
        ]
      },
      ...   
  }