docker-compose 范例可参考 github 上的配置,主要是 prometheus、pushgateway 和 grafana 如果需要搭配告警需要 alertmanager 服务。nodeexporter 是官方提供监控主机资源的服务可参考此链结。同样的使用 docker-compose up
就可以将服务启动,但是配置档需要依照需求进行修正。9090 Port 是 prometheus 预设的服务存取。
version: '3.6'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus:/etc/prometheus
- prometheus_pv:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=24h'
- '--web.enable-lifecycle'
restart: unless-stopped
expose:
- "9090"
ports:
- 3010:9090
networks:
- monitor-net
labels:
org.label-schema.group: "monitor"
depends_on:
- grafana
- nodeexporter
- pushgateway
- alertmanager
pushgateway:
image: prom/pushgateway
container_name: pushgateway
volumes:
- pushgateway_pv:/data
command:
- --persistence.file=/data/pushgateway.data
- --persistence.interval=1h
restart: unless-stopped
expose:
- 9091
ports:
- 8080:9091
networks:
- monitor-net
labels:
org.label-schema.group: "monitor"
alertmanager:
image: prom/alertmanager
container_name: alertmanager
volumes:
- ./alertmanager:/prometheus
- alertmanager_pv:/data
command:
- '--config.file=/prometheus/alertmanager.yml'
- '--storage.path=/data'
networks:
- monitor-net
labels:
org.label-schema.group: "monitor"
org.label-schema.service: "alert"
grafana:
image: grafana/grafana
container_name: grafana
user: "472"
volumes:
- grafana_pv:/var/lib/grafana # docker volume create grafana_pv
- ./grafana/provisioning:/etc/grafana/provisioning
env_file:
- .env.grfana
restart: unless-stopped
ports:
- 3000:3000
networks:
- monitor-net
labels:
org.label-schema.group: "monitor"
nodeexporter:
image: prom/node-exporter
container_name: node_exporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
restart: unless-stopped
expose:
- 9100
network_mode: host
labels:
org.label-schema.group: "monitor"
networks:
monitor-net:
driver: bridge
volumes:
prometheus_pv: {}
grafana_pv: {}
alertmanager_pv: {}
pushgateway_pv: {}
在 /prometheus/prometheus.yml
下配置相关的参数
global:
scrape_interval: 5s # 多久获取一次目标
evaluation_interval: 15s # 多久评估一次规则
rule_files: # 如果有使用 Alert,可用此关键字导入规则档案
- alerts/*.yml
alerting:
alertmanagers:
- static_configs:
- targets:
# Alertmanager's default port is 9093
- alertmanager:9093
scrape_configs: # 以下是设定要抓取资料的不同服务
- job_name: 'nodeexporter' # 针对主机资源
metrics_path: /metrics
file_sd_configs:
- files:
- /etc/prometheus/nodeexporter.yml
refresh_interval: 3m
- job_name: 'cadvisor' # 针对容器
metrics_path: /metrics
file_sd_configs:
- files:
- /etc/prometheus/cadvisor.yml
refresh_interval: 3m
- job_name: 'postgresql-exporter' # 针对 postgresql
metrics_path: /metrics
file_sd_configs:
- files:
- /etc/prometheus/postgresqlexporter.yml
refresh_interval: 3m
- job_name: 'es-exporter'
scrape_interval: 60s
scrape_timeout: 30s
metrics_path: /metrics
file_sd_configs:
- files:
- /etc/prometheus/elasticsearchexporter.yml
refresh_interval: 3m
- job_name: 'pushgateway'
scrape_interval: 5s
honor_labels: true
file_sd_configs:
- files:
- /etc/prometheus/pushgateway.yml
refresh_interval: 3m
- job_name: 'otel-collector'
scrape_interval: 10s
static_configs:
file_sd_configs:
- files:
- /etc/prometheus/otel.yml
- job_name: 'docker'
static_configs:
- targets: ['192.168.101.129:9323']
labels:
group: 'local'
- job_name: 'prometheus'
scrape_interval: 10s
static_configs:
- targets: ['localhost:9090']
labels:
group: 'local'
scrape_configs
下是设定要抓取资料的不同服务。job_name
可用来做一个识别,scrape_interval
获取 metric 的频率,static_configs
通常都用来指定其要监控服务的位置。在 Spring boot 中我们就会透过 pushgateway
方式将我们的 metric 传给 Prometheus。files
这些配置可以对应 /monitor/prometheus
下的内容。
内建,支持两种向量,同时内建一组用於数据处理的函示
范围向量可写成 http_request_total{method="Get"} offset 5m
获取过去 5 分钟的资料;http_request_total{method="Get"}[5m] offset 1d
获取一天之前的5分钟内资料
=
!=
=~
!~
(1-avg(irate(node_cpu_seconds_total{mode='idle'}[5m])) by (instance)) * 100
Prom 是基於 pull 方式抓取数据,因此需要事先知道各个 Target 的位置,因此才需要服务发现方式来动态侦测 Target。
- job_name: "xxxx"
file_sd_configs:
- file:
- target/*.yml # 档案路径
refresh_interval: 2m # 每两分钟重新加载
metric_relabel_configs
,通常用来删除不必要指标或着添加、删除、修改指标的标签值或格式而每个 Target 都有标签。通常会有
__address__
__metrics_path__
metrics
__scheme__
global:
scrape_interval: 20s
evaluation_interval: 1m
在 Prom 中我们设置每 20s 获取一次指标。评估间格(evaluation interval)为 1 分钟。我们触发一个告警会是:
指标监控时间+scrape_interval+evaluation_interval+FOR
告警规则配置如下,可参考此地方其提供许多相关告警配置:
groups:
- name: host
rules:
# Memory
# Node memory is filling up (< 10% left)
- alert: HostOutOfMemory
expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10
for: 2m
labels:
severity: warning
annotations:
summary: Host out of memory (instance {{ $labels.instance }})
description: Node memory is filling up (< 10% left)\n VALUE = {{ $value }}\n LABELS = {{ $labels }}
同时 prom 也进行配置,以用来触发告警
rule_files: # 规则的路径
- alerts/*.yml
alerting: # 与 alertmanagers 配置
alertmanagers:
- static_configs:
- targets:
# Alertmanager's default port is 9093
- alertmanager:9093
通知的配置可参考此链接
简单来说就是数据来源。
新增一个仪表板来实验
使用 promQL 进行获取数据指标
Setting Default | value |
---|---|
GF_PATHS_CONFIG | /etc/grafana/grafana.ini |
GF_PATHS_DATA | /var/lib/grafana |
GF_PATHS_HOME | /usr/share/grafana |
GF_PATHS_LOGS | /var/log/grafana |
GF_PATHS_PLUGINS | /var/lib/grafana/plugins |
GF_PATHS_PROVISIONING | /etc/grafana/provisioning |
这边个人对於 JVM 的内容其实不是很熟习,这一部分是我未来要学习的目标,虽然 Promethues 与 Grafana 都有配置好,但对於应用程序服务的程序语言或是生命周期这些不熟悉都是没意义的。
在 Actuator
部分提供了很多的端点给我们使用像
<<: Leetcode 挑战 Day 18 [ 367. Valid Perfect Square ]
昨天没有写完的 Array & Slice(上) ,今天要来把补完进度。 那我们就开始吧 ─...
昨天看完基础结构後,有没有发现纪录购买商品的部份不是那麽范用, 包含数量、商品项目id、商品单价格等...
领队报告领队报告,Python爬虫之旅就要启程啦~ 请团员们准备好行李,我们准备出发! 今天的影片为...
封装 由於之後我打算将godog在CI/CD工具上定期跑BDD测试,所以我想要将godog封装在im...
Swift 游戏示意 Swift 游戏纪录 最後一个功能是游戏纪录 修改一下Player.swift...