SpringBoot监控
一、Prometheus+Grafana监控Springboot
1、简介
任何一个系统上线,运维监控都太重要了。关于Springboot微服务的监控,之前写过Spring Boot Admin服务监控,这个方案可以实时监控并提供告警提醒功能,但不能记录历史数据,无法查看过去1小时或过去1天等运维情况。本文介绍Prometheus + Grafana的方法监控Springboot 2.X,实现美观漂亮的数据可视化。
2、SpringBoot应用镜像搭建
2.1 springboot应用创建
引入依赖,springboot选用2.x,jdk8
1 | <dependencies> |
创建测试Controller,提供1000个线程方法
1 |
|
在resources目录下创建application.yml配置文件,endpoints可以参考:SpringBoot生产监控
1 | server: |
2.2 镜像创建
上传服务器创建Dockerfile
1 | # 基于java镜像创建新镜像 |
打包与运行
1 | docker build -t demo01 . |
3、Prometheus
3.1 概述
Prometheus是一个开源的服务监控系统时间序列数据库,通过Http请求拉取被监控的服务暴露的端点公开的度量列表和值,然后存放到时序数据库中,在现在最常见的Kubernetes
容器管理系统中。最好再通过 Grafana的Dashboard进行图表展示分析和告警
3.2 Prometheus创建
1 | mkdir -p visual/prometheus |
准备配置文件prometheus.yml
1 | scrape_configs: |
结果页面
4、Grafana可视化监控
4.1 可视化
Docker部署Grafana,注意镜像源的修改
1 | docker pull grafana/grafana |
浏览器访问:http://192.168.31.98:3000
,输入用户名密码:admin/admin。成功登录后首先导入数据源,Settings-->Data Sources-->选择Prometheus -->url填写http://192.168.31.98:9090(刚才Prometheus 的地址)-->保存
然后导入可视化面板:点击+
号 --> Import
--> 输入模板链接或ID --> 点击Load
1 | # 这里推荐一个模板id:10280 |
当然各个面板可以自定义,不过要注意的是,面板的数据需要在http://192.168.31.98:9090/graph
查得到才行,可以点击Explore→Metrics browser查看
4.2 告警设置
1 | docker run --name=grafana -p 3000:3000 \ |
custom.ini
1 | #第522行修改smtp配置,所有修改配置前 ; 注释符号需要取消,将对应行,改为以下内容: |
二、轻量级日志系统Loki
1、简介
1.1 介绍
Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展,高度可用的多租户日志聚合系统。 开发语言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。系统架构十分简单,由以下3个部分组成 :
- Loki 是主服务器,负责存储日志和处理查询 。
- promtail 是代理,负责收集日志并将其发送给 loki 。
- Grafana 用于 UI 展示。
只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Loki为数据源进行日志查询(如果Loki服务器性能不够,可以部署多个Loki进行存储及查询)。作为一个日志系统不关只有查询分析日志的能力,还能对日志进行监控和报警
1.2 与ELK差异
- ELK虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,有点杀鸡用牛刀的感觉。
- 不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。
- 通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。
- 安装部署简单快速,且受 Grafana 原生支持
2、grafana loki日志系统基本使用
高版本可以参考:https://grafana.com/docs/loki/latest/installation/docker/
2.1 本机日志收集
这里直接使用docker-compose进行安装了,docker-compose -f docker-compose.yaml up -d
1 | version: "3" |
2.2 docker日志容器查看
promtail只能收集本机的日志文件,如果要收集docker容器日志文件,需要在安装一个docker插件loki-docker-driver
1 | # 安装插件 |
对于loki的docker plugin有两种使用方式。
- 配置daemon.json,收集此后创建的所有容器的日志(注意,是配置daemon.json后重启docker服务后创建的容器才会把日志输出到loki
- 新建容器时指定logging类型为loki,这样只有指定了logging的容器才会输出到loki
全局收集配置
编辑daemon.json,linux下默认路径是/etc/docker/daemon.json (需要sudo)
, windows则默认是%userprofile%\.docker\daemon.json
1 | { |
- max-size表示日志文件最大大小
- max-file表示最多10个日志文件,都是对单个容器来说的,
- multiline是配置多行识别(默认最多128行),转为单行,firstline表示单条日志的首行正则表达式。例如 [03:00:32 INFO] 开头这种格式,所以对应正则是^\[\d{2}:\d{2}:\d{2} \w{4}\] 按照你自己的日志开头编写对应正则替换即可
最后重启docker,sudo systemctl restart docker
,在此之后创建的容器默认都会把日志发送到loki
docker run配置日志输出到loki
通过docker run启动容器,可以通过–log-driver来指定为loki,进行特定的容器日志收集
1 | docker run -d -p 8888:8888 --rm --name=demo01 \ |
- –log-driver=loki指定日志驱动器为loki
- –log-opt loki-url则指定了loki的url
- –log-opt max-size日志最大大小
- –log-opt max-file日志文件最大数量
docker-compose 配置日志输出到loki
docker-compose 小于3.4可以对需要日志输出的配置添加配置如下,注意:max-size和max-file这里需要加引号
1 | logging: |
对于3.4及其以上版本可以通过定义模板来减少代码量
1 | version: "3.4" |
2.3 grafana可视化
打开grafana,http://192.168.1.1:3000
(换成自己的ip),账户密码为admin/admin,进入后首先配置配置Data sources
,选择Loki数据源,url填写http://192.168.1.1:3100
(换成自己的ip),保存后点击Explore即可成功查看
3、grafana+prometheus+loki 监控docker容器收集服务日志
3.1 创建grafana,prometheus文件夹及配置文件
1 | cd ~ |
注意ip和路径的修改
1 | global: |
3.2 创建loki 文件夹及配置文件
1 | mkdir -p grafana/loki |
1 | auth_enabled: false |
3.3 创建compose文件
vim grafana/docker-compose.yml
1 | version: "2" |
启动命令,注意命令和路径,实在grafana目录中启动
1 | cd grafana |
3.4 收集日志
使用loki-docker-driver,docker 安装loki驱动收集日志
1 | docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions |
需要使用loki记录日志的docker-compose文件中替换日志收集驱动
1 | logging: |
使用promtail收集日志文件
1 | cd ~ |
1 | server: |
vim grafana/promatil/promtail.yml
1 | version: "2" |
最后启动
1 | cd grafana |
3.5 测试与模板
1 | # 好用的grafana模板下载 |
docker-compose安装loki套件(loki+grafana)