用docker搭建日志监控系统efk,性能监控系统prometheus+grafana,同时将springboot2项目的信息发送到两个监控系统。
为了简便,文中未给出具体代码,详情请参见github/veiasai/efk-pro-gra-boot

引言

  1. efk是elasticsearch、fluentd、kibana的简写

  2. elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。

  3. fluentd 是一个数据收集中心,便于格式化日志,集中处理。

  4. kibana 用于可视化 elastcisearch 的数据。

  5. prometheus 开源监控系统,主要特性有:时序数据库、拉取模式、查询语句灵活。

  6. grafana 图形化工具,常用来可视化prometheus的数据,也可以用来看elasticsearch的数据。

elasticsearch

  1. 使用5.6版本时,默认需求2g内存,由于所用机器只有2g,故无法满足,修改jvm.options挂载到config目录,发生错误,尚未解决。

  2. 使用2.0版本,启动成功。

  3. 重新尝试5.6版本,将挂载本机目录改为挂载卷,同时将jvm参数文件挂载进去,启动成功,git文件也已更新。

fluentd

  1. 使用镜像时需要自己再加工一下,安装 elasticsearch plugin。

  2. 通过挂载可以备份fluentd的log。

kibana

  1. 直接使用docker启动没有什么问题,只是elastcisearch使用2.0版本的话,kibana也不能用最新版,使用4.0即可。(上述版本号都是docker hub提供的镜像所附带的tag,不确定是否与产品本身版本号对应)

prometheus

  1. 挂载主机目录出现权限不足,使用privileged参数也未能解决,改为挂载卷。

  2. 为了能监控和prometheus运行在同一机器上的程序,传递dockerhost参数到容器内。

grafana

  1. 同样使用挂载卷解决权限问题。

  2. 启动后默认用户密码为admin/admin,添加prometheus为datasource,然后import dashboard。

  3. 我使用了别人编写的jvm监控模板,id为4701,在自己的grafana import dashboard处,直接填写id即可导入。

  4. 更多其他模板也可参考官网

spring boot 2

  • prometheus
    1. 引入依赖(参见git)
    2. expose相关endpoint。
      1
      2
      management.endpoints.web.exposure.include = *
      management.metrics.export.prometheus.enabled = true
  • logback
    1. 引入依赖
    2. resource目录下创建logback.xml
    3. 为了避免单元测试,单机运行等情况时,也发送日志,可以将日志配置文件重名为别名,然后在prod对应的profile中指定
      1
      logging.config=classpath:my-logback.xml

参考资料