美文网首页
番外篇-Prometheus入门

番外篇-Prometheus入门

作者: jimmyz81 | 来源:发表于2022-04-21 14:16 被阅读0次

    应用监控的基本组合

    日志Logging[ELK]+指标Metrics[AMP]+追踪Tracing[SkyWalking]
    通过指标发现性能问题,通过追踪定位性能,通过日志定位出具体请求的明细参数

    # 指标的基本组合

    Actuator+Micrometer+Prometheus+Grafana
    Actuator: 采集内部应用内部信息暴露给外部,提供原始监控数据,比如健康检查,指标收集,应用信息
    Micrometer: 为性能数据收集提供通用的API,包括:计时器,计数器,可以与不同的监控系统适配
    Prometheus: 系统监控报警框架,提供多维度数据模型和灵活的查询方式,采用Pull方式采集数据
    Granfana: 数据监控和数据统计,可视化,报警,通知


    # SpringBoot Actuator

    - 引入SpringBoot Actuator及micrometer   

    pom.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

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

    - 配置actuator

    application.yml

    management:
      endpoint.health.show-details: always
      endpoints:
        web.exposure.include: prometheus,loggers
        metrics.export.prometheus.enabled: true
      metrics:
        tags.application: flower

    我们只配置了prometheus和loogers,prometheus可以监控程序,loggers可以修改日志级别,其他根据需要开启和关闭。配置以后可以通过/actuator/prometheus进行访问。
    * 如果因为contentType访问失败,需要在WebMvcConfig中configureMessageConverters增加"application/openmetrics-text"的支持。

    - 主要指标

    运行时间
    process_uptime_seconds{job="flower-webapi"}
    jvm full GC - 24小时gc次数 - 可以设置报警
    increase(jvm_gc_pause_seconds_count{application="agent", cause="Metadata GC Threshold"}[24h])
    jvm 内存使用 -查看不同区域内存,合理调整jvm参数
    jvm_memory_used_bytes{job="flower-webapi", area="heap"}/1024/1024
    api qps - 5分钟访问量
    sum(increase(http_server_requests_seconds_count{job="flower-webapi"}[5m])/300)

    还可以查看
    jvm线程数,jvm gc收集次数和收集耗时
    接口请求次数,请求时长,日志情况


    # Prometheus

    - 安装和配置

    Prometheus监控的目标是:长期趋势分析
    Prometheus中文文档

    Prometheus配置

    global:
      scrape_interval: 15s
    scrape_configs:
    - job_name: "flower-webapi"
      params:
        "product-code": ["A20001"]
      authorization:
        type: Bearer
        credentials: "eyJ0eXAiOiJ...6Z6w"
      metrics_path: "/actuator/prometheus"
      static_configs:
      - targets: ["101.200.53.244:8210"]

    *此配置需要访问权限,具体credentials可以通过WebSecurityConfig设置特定角色访问
    antMatchers(securityConfig.getActuatorUrl()).hasRole(securityConfig.getActuatorRole())

    Prometheus安装

    docker pull prom/prometheus
    docker run --name prometheus -it -p 9090:9090 -v prometheus.yml:/etc/prometheus/prometheus.yml --network flower --network-alias flower-prom -d prom/prometheus

    * prometheus.yml参照prometheus配置
    * 为了让Prometheus可以访问其他Docker,需要在同一个网络中,需要指定--network,可以通过docker network create flower预先创建
    * Prometheus可以使用多种Exporter来监控其他类型的数据,常见Exporter如下:

    BlackExporter

    Prometheus社区提供的官方黑盒监控解决方案,可以通过https, https, dns, tcp, icmp方式对网络进行探测
    运行
    docker run -id --name cove-probe -p 9115:9115 -v blockbox.yml:/etc/blackbox_exporter/config.yml prom/blackbox-exporter
    配置
    https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md

    Nginx Exporter

    开启-需要开启Nginx sub_status功能
    配置-sub_status
    server {
        listen 9000;
        location /nginx_status {
            stub_status on;
            access_log off;
            allow all;
        }
    }
    通过curl http://localhost:9000/nginx_status进行验证

    运行-exporter
    docker run -p 9113:9113 --network flower--network-alias flower-nginx   nginx/nginx-prometheus-exporter:0.10.0 -nginx.scrape-uri=http://<nginx>:8080/stub_status
    通过curl http://localhost:9113/metrics进行验证

    参数
    https://nginx.org/en/docs/http/ngx_http_stub_status_module.html

    prometheus job
    - job_name: "flower-nginx"
      metrics_path: "/metrics"
      static_configs:
      - targets: ["flower-nginx:9113"]

    Node exporter

    用于提供*NIX内核的硬件以及系统指标,可以通过--collectors.enabled执行需要收集的功能模块
    重点关注cpu, memory, disk
    ./node_exporter --collector.disable-defaults --collector.cpu --collector.diskstats --collector.meminfo --collector.loadavg --collector.filesystem --collector.filesystem.ignored-fs-types="tmpfs" --web.listen-address=":9110"

    prometheus job
    - job_name: "flower_node"
      metrics_path: "/metrics"
      static_configs:
      - targets: ["ip:9110"]

    主要指标
    负载
    irate(node_load15{job="flower_node"}[5m])
    cpu使用率
    1-sum(irate(node_cpu_seconds_total{mode="idle",job="flower_node "}[5m]))/count(node_cpu_seconds_total{mode="user",job="flower_node "})
    mem使用率
    node_memory_MemAvailable_bytes{job="flower_node"}/node_memory_MemTotal_bytes{job="flower_node"}
    disk使用率
    1-node_filesystem_free_bytes{job="flower_node"}/node_filesystem_size_bytes{job="flower_node"}

    * exporter常用指标含义
    https://www.cnblogs.com/robinunix/p/11276296.html

    Docker Explorter - cavdisor

    监控docker容器
    运行
    docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=9300:8080 --detach=true --name=agent-docker-manage --privileged --device=/dev/kmsg --network flower --network-alias flower-docker -d google/cadvisor:latest

    prometheus job
    - job_name: "flower-docker"
      metrics_path: "/metrics"
      static_configs:
      - targets: ["101.200.53.244:9300"]

    主要指标
    CPU使用情况
    sum(rate(container_cpu_usage_seconds_total{name="flower-docker"}[5m]))*100
    内存使用情况
    sum(container_memory_working_set_bytes{name="flower-docker"})/1024
    容器数量-可作为预警使用
    count(container_start_time_seconds{name != ""})

    * 介绍Introduction - container-monitor (gitbook.io)

    - 探索PromQL

    metric指标-要监控的对象
    格式:<metric name>{<label name>=<label value>,}
    sample-样本-某个时间戳的指标的值
    metric类型
    Counter计数器:代表一种样本数据单调递增的指标
    Guage仪表盘:代表一种样本数据可以任意变化的指标
    Histogram直方图:在一段时间内对数据进行采样
    Summary摘要:表示一段时间内的数据采样结果


    # 配置Granfana

    部署
    docker run -d --name agent-granfana -p 3000:3000 -v grafana.ini:/etc/grafana/grafana.ini grafana/grafana

    访问
    http://ip:3000

    邮件配置

    [smtp]
    enabled = true                               #默认是false
    host = smtp.mxhichina.com:465   #smtp服务器的地址和端口 465|25
    user = test@xxx.com                    #你登录邮箱的账号
    password = xxxxxxx                      #你邮箱账号的密码
    from_address = test@xxx.com      #发邮件的账号
    from_name = Grafana                   #自定义的名字
    ehlo_identity = dashboard.example.com #无关紧要的一个标示...

    docker配置说明

    # 安全策略

    - 同一机器的,使用本机地址访问,端口不对外开发
    - 同一机器的,不同Docker,可以使用同一docker网络,端口不用映射
    - 同一专有网络的,使用专有网络地址访问,端口不对外开发
    - 只有Granfana对外公开,同时设置管理员账号


    参考文献

    https://mp.weixin.qq.com/s/yqMdXehLCl7-m2kcfjh6OQ


    SpringBoot入门系列

    番外篇-没用的知识
    番外篇-Docker入门
    番外篇-Prometheus入门

    相关文章

      网友评论

          本文标题:番外篇-Prometheus入门

          本文链接:https://www.haomeiwen.com/subject/lqyiertx.html