1. 程式人生 > >grafana elasticsearch date型別問題

grafana elasticsearch date型別問題

  • 大致的資料格式
{
    "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
            }
        }
    }
}
'

========廣告時間========

=========================