• sprint boot如何整合外部监控系统Prometheus和图表解决方案Grafana


    在这篇文章中,你将学习sprint boot如何整合外部监控系统Prometheus和图表解决方案Grafana

    在这篇文章的末尾,你将在自己本地电脑上建立一个Prometheus和Grafana仪表盘,用来可视化监控Spring Boot应用产生的所有metrics。

    Prometheus

    Prometheus是一个开源的监控系统,起源于SoundCloud。它由以下几个核心组件构成:

    • 数据爬虫:根据配置的时间定期的通过HTTP抓去metrics数据。
    • time-series 数据库:存储所有的metrics数据。
    • 简单的用户交互接口:可视化、查询和监控所有的metrics。

    Grafana

    Grafana使你能够把来自不同数据源比如Elasticsearch, Prometheus, Graphite, influxDB等多样的数据以绚丽的图标展示出来。

    它也能基于你的metrics数据发出告警。当一个告警状态改变时,它能通知你通过email,slack或者其他途径。

    值得注意的是,Prometheus仪表盘也有简单的图标。但是Grafana的图表表现的更好。这也是为什么,在这篇文章中,我们将整合Grafana和Pormetheus来可视化metrics数据。

    增加Micrometer Prometheus Registry到你的Spring Boot应用

    Spring Boot使用Micrometer,一个应用metrics组件,将actuator metrics整合到外部监控系统中。

    它支持很多种监控系统,比如Netflix Atalas, AWS Cloudwatch, Datadog, InfluxData, SignalFx, Graphite, Wavefront和Prometheus等。

    为了整合Prometheus,你需要增加micrometer-registry-prometheus依赖:

    plain
     
    1
    2
    3
    4
    5
    <!-- Micrometer Prometheus registry  -->
    <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>

    一旦你增加上述的依赖,Spring Boot会自动配置一个PrometheusMeterRegistryCollectorRegistry来收集和输出格式化的metrics数据,使得Prometheus服务器可以爬取。

    所有应用的metrics数据是根据一个叫/prometheus的endpoint来设置是否可用。Prometheus服务器可以周期性的爬取这个endpoint来获取metrics数据。

    解析Spring Boot Actuator的/prometheus Endpoint

    首先,你可以通过actuator endpoint-discovery页面(http://localhost:8080/actuator)来看一下prometheus endpoint。

    plain
     
    1
    2
    3
    4
    "prometheus": {
    "href": "http://127.0.0.1:8080/actuator/prometheus",
    "templated": false
    }

    prometheus endpoint暴露了格式化的metrics数据给Prometheus服务器。你可以通过prometheus endpoint(http://localhost:8080/actuator/prometheus)看到被暴露的metrics数据:

    plain
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for  the Java virtual machine to use
    # TYPE jvm_memory_committed_bytes gauge
    jvm_memory_committed_bytes{area="nonheap",id="Code Cache",} 9830400.0
    jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 4.3032576E7
    jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 6070272.0
    jvm_memory_committed_bytes{area="heap",id="PS Eden Space",} 2.63192576E8
    jvm_memory_committed_bytes{area="heap",id="PS Survivor Space",} 1.2058624E7
    jvm_memory_committed_bytes{area="heap",id="PS Old Gen",} 1.96608E8
    # HELP logback_events_total Number of error level events that made it to the logs
    # TYPE logback_events_total counter
    logback_events_total{level="error",} 0.0
    logback_events_total{level="warn",} 0.0
    logback_events_total{level="info",} 42.0
    logback_events_total{level="debug",} 0.0
    logback_events_total{level="trace",} 0.0
    ...

    使用Docker下载和运行Prometheus

    下载Prometheus

    你可以使用docker pull命令来下载Prometheus docker image。

    shell
     
    1
    $ docker pull prom/prometheus

    一旦这个image被下载下来,你可以使用docker image ls命令来查看本地的image列表:

    shell
     
    1
    2
    3
    $ docker image ls
    REPOSITORY TAG IMAGE ID CREATED SIZE
    prom/prometheus latest b82ef1f3aa07 5 days ago 119MB

    Prometheus配置(prometheus.yml)

    接下来,我们需要配置Prometheus来抓取Spring Boot Actuator的/prometheus endpoint中的metrics数据。

    创建一个prometheus.yml的文件,填入以下内容:

    yaml
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # 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: 'spring-actuator'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['HOST_IP:8080']

    在Prometheus文档中,上面的配置文件是basic configuration file的扩展。

    上面中比较重要的配置项是spring-actuator job中的scrape_configs选项。

    metrics_path是Actuator中prometheus endpoint中的路径。targes包含了Spring Boot应用的HOSTPORT

    请确保替换HOST_IP为你Spring Boot应用运行的电脑的IP地址。值得注意的是,localhost将不起作用,因为我们将从docker container中连接HOST机器。你必须设置网络IP地址。

    使用Docker运行Prometheus

    最后,让我们在Docker中运行Prometheus。使用以下命令来启动一个Prometheus服务器。

    plain
     
    1
    $ docker run -d --name=prometheus -p 9090:9090 -v <PATH_TO_prometheus.yml_FILE>:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml

    请确保替换<PATH_TO_prometheus.yml_FILE>为你在上面创建的Prometheus配置文件的保存的路径。

    在运行上述命令之后,docker将在container中启动一个Prometheus服务器。你可以通过以下命令看到所有的container:

    plain
     
    1
    2
    3
    $ docker container ls
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    e036eb20b8ad prom/prometheus "/bin/prometheus --c…" 4 minutes ago Up 4 minutes 0.0.0.0:9090->9090/tcp prometheus

    在Prometheus仪表盘中可视化Spring Boot Metrics

    你可以通过访问http://localhost:9090访问Prometheus仪表盘。你可以通过Prometheus查询表达式来查询metrics。

    下面是一些例子:

    你可以从Prometheus官方文档中学习更多的 Prometheus Query Expressions

    使用Docker下载和运行Grafana

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

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

    上述命令将在Docker Container中开启一个Grafana,并且使用3000端口在主机上提供服务。

    你可以使用docker container ls来查看Docker container列表:

    shell
     
    1
    2
    3
    4
    $ docker container ls
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    939dd22a7179 quay.io/prometheus/prometheus "/bin/prometheus --c…" 14 minutes ago Up 14 minutes 0.0.0.0:9090->9090/tcp vigilant_neumann
    1f94c46bcf5c grafana/grafana "/run.sh" 22 hours ago Up 22 hours 0.0.0.0:3000->3000/tcp grafana

    你可以访问http://localhost:3000,并且使用默认的账户名(admin)密码(admin)来登录Grafana。

    配置Grafana导入Prometheus中的metrics数据

    通过以下几步导入Prometheus中的metrics数据并且在Grafana上可视化。

    在Grafana上增加Prometheus数据源

    data-source

    建立一个仪表盘图表

    add-dashboard

    添加一个Prometheus查询

    add-cpu-usage

    默认的可视化

    dashboard

    你可以在Github上看到完整的Actutator demo应用。

    阅读第一部分:Spring Boot Actuator:健康检查、审计、统计和监控

    更多阅读资源

    翻译源

    Author: MrHook
    Link: https://bigjar.github.io/2018/08/19/Spring-Boot-Metrics%E7%9B%91%E6%8E%A7%E4%B9%8BPrometheus-Grafana/
    Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
  • 相关阅读:
    LintCode 17.子集
    JS时间操作
    Ajax总结
    Ajax请求文件下载操作失败的原因和解决办法
    遍历Map的几种方式
    java获取文件大小的方法
    Ajax详细介绍
    第31课
    30-React JSX IN DEPTH
    28-React state提升、组件组合或继承
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/13840678.html
Copyright © 2020-2023  润新知