微服务的监控并实现钉钉图文告警

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 微服务使用Prometheus+Grafana方式实现监控的文章比较多,本文主要侧重如何实现即时的钉钉告警通知,并能够在通知消息中显示告警图片

为了比较方便统计微服务服务器基础指标和相关运行状态,目前比较流行和成熟的方案是采用Prometheus+Grafana。本文主要基于docker的方式,快速搭建一套监控体系。

  1. 应用改造

为了整合Prometheus,需要在微服务应用中增加micrometer-registry-prometheus依赖:

<!-- Micrometer Prometheus registry  -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

配置中打开端点/actuator/prometheus

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
  metrics:
    tags:
      application: ${spring.application.name}
  1. 启动prometheus

运行prometheus容器:

$ docker run -d --name=prometheus -p 9090:9090 -v /docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:v2.16.0 --config.file=/etc/prometheus/prometheus.yml

其中映射到主机的配置文件prometheus.yml的配置如下:

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
# rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ['127.0.0.1:9090']

  - job_name: 'nacos-prometheus'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 15s
    consul_sd_configs:
      - server: '192.168.0.102:7000'
        services: []
  1. 启动Grafana

使用以下命令可以使Docker下载和运行Grafana:

$ docker run -d --name=grafana -p 3000:3000 grafana/grafana

为了能让Grafana的面板嵌入到应用中,需要更改配置
以root用户进入容器中

$ docker exec -u root -it grafana sh
# vi conf/defaults.ini

image.png
image.png

  1. 导入模版

使用dashboard模版,可以减少定制的时间。官网的dashboard广场,有很多现成的:
https://grafana.com/grafana/dashboards
在Grafana的面板中点击菜单Import:

image.png
从官网dashboard广场获取面板ID:
image.png

此处粘贴入模版ID:
image.png

微服务应用,推荐使用4701

  1. 将Grafana嵌入自己的应用页面

dashboard 和 panel都可以分享,如图点击share:
image.png
弹出的对话框中,可以自定义一些参数
image.png

分享出来的链接加入kiosk=tv参数还可以隐藏面板的左边菜单和上面标题栏。然后就可以用iframe标签嵌入到前端页面里去了。

  1. 告警配置

如需告警,则需要把配置文件中的这个地址改下,否则docker里的会是错误的
image.png
在Grafana的Alert面板中,可以根据需要配置告警的一些参数,如监测频率等

image.png

  1. 生成图文告警

首先在Grafana的Notification channels面板中配置告警通道:
image.png
有2个参数必须注意,Url填入告警分发的钉钉机器人的webhook。如何添加群机器人并获得webkook,请参考钉钉官网https://ding-doc.dingtalk.com/doc#/serverapi2/krgddi。此外,要注意勾选 Include image 选项。
配置好后,Grafana的告警图表还需要一个外部的图像渲染服务。我们依然使用docker来创建并启动此服务,
新建容器并对外开放8081端口:

$ docker run -d --name=grafana-image-renderer -p 8081:8081 --env GF_RENDERER_PLUGIN_TZ=Asia/Shanghai --env GF_RENDERER_PLUGIN_IGNORE_HTTPS_ERRORS=true grafana/grafana-image-renderer

进入容器中修改配置文件 /conf/defaults.ini

[rendering]
# 这里指定使用外部图像渲染,指向刚建立的容器 /render 路径不可少
server_url = http://192.168.0.102:8081/render
# If the remote HTTP image renderer service runs on a different server than the
callback_url = http://192.168.0.102:3000

还有:

[external_image_storage]
# 使用s3协议
provider = s3
[external_image_storage.s3]
# 这个链接必须要能连通互联网,否则图像能生成,但会无法访问
endpoint = http://www.xxx.com
# 这个参数必须设置成true,否则下面的bucket参数会加在上面endpoint最前面,导致访问不了,会变成 http://mybucket.www.xxx.com
path_style_access = true
# 不要配置
bucket_url =
bucket = mybucket
# minIO默认的region是us-east-1
region = us-east-1
path = images
access_key = AKIAIOSFODNN7EXAMPLE
secret_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY中的

我们用的是本地的minIO作为图像生成的存储服务。当然用阿里云的OSS应该也是没有问题的。

通过以上的配置,当Grafana监测到系统指标超过告警阀值,则就会向钉钉发送图文消息
image.png

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
5月前
|
运维 监控 数据可视化
ARMS的微服务监控
【8月更文挑战第23天】
82 6
|
1月前
|
Prometheus 监控 Java
如何全面监控所有的 Spring Boot 微服务
如何全面监控所有的 Spring Boot 微服务
69 3
|
2月前
|
监控 负载均衡 Java
微服务架构下的服务治理与监控
微服务架构下的服务治理与监控
113 0
|
2月前
|
存储 监控 负载均衡
构建高效微服务架构:服务治理与监控的实践
构建高效微服务架构:服务治理与监控的实践
|
3月前
|
监控 Java 对象存储
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
56 1
|
5月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
5月前
|
Prometheus 监控 Cloud Native
使用Prometheus搞定微服务监控
使用Prometheus搞定微服务监控
使用Prometheus搞定微服务监控
|
5月前
|
存储 监控 负载均衡
微服务架构中的服务治理与监控技术
【8月更文挑战第3天】微服务架构中的服务治理与监控是确保系统稳定、高效运行的重要手段。通过构建注册中心实现服务的自动注册和发现,通过部署监控工具实现对服务的全面监控,可以有效地提高系统的可靠性和可用性。未来,随着技术的不断发展,服务治理与监控技术也将不断完善和优化,为微服务架构的广泛应用提供更加坚实的支撑。
|
5月前
|
Prometheus 监控 Cloud Native
微服务的监控与可观测性
【8月更文第29天】在微服务架构中,确保每个服务的健康状态和性能表现是非常重要的。为了达到这一目标,我们需要实施一套完整的监控和可观测性方案。本篇文章将介绍如何通过日志、指标和追踪来监测微服务的状态和性能,并提供相应的代码示例。
522 0
|
5月前
|
Prometheus 监控 Cloud Native
基于prometheus的微服务指标监控
基于prometheus的微服务指标监控