web-dev-qa-db-ja.com

日付フィールドは整数として表示されています

を持っています Elastic Stackサーバー(Hyper-vlogstashexecコマンドを介してデータを取り込み、分析を実行しています。数値として表示されている日付フィールドを除いて、すべてがうまく機能しています。

logstashElasticsearch、またはKibanaを取得して、フィールドの数値ではなく日付を認識するにはどうすればよいですか?

データはUnix Epochmillisecondsでの時間。


コード:

pythonファイルによって出力されるデータはJSON形式です。 elasticsearchに到達するまで、実際の処理は行われません。

Logstash構成:

input {
  exec {
    command => "/home/elliot/BullhornConnector.py JobOrder isOpen,webResponses,submissions,sendouts,interviews,placements,address,numOpenings,employmentType,owner,title,clientCorporation"
    interval => 60
    codec => json
    tags => ["JobOrder"]
  }
  exec {
    command => "/home/elliot/BullhornConnector.py Lead owner,leadSource,firstName,lastName,status,dateAdded"
    interval => 60
    codec => json
    tags => ["Lead"]
  }
  exec {
    command => "/home/elliot/BullhornConnector.py Opportunity owner,isOpen,dealValue,weightedDealValue,clientCorporation,status"
    interval => 60
    codec => json
    tags => ["Opportunity"]
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
  stdout { codec => rubydebug }
}

スクリーンショット:

これが生データのスクリーンショットです: Raw data display

インデックスパターンの概要ページ: Data overview on index patterns page

フィールドの詳細ビュー: Setting does not allow me to change it.

ありがとう!

1
Elliot Labs LLC

私はそれを理解しました:あなたがする必要があるのは、logstashでフィルタープラグイン、具体的には date プラグインを使用することです。

以下は、logstash構成に追加したスニペットです。

filter {
  date {
    match => [ "dateAdded", "UNIX_MS" ]
    target => "dateAddedCorrected"
  }
}
0
Elliot Labs LLC

ElasticSearchのドキュメントを正しく読んだ場合 https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html

JSON doesn’t have a date datatype, so dates in Elasticsearch can either be:

strings containing formatted dates, e.g. "2015-01-01" or "2015/01/01 12:10:30".
a long number representing milliseconds-since-the-Epoch.
an integer representing seconds-since-the-Epoch. 

したがって、「数値」データ型として表されるdateAddedフィールドは論理的です。ElasticsearchはJSON番号をES番号に変換するだけです。

自分のELKインスタンスを見ると、「timestamp」フィールドが「date」データ型として表されていることがわかりました。 logstashによって自動的に行われます。

舞台裏では、logstashは「マッピングテンプレート」を管理してESフィールドのデータ型を定義します。あなたの場合、それはJSONから日付型を素朴に変換し、タイムスタンプの場合、それが日付であることを知っているので、明示的に定義します。

したがって、必要なのは、マッピングテンプレートを定義し、logstashを使用してデータとともにESにプッシュすることです。

ESマッピングドキュメントはこちら https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html そしてLogstashはmanage_templateとelasticsearch出力のテンプレートでそれを管理できます https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-template 。 ASマッピングの概要 https://www.elastic.co/blog/found-elasticsearch-mapping-introduction

実際に使用されているマッピングを確認することもできます

curl -XGET 'localhost:9200/<index>/_mapping?pretty'
3
daks

私がここで推測しているのは、あなたが話しているプラ​​ットフォームやプログラムに精通していないからです。ただし、スクリーンショットで、データ型を期間に変更したと述べましたが、データ型はまだ「数値」であり、「形式」は期​​間であるように見えます。推測を続ける必要がある場合は、データ型がまだ「数値」であるため、プラットフォームはまだフィールドを数値としてシリアル化しようとしていると言えます。スクリーンショットの上部にある@timestampフィールドのように、そのタイプを「日付」に変更し、それで修正されるかどうかを確認します。

0
ShawnW.