用docker搭建日志监控系统efk,性能监控系统prometheus+grafana,同时将springboot2项目的信息发送到两个监控系统。
为了简便,文中未给出具体代码,详情请参见github/veiasai/efk-pro-gra-boot。
引言
efk是elasticsearch、fluentd、kibana的简写
elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
fluentd 是一个数据收集中心,便于格式化日志,集中处理。
kibana 用于可视化 elastcisearch 的数据。
prometheus 开源监控系统,主要特性有:时序数据库、拉取模式、查询语句灵活。
grafana 图形化工具,常用来可视化prometheus的数据,也可以用来看elasticsearch的数据。
elasticsearch
使用5.6版本时,默认需求2g内存,由于所用机器只有2g,故无法满足,修改jvm.options挂载到config目录,发生错误,尚未解决。
使用2.0版本,启动成功。
重新尝试5.6版本,将挂载本机目录改为挂载卷,同时将jvm参数文件挂载进去,启动成功,git文件也已更新。
fluentd
使用镜像时需要自己再加工一下,安装 elasticsearch plugin。
通过挂载可以备份fluentd的log。
kibana
- 直接使用docker启动没有什么问题,只是elastcisearch使用2.0版本的话,kibana也不能用最新版,使用4.0即可。(上述版本号都是docker hub提供的镜像所附带的tag,不确定是否与产品本身版本号对应)
prometheus
挂载主机目录出现权限不足,使用privileged参数也未能解决,改为挂载卷。
为了能监控和prometheus运行在同一机器上的程序,传递dockerhost参数到容器内。
grafana
同样使用挂载卷解决权限问题。
启动后默认用户密码为admin/admin,添加prometheus为datasource,然后import dashboard。
我使用了别人编写的jvm监控模板,id为4701,在自己的grafana import dashboard处,直接填写id即可导入。
更多其他模板也可参考官网。
spring boot 2
- prometheus
- 引入依赖(参见git)
- expose相关endpoint。
1
2management.endpoints.web.exposure.include = *
management.metrics.export.prometheus.enabled = true
- logback
- 引入依赖
- resource目录下创建logback.xml
- 为了避免单元测试,单机运行等情况时,也发送日志,可以将日志配置文件重名为别名,然后在prod对应的profile中指定
1
logging.config=classpath:my-logback.xml