1,2ともに可能かと思います。
filebeatにはApacheログを簡単に処理するために、モジュールを提供しています。
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-apache.html
これを使いますと、Apacheのアクセスログに出力された文字列を解析して、ログ出力日時が@timestamp
フィールドに格納されるようになります。
上のURLをご確認いただくと良いかと考えます。
おそらく、現在は次のような設定をされているのではないでしょうか?
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
# ↓ Apacheログの場所があると仮定
- /var/log/apache/*.log
type: logで入れるのではなく、filebeat.modulesのapacheモジュールを使うようにします。
#========================== Modules configuration =============================
filebeat.modules:
#-------------------------------- Apache Module --------------------------------
- module: apache
# Access logs
access:
enabled: true
var.paths:
- "/var/log/apache/*.log"
このようにしてApacheログを取り込むと、1行の文字列を自動的に意味のあるフィールドにわけて格納されます。
下の方にあります@timestamp
を見ていただくと、ログの取り込み日時ではなく、ログに書かれていた日時が入っていることが確認できるかと思います。
{
"_index" : "filebeat-7.4.0-2019.11.08-000001",
"_type" : "_doc",
"_id" : "hjX0TG4BTv3Vo1EkY_24",
"_score" : 1.0,
"_source" : {
"agent" : {
"hostname" : "AIUEO-ABCDE-12345",
"id" : "960c2c5a-86a3-4120-b024-c9e15164f45b",
"ephemeral_id" : "4b74d88f-2c6d-4fbc-913b-a553706b5578",
"type" : "filebeat",
"version" : "7.4.0"
},
"log" : {
"file" : {
"path" : """/var/log/apache/apache_logs.log"""
},
"offset" : 13001
},
"source" : {
"geo" : {
"continent_name" : "North America",
"country_iso_code" : "US",
"location" : {
"lon" : -97.822,
"lat" : 37.751
}
},
"as" : {
"number" : 15169,
"organization" : {
"name" : "Google LLC"
}
},
"address" : "66.249.73.135",
"ip" : "66.249.73.135"
},
"fileset" : {
"name" : "access"
},
"url" : {
"original" : "/blog/geekery/eventdb-ideas.html"
},
"input" : {
"type" : "log"
},
"apache" : {
"access" : { }
},
"@timestamp" : "2015-05-17T10:05:17.000Z",
"ecs" : {
"version" : "1.1.0"
},
ご参考になれば幸いです。