grafana elasticsearch date型別問題
阿新 • • 發佈:2019-01-28
- 大致的資料格式
{
"createTime": 1484967199,
"ip": "localhost",
"appId": "10000",
"threadName": "Thread-acceptor-1",
"level": "info",
"type": "error",
"tag": "tag1",
"module": "module1",
"detail": "some description"
}
從kafka讀取資料後由storm計算後直接將es客戶端寫入es。
使用grafana配置資料來源,其中使用自定義的欄位createTime。
配置grafana的dashboard的panel,結果報錯,
Invalid number format [epoch_millis#]
。- 是時間型別的錯誤,查下es欄位的mapping,
http://132.122.252.22:9200/flume-index/_mapping
{
"flume-index": {
"mappings": {
"distributed-log": {
"properties": {
"appId": {
"type ": "string"
},
"createTime": {
"type": "long"
},
"detail": {
"type": "string"
},
"ip": {
"type": "string"
},
"level": {
"type": "string"
},
"module": {
"type": "string"
},
"tag": {
"type": "string"
},
"threadName": {
"type": "string"
},
"type": {
"type": "string"
}
}
}
}
}
}
沒有指定es的mapping,所以根據java型別,當storm推資料到es時則會當做long型,具體格式如下,這導致grafana根據createTime查詢錯誤,需要更改createTime的mapping。
- 先刪除原來的索引,
curl -XDELETE 'localhost:9200/flume-index/?pretty'
- 再重新建立新索引,且指定createTime欄位為date型別,且格式為預設即可。
curl -XPUT 'localhost:9200/flume-index/?pretty' -d
'
{
"mappings": {
"distributed-log": {
"properties": {
"appId": {
"type": "string"
},
"createTime": {
"type": "date"
},
"detail": {
"type": "string"
},
"ip": {
"type": "string"
},
"level": {
"type": "string"
},
"module": {
"type": "string"
},
"tag": {
"type": "string"
},
"threadName": {
"type": "string"
},
"type": {
"type": "string"
}
}
}
}
}
'
再用json的字串格式傳入後,es即可以通過這個mapping進行轉換。grafana也可以根據時間查出資料來。
如果允許也可以直接使用es的_timestamp欄位,但它並非準確的資料生成時間。es預設沒有開啟timestamp的記錄,可以用下面開啟,即有了_timestamp欄位。
curl -XPOST localhost:9200/flume-index -d '
{
"mappings": {
"_default_": {
"_timestamp": {
"enabled": true
}
}
}
}
'
========廣告時間========
=========================