logstash日志文件说:
"tags"=>["_grokparsefailure"]}, "status_code"]}>, @data={"@version"=>"1", "@timestamp"=>"2016-09-24T08:00:54.894Z", "path"=>"/var/log/nginx/access.log", "host"=>"sample-com", "remote_addr"=>"127.0.0.1", "remote_user"=>"-", "date"=>"05/Sep/2016:10:03:01 +0000", "method"=>"GET", "uri_path"=>"/accounts", "version"=>"HTTP/1.1", "status_code"=>"200", "body_byte_sent"=>419, "referer"=>"-", "user_agent"=>"python-requests/2.4.3 CPython/2.7.9 Linux/3.16.0-4-amd64", "request_time"=>6.161, "auth_type"=>"Bearer", "client_id"=>"beta",
"web_client_ip"=>"172.*.131.177", "response_json"=>{"_links"=>{"applications"=>{"href"=>"/applications"}, "menus"=>{"href"=>"/menus"}, "messages"=>{"href"=>"/messages"}, "numbers"=>{"href"=>"/numbers"}, "self"=>{"href"=>"/accounts"}}, "account_status"=>"active", "creation_date"=>"2016-06-07 09:25:18", "credit"=>{"balance"=>#<BigDecimal:367dbf49,'0.19819267E4',8(12)>, "currency"=>"usd"}, "email"=>"*@gmail.com",
"id"=>"677756yt7557", "lastname"=>"Qurbani", "name"=>"M", "notifications"=>{"black_list"=>{"uids"=>[]}, "settings"=>{"email"=>{"low_credit"=>true, "new_feature"=>true, "receive_f"=>true, "send_f"=>true, "voice"=>true}, "language"=>"en", "push_notif"=>{"low_credit"=>true, "new_feature"=>true, "receive_f"=>true, "send_f"=>true, "voice"=>true}, "sms"=>{"low_credit"=>true, "new_feature"=>true, "receive_f"=>true, "send_f"=>true, "voice"=>true}}}, "phone"=>"+9****", "status"=>"inactive", "verification_status"=>{"email"=>"unverified", "phone"=>"verified"}}, "request_json"=>{}, "tags"=>["_grokparsefailure"]}, @metadata_accessors=#<LogStash::Util::Accessors:0x6ec6acbe @store={"path"=>"/var/log/nginx/access.log"}, @lut={"[path]"=>[{"path"=>"/var/log/nginx/access.log"}, "path"]}>,
@cancelled=false>], :response=>{"create"=>{"_index"=>"logstash-api-2016.09.24", "_type"=>"logs", "_id"=>"AVdbNisZCijYhuqEamFy", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception",
"reason"=>"failed to parse [response_json.credit]", "caused_by"=>{"type"=>"illegal_argument_exception", "reason"=>"unknown property [balance]"}}}}, :level=>:warn}
这里我在信用部分有一个如下所示的日志:
"credit": {"balance": 0.0, "currency": "usd"}
我已从Elasticsearch删除了所有索引,但我在.sincedb*
或其他地方未找到任何home
来删除logstash
数据库。
为什么在balance
值实际上没有变化时会发生此错误?这是什么原因?
Logstash
后,它不会聚合日志文件中的数据!我从since_dbs_*
中移除了所有/var/lib/logstash/
,并表示从Logstash
配置中的起始位置开始拖尾。
现在出现以下错误:
object mapping for [response_json.credit] tried to parse field [credit] as object, but found a concrete value
似乎有时候信用是作为标量值发送的,有时也会作为具有两个字段的对象发送!
EDIT1:
在Elasticsearch中,已将2个具有不同数据的不同信用字段过帐到一个信用额度。所以我尝试重命名这些字段并从logstash中的两个配置中删除信用,所以现在我有:
add_field => {"first_credit" => "%{[response_json.credit]}"}
remove_field => ["response_json.credit"]
添加了新字段,但字面值%{[response_json.credit]}
并且字段未被删除,因此错误再次发生。我想获得信贷的价值并将其置于第一信贷之内并取消信贷本身。我甚至试过以下内容:
add_field => {"first_credit" => "%{[response_json][credit]}"}
remove_field => ["response_json.credit"]
我做错了什么?
修改:2
我注意到一个文件access.log
的{{1}}字段具有不同的值。
一个credit
是数字:credit
另一个2.99
是JSON:{“currency”:“usd”,“balance”:2.99}
我使用以下logstash配置来解决问题,并将其全部保存为credit
中的string
:
ES
它给出了以下错误:
if ([response_json][credit]) {
mutate {
add_field => {"new_credit" => "%{[response_json][credit]}"}
remove_field => [ "[response_json][credit]" ]
}
}
答案 0 :(得分:0)
从查看您的日志"credit"=>{"balance"=>#<BigDecimal:367dbf49,'0.19819267E4',8(12)>,
我认为this issue可能与您有关。
如果您在{elasticsearch:ip}:9200/logstash-api-2016.09.24/_mapping
检查索引的Elasticsearch映射,我打赌balance字段有一个Integer映射。如果最初存在整数映射,则任何非整数值(例如,对象)都将失败。
您可以通过创建将余额指定为浮点数的index template来解决此问题。如果您选择这样做,请确保删除旧索引或创建新索引,因为无法修改现有映射。
您还可以确保余额始终与日志源中的数据类型相同。
或者您可以添加mutate filter并将余额字段转换为所需的数据类型。
查看您的地图,让我知道我的理论是否正确。 :)
修改强> 您刚刚发送给我的代码块与以前完全相同 - 对象信用和int信用将存储在同一个字段中。以下内容将在[{1}}相同的字段中存储credit [balance](一个int)和int credit,它应该映射到一个Integer。
new_credit