應(yīng)用監(jiān)控的基本組合
日志Logging[ELK]+指標(biāo)Metrics[AMP]+追蹤Tracing[SkyWalking]
通過指標(biāo)發(fā)現(xiàn)性能問題眷茁,通過追蹤定位性能蹬刷,通過日志定位出具體請求的明細(xì)參數(shù)
# 指標(biāo)的基本組合
Actuator+Micrometer+Prometheus+Grafana
Actuator: 采集內(nèi)部應(yīng)用內(nèi)部信息暴露給外部锨侯,提供原始監(jiān)控?cái)?shù)據(jù)厂置,比如健康檢查厚宰,指標(biāo)收集泰涂,應(yīng)用信息
Micrometer: 為性能數(shù)據(jù)收集提供通用的API鲫竞,包括:計(jì)時(shí)器,計(jì)數(shù)器逼蒙,可以與不同的監(jiān)控系統(tǒng)適配
Prometheus: 系統(tǒng)監(jiān)控報(bào)警框架从绘,提供多維度數(shù)據(jù)模型和靈活的查詢方式,采用Pull方式采集數(shù)據(jù)
Granfana: 數(shù)據(jù)監(jiān)控和數(shù)據(jù)統(tǒng)計(jì),可視化僵井,報(bào)警陕截,通知
# 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可以監(jiān)控程序驹沿,loggers可以修改日志級別艘策,其他根據(jù)需要開啟和關(guān)閉。配置以后可以通過/actuator/prometheus進(jìn)行訪問渊季。
* 如果因?yàn)閏ontentType訪問失敗朋蔫,需要在WebMvcConfig中configureMessageConverters增加"application/openmetrics-text"的支持。
- 主要指標(biāo)
運(yùn)行時(shí)間
process_uptime_seconds{job="flower-webapi"}
jvm full GC - 24小時(shí)gc次數(shù) - 可以設(shè)置報(bào)警
increase(jvm_gc_pause_seconds_count{application="agent", cause="Metadata GC Threshold"}[24h])
jvm 內(nèi)存使用 -查看不同區(qū)域內(nèi)存却汉,合理調(diào)整jvm參數(shù)
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線程數(shù)驯妄,jvm gc收集次數(shù)和收集耗時(shí)
接口請求次數(shù),請求時(shí)長合砂,日志情況
# Prometheus
- 安裝和配置
Prometheus監(jiān)控的目標(biāo)是:長期趨勢分析
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"]*此配置需要訪問權(quán)限青扔,具體credentials可以通過WebSecurityConfig設(shè)置特定角色訪問
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,需要在同一個(gè)網(wǎng)絡(luò)中翩伪,需要指定--network微猖,可以通過docker network create flower預(yù)先創(chuàng)建
* Prometheus可以使用多種Exporter來監(jiān)控其他類型的數(shù)據(jù),常見Exporter如下:
BlackExporter
Prometheus社區(qū)提供的官方黑盒監(jiān)控解決方案缘屹,可以通過https, https, dns, tcp, icmp方式對網(wǎng)絡(luò)進(jìn)行探測
運(yùn)行
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進(jìn)行驗(yàn)證
運(yùn)行-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進(jìn)行驗(yàn)證參數(shù)
https://nginx.org/en/docs/http/ngx_http_stub_status_module.htmlprometheus job
- job_name: "flower-nginx"
? metrics_path: "/metrics"
? static_configs:
? - targets: ["flower-nginx:9113"]
Node exporter
用于提供*NIX內(nèi)核的硬件以及系統(tǒng)指標(biāo)凛剥,可以通過--collectors.enabled執(zhí)行需要收集的功能模塊
重點(diǎn)關(guān)注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"]主要指標(biāo)
負(fù)載
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常用指標(biāo)含義
https://www.cnblogs.com/robinunix/p/11276296.html
Docker Explorter - cavdisor
監(jiān)控docker容器
運(yùn)行
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:latestprometheus job
- job_name: "flower-docker"
? metrics_path: "/metrics"
? static_configs:
? - targets: ["101.200.53.244:9300"]主要指標(biāo)
CPU使用情況
sum(rate(container_cpu_usage_seconds_total{name="flower-docker"}[5m]))*100
內(nèi)存使用情況
sum(container_memory_working_set_bytes{name="flower-docker"})/1024
容器數(shù)量-可作為預(yù)警使用
count(container_start_time_seconds{name != ""})
- 探索PromQL
metric指標(biāo)-要監(jiān)控的對象
格式:<metric name>{<label name>=<label value>,}
sample-樣本-某個(gè)時(shí)間戳的指標(biāo)的值
metric類型
Counter計(jì)數(shù)器:代表一種樣本數(shù)據(jù)單調(diào)遞增的指標(biāo)
Guage儀表盤:代表一種樣本數(shù)據(jù)可以任意變化的指標(biāo)
Histogram直方圖:在一段時(shí)間內(nèi)對數(shù)據(jù)進(jìn)行采樣
Summary摘要:表示一段時(shí)間內(nèi)的數(shù)據(jù)采樣結(jié)果
# 配置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? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#默認(rèn)是false
host = smtp.mxhichina.com:465? ?#smtp服務(wù)器的地址和端口 465|25
user = test@xxx.com? ? ? ? ? ? ? ? ? ? #你登錄郵箱的賬號
password = xxxxxxx? ? ? ? ? ? ? ? ? ? ? #你郵箱賬號的密碼
from_address = test@xxx.com? ? ? #發(fā)郵件的賬號
from_name = Grafana? ? ? ? ? ? ? ? ? ?#自定義的名字
ehlo_identity = dashboard.example.com #無關(guān)緊要的一個(gè)標(biāo)示...
# 安全策略
- 同一機(jī)器的,使用本機(jī)地址訪問轻姿,端口不對外開發(fā)
- 同一機(jī)器的犁珠,不同Docker,可以使用同一docker網(wǎng)絡(luò)互亮,端口不用映射
- 同一專有網(wǎng)絡(luò)的犁享,使用專有網(wǎng)絡(luò)地址訪問,端口不對外開發(fā)
- 只有Granfana對外公開豹休,同時(shí)設(shè)置管理員賬號
參考文獻(xiàn)
https://mp.weixin.qq.com/s/yqMdXehLCl7-m2kcfjh6OQ