1. Pushgateway:推送网关,为支持short-lived(生命周期较短)作业提供一个推送网关。应用于无法pull方式获取指标的应用。
2. exporter:应用指标暴露接口。
1. Prometheus Server:主服务器,负责收集和存储时间序列数据,并对查询的数据进行计算。
2. Retrieval:指标数据采集组件,它会主动从Pushgateway或者Exporter拉取指标数据。
3. Service discovery:可以动态发现要监控的目标。
4. TSDB:监控数据存储与查询。
5. HTTP server:prometheus对外提供HTTP服务。
1. Alertmanager:专门用于处理alert报警的组件。
2. 数据可视化:包括Prometheus build-in WebUI、Grafana、其他基于API开发的客户端。
global:
scrape_interval: 15s
- job_name: "node"
# 静态抓取
static_configs:
- targets:
- "192.168.100.10:20001"
- "192.168.100.11:20001
- "192.168.100.12:20001"
# 动态发现:kubernets
- job_name: kubernetes-apiservers
metrics_path: /metrics
scheme: https
kubernetes_sd_configs:
- api_server: https://192.168.2.224:6443/
role: endpoints
bearer_token_file: /prometheus/k8s_token
insecure_skip_verify: true
bearer_token_file: /prometheus/k8s_token
tls_config:
insecure_skip_verify: true
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
separator: ;
regex: default;kubernetes;https
replacement: $1
action: keep
- separator: ;
regex: (.*)
target_label: __address__
replacement: 192.168.2.224:6443
action: replace
# 动态发现:文件
- job_name: "file_job"
file_sd_configs:
- files:
- targets/prometheus*.yaml
refresh_internal: 2m
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
# alertmanager地址
- targets: ["localhost:9093"]
# 告警规则文件
rule_files:
- "*_rules.yml"
groups:
- name: example
rules:
# 告警规则
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
- Resource metrics——CPU核 和 内存利用率指标。
- Pod metrics——例如网络利用率和流量。
- Object metrics——特定对象的指标,比如Ingress, 可以按每秒使用请求数来扩展容器。
- Custom metrics——自定义监控,比如通过定义服务响应时间,当响应时间达到一定指标时自动扩容。
1. 安装prometheus operator。
2. 安装promethues adatper。
3. 安装metric server。
4. apiserver开启API Aggregator 。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
注意:只支持cpu和memory
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Pods
pods:
metric:
name: packets-per-second
target:
type: AverageValue
averageValue: 1k
注意:Pod 度量指标 。这些指标从某一方面描述了 Pod, 在不同 Pod 之间进行平均,并通过与一个目标值比对来确定副本的数量。 它们的工作方式与资源度量指标非常相像,只是它们 仅 支持 target 类型为 AverageValue 。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Object
object:
metric:
name: requests-per-second
describedObject:
apiVersion: networking.k8s.io/v1
kind: Ingress
name: main-route
target:
type: Value
value: 10k
注意: (Object)度量指标 。 这些度量指标用于描述在相同名字空间中的别的对象,而非 Pod。 请注意这些度量指标不一定来自某对象,它们仅用于描述这些对象。 对象度量指标支持的 target 类型包括 Value 和 AverageValue 。 如果是 Value 类型, target 值将直接与 API 返回的度量指标比较, 而对于 AverageValue 类型,API 返回的度量值将按照 Pod 数量拆分, 然后再与 target 值比较。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: External
external:
metric:
name: queue_messages_ready
selector:
matchLabels:
queue: "worker_tasks"
target:
type: AverageValue
averageValue: 30
注意: 使用外部度量指标时,需要了解你所使用的监控系统,相关的设置与使用自定义指标时类似。 外部度量指标使得你可以使用你的监控系统的任何指标来自动扩缩你的集群。 你需要在 metric 块中提供 name 和 selector ,同时将类型由 Object 改为 External 。 如果 metricSelector 匹配到多个度量指标,HorizontalPodAutoscaler 将会把它们加和。 外部度量指标同时支持 Value 和 AverageValue 类型,这与 Object 类型的度量指标相同。