を持っています Elastic Stack
サーバー(Hyper-v
)logstash
exec
コマンドを介してデータを取り込み、分析を実行しています。数値として表示されている日付フィールドを除いて、すべてがうまく機能しています。
logstash
、Elasticsearch
、またはKibana
を取得して、フィールドの数値ではなく日付を認識するにはどうすればよいですか?
データはUnix Epoch
milliseconds
での時間。
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 }
}
ありがとう!
私はそれを理解しました:あなたがする必要があるのは、logstashでフィルタープラグイン、具体的には date プラグインを使用することです。
以下は、logstash構成に追加したスニペットです。
filter {
date {
match => [ "dateAdded", "UNIX_MS" ]
target => "dateAddedCorrected"
}
}
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'
私がここで推測しているのは、あなたが話しているプラットフォームやプログラムに精通していないからです。ただし、スクリーンショットで、データ型を期間に変更したと述べましたが、データ型はまだ「数値」であり、「形式」は期間であるように見えます。推測を続ける必要がある場合は、データ型がまだ「数値」であるため、プラットフォームはまだフィールドを数値としてシリアル化しようとしていると言えます。スクリーンショットの上部にある@timestampフィールドのように、そのタイプを「日付」に変更し、それで修正されるかどうかを確認します。