Prometheus指南
这篇指南展示了如何在集群中安装、配置和使用一个简单的Prometheus实例。你将通过集群运行Prometheus,配置它来抓取它自己和一个示例应用程序的数据,然后使用查询、规则和图表来使用收集到的时间序列数据。
部署空的Prometheus实例
一旦你准备好了Helm,你可以添加一个图表仓库。检查Artifact Hub上可用的Helm图表仓库
$ helm repo add bitnami https://charts.bitnami.com/bitnami
这里是原始 values.yaml version 8.4.3
需要修改一些信息来完成部署空的Prometheus实例
## Deploy a Prometheus instance
##
prometheus:
## @param prometheus.replicaCount Number of Prometheus replicas desired
##
replicaCount: 1
## @param prometheus.scrapeInterval Interval between consecutive scrapes
##
scrapeInterval: "60s"
## @param prometheus.resources CPU/Memory resource requests/limits for node
## ref: https://kubernetes.io/docs/user-guide/compute-resources/
##
resources:
resources:
limits: # sizing Prometheus https://www.robustperception.io/how-much-ram-does-prometheus-2-x-need-for-cardinality-and-ingestion/
cpu: "1000m"
memory: "2048Mi"
## Prometheus persistence parameters
##
persistence:
## @param prometheus.persistence.enabled Use PVCs to persist data. If the storageSpec is provided this will not take effect.
##
enabled: true
## @param prometheus.persistence.size Persistent Volume Size
##
size: 8Gi
## @param prometheus.persistence.annotations Persistent Volume Claim annotations
##
annotations:
"ignore": "true"
## @param prometheus.podMetadata [object] Standard object's metadata
## ref: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#metadata
##
podMetadata:
## labels:
## app: prometheus
## k8s-app: prometheus
##
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: "/metrics"
prometheus.io/port: "9090"
## If true, create a serviceMonitor for alertmanager
##
serviceMonitor:
## @param prometheus.serviceMonitor.enabled Creates a ServiceMonitor to monitor Prometheus itself
##
enabled: false
## @param prometheus.externalLabels External labels to add to any time series or alerts when communicating with external systems
##
externalLabels:
cluster: "just-test"
## @param prometheus.serviceMonitorNamespaceSelector Namespaces to be selected for ServiceMonitor discovery
## See https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#namespaceselector for usage
##
serviceMonitorNamespaceSelector:
matchExpressions:
- key: "namespace"
operator: "In"
values:
- "test"
## @param prometheus.retention Metrics retention days
##
retention: 30d
## @param prometheus.retentionSize Maximum size of metrics
##
retentionSize: 2GB
## @param prometheus.disableCompaction Disable the compaction of the Prometheus TSDB
## See https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#prometheusspec
## ref: https://prometheus.io/docs/prometheus/latest/storage/#compaction
##
disableCompaction: true
## @param prometheus.shards Number of Prometheus shards desired
##
shards: 1
## Note that the prometheus will fail to provision if the correct secret does not exist.
## @param prometheus.additionalScrapeConfigs.enabled Enable additional scrape configs
## @param prometheus.additionalScrapeConfigs.type Indicates if the cart should use external additional scrape configs or internal configs
## @param prometheus.additionalScrapeConfigs.external.name Name of the secret that Prometheus should use for the additional external scrape configuration
## @param prometheus.additionalScrapeConfigs.external.key Name of the key inside the secret to be used for the additional external scrape configuration
## @param prometheus.additionalScrapeConfigs.internal.jobList A list of Prometheus scrape jobs
##
additionalScrapeConfigs:
enabled: true
external:
## Name of the secret that Prometheus should use for the additional scrape configuration
##
name: prometheus-scrape-jobs
## Name of the key inside the secret to be used for the additional scrape configuration.
##
key: scrape-jobs.yaml
## Bitnami Prometheus image version
## ref: https://hub.docker.com/r/bitnami/prometheus/tags/
## @param prometheus.image.registry Prometheus image registry
## @param prometheus.image.repository Prometheus image repository
## @param prometheus.image.tag Prometheus image tag (immutable tags are recommended)
## @param prometheus.image.digest Prometheus image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
## @param prometheus.image.pullSecrets Specify docker-registry secret names as an array
##
image:
registry: dockerhub.aliyuncs.com
repository: dockerhub/prometheus
tag: 2.43.0-debian-11-r2
## Thanos sidecar container configuration
##
thanos:
## @param prometheus.thanos.create Create a Thanos sidecar container
##
create: false
Prometheus 应该已经启动。您也应该能够浏览到它自身的状态页面,地址是 localhost:9090。给它几秒钟的时间,让它从它自己的 HTTP 指标端点收集有关自身的数据。
您也可以通过访问其指标端点来验证Prometheus是否正在提供有关自身的指标:prometheus:9090/metrics
。
抓取配置
Prometheus通过抓取目标的指标HTTP端点来收集指标。由于Prometheus以相同的方式公开有关自身的数据,它也可以抓取并监控自身的健康状况。
虽然一个只收集自身数据的Prometheus服务器并不是很有用,但它是一个很好的开始示例。将以下基本的Prometheus配置保存为一个名为prometheus.yml的文件:
apiVersion: v1
kind: Secret
metadata:
name: prometheus-scrape-jobs
namespace: test
type: Opaque
stringData:
scrape-jobs.yaml: |
- job_name: "annotation"
kubernetes_sd_configs:
- role: pod
namespaces:
own_namespace: true
names: ["test"]
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_annotation_prometheus_io_scrape
regex: true
action: keep
- action: labelmap # namespace
regex: __meta_kubernetes_namespace
replacement: namespace
- action: labelmap
regex: __meta_kubernetes_pod_label_app_kubernetes_io_name
replacement: app
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
target_label: __metrics_path__
action: replace
- action: replace
source_labels:
[__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
regex: (.+):(?:\d+);(\d+)
replacement: ${1}:${2}
target_label: __address__
有关配置选项的完整规范,请参见配置文档。
观察指标收集
要绘制表达式,请转到 prometheus:9090/graph
并使用 “Graph” 标签页。
例如,输入以下表达式来绘制自抓取的 Prometheus 中每秒创建的块的数量:
rate(prometheus_tsdb_head_chunks_created_total[1m])