番外篇-Prometheus入门

应用监控的基本组合

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

# 指标的基本组合

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


# SpringBoot Actuator

- 引入SpringBoot Actuator及micrometer   

pom.xml


    org.springframework.boot
    spring-boot-starter-actuator


    io.micrometer
    micrometer-registry-prometheus

- 配置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://: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指标-要监控的对象
格式:{


# 配置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 = [email protected]                    #你登录邮箱的账号
password = xxxxxxx                      #你邮箱账号的密码
from_address = [email protected]      #发邮件的账号
from_name = Grafana                   #自定义的名字
ehlo_identity = dashboard.example.com #无关紧要的一个标示...

* docker配置说明

# 安全策略

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


参考文献

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


SpringBoot入门系列

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

你可能感兴趣的:(番外篇-Prometheus入门)