无论是使用SpringBootAdmin还是使用Prometheus+Grafana都离不开SpringBoot提供的核心组件Actuator。提到Actuator,又不得不提Micrometer,从SpringBoot2.x开始,Actuator的功能实现都是基于Micrometer的。Micrometer通过仪表客户端为各种健康监控系统提供了一个简单的外观Facade(Facade模式是23种设计模式中的一种,也叫外观模式 / 门面模式,Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。它是为子系统中的一组接口所提供的一个一致的界面。)。类似于SLF4J,我们可以自由选择log4j2、logback等日志框架一样,Micrometer支持灵活切换或者多种并存的健康监控系统检测基于 JVM 的应用程序。
新宁ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
AppOptics, Azure Monitor, Netflix Atlas, CloudWatch, Datadog, Dynatrace, Elastic, Ganglia, Graphite, Humio, Influx/Telegraf, JMX, KairosDB, New Relic, Prometheus, SignalFx, Google Stackdriver, StatsD, and Wavefront。
上文中我们说明了如何搭建Spring Boot Admin的微服务健康检查监控系统,简单的应用使用Spring Boot Admin即可,复杂的集群应用建议使用Micrometer 支持的多种灵活可配的监控系统,这里我们选择目前使用比较广泛的Prometheus+Grafana监控系统。两种方式都能够实现微服务的健康检查统计展示和告警,Prometheus+Grafana在功能和界面美观上更强大一些,并且可以查看历史数据,而SpringBootAdmin优点是部署十分简单,不需要部署太多的环境软件,本身就是一个微服务。在两种方式的选择上,如果是小的项目,比如单体应用,双击热备,前期可以先使用SpringBootAdmin,随着业务的发展,可以考虑使用Prometheus+Grafana。
Prometheus: 是一款开源的系统和服务监控系统,属于云原生计算基金会项目。它可以通过设置的时间间隔从配置的目标系统采集指标数据,保存指标数据(时序数据库),评估规则表达式,显示结果,并在检测到指定条件时触发警报。
虽然Prometheus也支持可视化界面展示,但是界面不美观,更多人选择使用Grafana来展示Prometheus的监控数据。
Grafana:Grafana是一款开源的数据可视化工具。它提供对数据指标的查询、可视化和告警,它可以实现无论数据存储在哪里,都可以与您的团队创建、探索和共享十分美观的仪表盘数据可视化,并培养数据驱动的文化。
我们使用Docker来安装需要的Prometheus+Grafana,通常情况下,我们会根据业务需求来安装需要的组件,在这里健康监控系统也是这样,如果我们的微服务部署在Docker容器中,那么我们需要安装cAdvisor组件来监控Docker相关数据指标,如果要采集系统环境数据,那么需要安装 Node Exporter 组件,而且告警组件也是和Prometheus分开的,如果需要告警功能,同样需要安装Alertmanager组件,这一连串组件的组合,自然让我们想到使用docker-compose来安装我们需要所有组件。
参考:
https://github.com/stefanprodan/dockprom 我们编写两个docker-compose文件。
# 创建prometheus挂在目录mkdir /data/monitor/prometheuscd /data/monitor/prometheustouch prometheus.ymlmkdir /data/monitor/prometheus_data# 创建alertmanager挂在目录mkdir -p /data/monitor/alertmanager# 创建grafana挂在目录mkdir -p /data/monitor/grafana_datamkdir -p /data/monitor/grafana/provisioning/dashboardsmkdir -p /data/monitor/grafana/provisioning/datasources
docker-compose-prometheus-server.yml:
version: '3.2'networks: monitor-net: driver: bridgevolumes: prometheus_data: {} grafana_data: {}services: prometheus: image: prom/prometheus:latest container_name: prometheus volumes: - /data/monitor/prometheus:/etc/prometheus - /data/monitor/prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--storage.tsdb.retention.time=200h' - '--web.enable-lifecycle' restart: unless-stopped expose: - 9090 networks: - monitor-net labels: org.label-schema.group: "monitoring" alertmanager: image: prom/alertmanager:latest container_name: alertmanager volumes: - /data/monitor/alertmanager:/etc/alertmanager command: - '--config.file=/etc/alertmanager/config.yml' - '--storage.path=/alertmanager' restart: unless-stopped expose: - 9093 networks: - monitor-net labels: org.label-schema.group: "monitoring" nodeexporter: image: prom/node-exporter:latest container_name: nodeexporter volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' restart: unless-stopped expose: - 9100 networks: - monitor-net labels: org.label-schema.group: "monitoring" cadvisor: image: gcr.io/cadvisor/cadvisor:latest container_name: cadvisor privileged: true devices: - /dev/kmsg:/dev/kmsg volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker:/var/lib/docker:ro #- /cgroup:/cgroup:ro #doesn't work on MacOS only for Linux restart: unless-stopped expose: - 8080 networks: - monitor-net labels: org.label-schema.group: "monitoring" grafana: image: grafana/grafana:latest container_name: grafana volumes: - /data/monitor/grafana_data:/var/lib/grafana - /data/monitor/grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards - /data/monitor/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources environment: - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin} - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} - GF_USERS_ALLOW_SIGN_UP=false restart: unless-stopped expose: - 3000 networks: - monitor-net labels: org.label-schema.group: "monitoring" pushgateway: image: prom/pushgateway:latest container_name: pushgateway restart: unless-stopped expose: - 9091 networks: - monitor-net labels: org.label-schema.group: "monitoring" caddy: image: caddy:latest container_name: caddy ports: - "3000:3000" - "9090:9090" - "9093:9093" - "9091:9091" volumes: - ./caddy:/etc/caddy environment: - ADMIN_USER=${ADMIN_USER:-admin} - ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} - ADMIN_PASSWORD_HASH=${ADMIN_PASSWORD_HASH:-JDJhJDE0JE91S1FrN0Z0VEsyWmhrQVpON1VzdHVLSDkyWHdsN0xNbEZYdnNIZm1pb2d1blg4Y09mL0ZP} restart: unless-stopped networks: - monitor-net labels: org.label-schema.group: "monitoring"
在服务端安装执行安装命令:
docker-compose -f docker-compose-prometheus-server.yml up -d
执行会报错,因无法访问部分docker镜像库:Error response from daemon: Get “https://gcr.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers),请自行设置将docker切换到能够访问的云服务器。
version: '3.2'services: nodeexporter: image: prom/node-exporter:latest container_name: nodeexporter volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' restart: unless-stopped network_mode: host labels: org.label-schema.group: "monitoring" cadvisor: image: gcr.io/cadvisor/cadvisor:latest container_name: cadvisor privileged: true devices: - /dev/kmsg:/dev/kmsg volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro - /cgroup:/cgroup:ro restart: unless-stopped network_mode: host labels: org.label-schema.group: "monitoring"
在服务端安装执行安装命令:
docker-compose -f docker-compose-prometheus-server.yml up -d
同在服务端执行一样,这里执行会报错,请自行切换可以访问到的镜像仓库。
执行安装Prometheus:
docker run -d \ --restart=always \ -u root \ --name prometheus \ -p 9090:9090 \ -v /etc/localtime:/etc/localtime \ -v /data/monitor/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ -v /data/monitor/prometheus_data:/prometheus \ prom/prometheus
执行安装Grafana:
docker run -d \ --restart=always \ -u root \ --name grafana \ -p 3000:3000 \ -v /data/grafana_data:/var/lib/grafana \ -v /data/grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards \ -v /data/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources \ -e GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin} \ -e GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin} \ -e GF_USERS_ALLOW_SIGN_UP=false \ grafana/grafana
Prometheus: http://192.168.0.10:9090/:
Grafana:http://192.168.0.10:3000/ ,通过我们安装时部署的用户名密码: admin / admin 登录。
请注意,在选择micrometer-registry-prometheus版本时,一定要和框架中SpringBoot引入的micrometer相匹配的版本,否则不兼容。
......1.5.14 ............ io.micrometer micrometer-registry-prometheus ${micrometer.registry.prometheus.version}
io.micrometer micrometer-registry-prometheus
metrics.tags.application: ${spring.application.name} 设置tag方便Prometheus抓取数据时区分不同的服务。
# 性能监控端点配置management: security: enabled: true role: ACTUATOR_ADMIN endpoint: health: show-details: always endpoints: enabled-by-default: true web: base-path: /actuator exposure: include: '*'metrics: tags: application: ${spring.application.name} export: prometheus: enabled: true server: servlet: context-path: /actuator health: mail: enabled: false
scrape_configs: - job_name: 'actuator-gitegg' basic_auth: username: user password: password scrape_interval: 15s scrape_timeout: 10s metrics_path: '/actuator/prometheus' static_configs: - targets: ['192.168.0.2:80','192.168.0.2:8002']
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EtLyP44z-1659068873697)(https://upload-images.jianshu.io/upload_images/19669137-909fb58c88c3dd9c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]。
通过以上步骤已经能够搭建和配置简单的Actuator(Micrometer)+ Prometheus + Grafana 微服务健康监控系统,查看Prometheus / Grafana 官方文档,我们可以知道其提供的功能非常丰富,在实际使用过程中,我们需要根据自己的业务需求进行更细维度的部署和配置。
服务健康监控系统是保障我们系统服务正常运行的必要工具,配置部署非常方便,但是,我们生产环境一定要注意系统安全问题,不要把健康检查的端点暴露出去,该做鉴权的做鉴权,该做安全防护的做安全防护,不要因为方便健康监控而增加安全风险。
网页题目:Prometheus+Grafana微服务监控告警系统
文章源于:http://www.shufengxianlan.com/qtweb/news24/403774.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联