本地 Elasticsearch + Kibana 批量导入 JSON Log

首先在本地运行 Elasticsearch + Kibana :
docker run -d -p 9200:9200 -p 5601:5601 nshou/elasticsearch-kibana

确认 curl -s -GET localhost:9200/_cluster/health 返回的 Elasticsearch 状态是 green 或 yellow
确认 localhost:5601 Kibana 页面能正常打开

将 json 格式分行的 log 文件处理成 Elasticsearch bulk index 请求:

awk '$0="{ \"index\":{}}\n"$0' json.log > json.log.bulk

最后调用 Elasticsearch bulk API 批量添加:

curl -s -H 'Content-Type: application/json' -XPOST localhost:9200/index_log/log/_bulk --data-binary @json.log.bulk

Fin & Enjoy Kibana!

Ref:
https://hub.docker.com/r/nshou/elasticsearch-kibana/
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html


后记:

产生这个需求的原因: 开发环境导入完成的 JSON 格式日志收集系统, 生产环境由于公司的账户收费策略/安全审查等原因暂时无法使用。 而应用产生的 JSON 日志就那样放在了服务器上。

虽然用 ag 或者 grep 也能分析 log, 然而使用起来有其麻烦之处, 并且不利于展示(雾), 尤其对于有调用栈的 ERROR 日志更是如此。

另外生产环境服务器上的 log 通常需要下载到本地分析 (曾经出现过有人直接 vim 一个未做滚动处理的日志文件, 导致服务器挂掉的事情……), 多一步导入到 Elasticsearch + Kibana 也是不错的选择。

comments powered by Disqus