prometheus
监控类型
- 指标监控 prometheus
- 白盒监控(内省) ---当监控需要数据时应用把数据暴露给promethues
- 黑盒监控 (探针)-- 监控默默看看应用,不会对应用有侵扰 blackbox
- 日志监控 elk loki
- 链路追踪 zipkin jaeger skywalking pinpoint
prometheus

-
下载安装
#./prometheus --help ./prometheus \ --web.listen-address=0.0.0.0:9090 \ --config.file=/data/prometheus/prometheus-2.39.1.linux-amd64/prometheus.yml \ --web.read-timeout=5m \ --web.max-connections=10 \ --storage.tsdb.retention=1d \ --storage.tsdb.retention.size=100GB \ --storage.tsdb.path=/data/prometheus/data \ --storage.tsdb.min-block-duration=2h \ --storage.tsdb.max-block-duration=2h \ --query.max-concurrency=20 \ --query.timeout=2m \ --web.enable-lifecy -
配置文件
配置文件修改后执行以下步骤重新加载配置
promtool check config prometheus.yml curl 127.0.0.1:9090/-/reloadgraph LR A[prometheus.yml] --> |全局配置|B(<a href=#global>global</a>) A --> |对接alert|C(<a href='#alterings'>alterings</a>) A --> |对接评估规则|D(<a href='#rule_files'>rule_files</a>) A --> |指标抓取|E(<a href='#scrape_configs'>scrape_configs</a>) E --> |静态配置|E1(<a href=#static_configs>static_configs</a>) E --> |文件自动发现|E2(<a href=#file_sd_configs>file_sd_configs</a>) E --> |consul自动发现|E3(<a href=#consul_sd_configs>consul_sd_configs</a>) E --> |kubernetes自动发现|E4(<a href='#kubernetes_sd_configs'>kubernetes_sd_configs</a>) E --> |dns自动发现|E5(<a href='#dns_sd_configs'>dns_sd_configs</a>) E --> |重新打标|E6(<a href='#relabel_configs'>relabel_configs</a>) A --> |外部存储|F(remote_write/remote_read)
global
global:
# 1m 抓取一次target
scrape_interval: 1m
# 10s 抓取不到超时
scrape_timeout: 10s
# 1m 评估一次rules
evaluation_interval: 1m
# 在该promethues实例中每一个时间序列上添加zoon=shanghai 的标签
external_labels:
zoon: "shanghai"
env: "test"
# 记录promql 的查询记录
query_log_file: "/var/log/promql"
scrape_configs
scrape_congfigs:
- job_name: prometheus
scrape_interval: 5m
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets: ['localhost:8080','localhost:8081']
labels:
group: 'production'
scrape_configs:
- job_name: 'node'
static_configs:
- targets:
- localhost:9100
# 只收集指定的指标
params:
collect[]:
- cpu
- meminfo
- diskstats
- netdev
- filefd
- filesystem
- xfs
- systemd
# curl -g -X GET http://127.0.0.1:9100/metrcs?collect[]=cpu
file_sd_configs:
- files:
- file/*.yml
refresh_interval: 5m
cat targets/prometheus*.yaml
# prometheus.yaml
- targets:
- 172.29.1.11:9090
labels:
app: prometheus
job: primetheus
# 启动一个单实例的[consul](https://www.consul.io/downloads)
consul agent -bootstrap \
--client=0.0.0.0 \
-config-dir=/etc/conf.d \
-data-dir=/consul/data/ \
-dev \
-enable-local-script-checks \
-ui
# 在consul 中注册服务
vi /etc/conf.d/node.json
{
"services": [
{
"id": "node_exporter-node01",
"name": "node01",
"address": "10.4.7.11",
"port": 9100,
"tags": ["nodes"],
"checks": [{
"http": "http://10.4.7.11:9100/metrics",
"interval": "5s"
}]
},
{
"id": "node_exporter-node02",
"name": "node02",
"address": "10.4.7.12",
"port": 9100,
"tags": ["nodes"],
"checks": [{
"http": "http://10.4.7.12:9100/metrics",
"interval": "5s"
}]
}
]
}
# 加载配置文件/etc/conf.d/node.json
consul reload
scrape_configs:
- job_name: "node"
consul_sd_configs:
- server: "47.113.100.31:8500"
tags:
- "nodes"
refresh_interval: 2m
# 通过测试命令测试服务的注册发现
consul services register -id="node_exporter-node02"
consul services deregister -id="node_exporter-node02"
scrape_configs:
- job_name: test
kubernetes_sd_configs:
- role:
role: node
__meta_kubernetes_node_name
__meta_kubernetes_node_label_<labelname>
__meta_kubernete_node_labelpressent_<labelname>
__meta_kubernetes_node_label_<labelname>
__meta_kubernetes_node_annotationpresent_<annotationname>
__meta_kubernetes_node_address_<address_type>
role: service #这通常对于服务的黑盒监视很有用
__meta_kubernetes_namespace
__meta_kubernetes_service_name
__meta_kubernetes_service_port_name
__meta_kubernetes_service_port_protocol
__meta_kubernetes_service_type #服务的类型
__meta_kubernetes_service_label_<labelname>
__meta_kubernetes_service_labelpresent_<labelname>
__meta_kubernetes_service_annotation_<annotationname>
__meta_kubernetes_service_annotationpresent_<annotationname>
__meta_kubernetes_service_cluster_ip # 服务的群集 IP 地址
__meta_kubernetes_service_external_name #服务的群集 IP 地址
role: pod
__meta_kubernetes_namespace:容器对象的命名空间。
__meta_kubernetes_pod_name:容器对象的名称。
__meta_kubernetes_pod_ip:容器对象的容器 IP。
__meta_kubernetes_pod_label_<labelname>:容器对象中的每个标签。
__meta_kubernetes_pod_labelpresent_<labelname>:对于容器对象中的每个标签。true
__meta_kubernetes_pod_annotation_<annotationname>:来自容器对象的每个注释。
__meta_kubernetes_pod_annotationpresent_<annotationname>:对于容器对象中的每个注释。true
__meta_kubernetes_pod_container_init:如果容器是InitContainertrue
__meta_kubernetes_pod_container_name:目标地址指向的容器的名称。
__meta_kubernetes_pod_container_port_name:容器端口的名称。
__meta_kubernetes_pod_container_port_number:容器端口的编号。
__meta_kubernetes_pod_container_port_protocol:容器端口的协议。
__meta_kubernetes_pod_ready:设置为或表示容器的就绪状态。truefalse
__meta_kubernetes_pod_phase:在生命周期中设置为 、、 或 。PendingRunningSucceededFailedUnknown
__meta_kubernetes_pod_node_name:调度 Pod 所到的节点的名称。
__meta_kubernetes_pod_host_ip:容器对象的当前主机 IP。
__meta_kubernetes_pod_uid:容器对象的 UID。
__meta_kubernetes_pod_controller_kind:容器控制器的对象类型。
__meta_kubernetes_pod_controller_name:容器控制器的名称
role: endpoints
__meta_kubernetes_namespace:终结点对象的命名空间。
__meta_kubernetes_endpoints_name:终结点对象的名称。
对于直接从终端节点列表中发现的所有目标(未从底层 Pod 额外推断出的目标),将附加以下标签:
__meta_kubernetes_endpoint_hostname:终结点的主机名。
__meta_kubernetes_endpoint_node_name:承载终结点的节点的名称。
__meta_kubernetes_endpoint_ready:设置为终结点的就绪状态或为其设置。truefalse
__meta_kubernetes_endpoint_port_name:终结点端口的名称。
__meta_kubernetes_endpoint_port_protocol:端点端口的协议。
__meta_kubernetes_endpoint_address_target_kind:终结点地址目标的类型。
__meta_kubernetes_endpoint_address_target_name:终结点地址目标的名称。
如果终结点属于某个服务,则会附加发现的所有标签。role: service
对于容器支持的所有目标,将附加发现的所有标签。role: pod
role: ingress
该角色为每个入口的每个路径发现一个目标。这通常对于入口的黑盒监视很有用。该地址将设置为入口规范中指定的主机。ingress
可用的元标签:
__meta_kubernetes_namespace:入口对象的命名空间。
__meta_kubernetes_ingress_name:入口对象的名称。
__meta_kubernetes_ingress_label_<labelname>:入口对象中的每个标签。
__meta_kubernetes_ingress_labelpresent_<labelname>:对于入口对象中的每个标签。true
__meta_kubernetes_ingress_annotation_<annotationname>:来自入口对象的每个批注。
__meta_kubernetes_ingress_annotationpresent_<annotationname>:对于入口对象中的每个批注。true
__meta_kubernetes_ingress_class_name:入口规范中的类名(如果存在)。
__meta_kubernetes_ingress_scheme:入口的协议方案(如果设置了 TLS 配置)。缺省值为 。httpshttp
__meta_kubernetes_ingress_path:入口规范的路径。缺省值为 。
dns_sd_configs
依赖于A AAAA 或SRV 记录
[relabel_configs](Configuration | Prometheus)
source_labels: []source_labels 从现有的label中选取标签separator: ";"这些标签使用指定的separator 串联到一起regex: .*然后使用配置的regex 进行匹配- 匹配到的内容通过
action: keep drop replace labelmaplabeldroplabelkeep进行保留、删除、替换操作 target_label用在replace 中 。指明匹配到的标签 被哪一个结果标签替换。对于replace动作来说这个标签是必须的replacemet在replace 动作中,定义替换后 值 应该替换为什么,支持正则向后引用。
prometheus 自带的标签:
__scheme__指定http 或 https
__address__ 抓取的目标地址,instance 默认使用该值
__metrics_path__ 抓取的路径 默认为 /metrics
__param__ url 中传递过来的参数
__scrape_interval__ 抓取周期
__name__ 指标名称
__ 开头的标签在重新打标后会被移除
在重新打标阶段会提供以__meta_ 开头的标签
如果在打标阶段需要存储临时标签可以使用以__tmp
relabel_configs:
- source_labels: ["__address__"]
separator: ";"
regex: "(^[0-9].*):[0-9]+"
action: replace
# 新的标签值
replacement: "$1"
# 新的标签名称
target_label: "IP"
# 删除匹配的job
relabel_configs:
- source_labels: ["__address__"]
separator: ";"
regex: "(^[0-9].*):[0-9]+"
action: drop
# 保存匹配的job
relabel_configs:
- source_labels: ["__address__"]
separator: ";"
regex: "(^[0-9].*):[0-9]+"
action: keep
relabel_configs:
- regex: "job"
# 删除了job 标签
action: labeldrop
relabel_configs:
- regex: ".*"
action: labelkeep
# __address__ = "IP:port" 重命名为 ="IP:port"
relabel_configs:
- regex: "__address__"
action: labelmap
# __address__ = "IP:port" 重命名为 address="IP:port"
relabel_configs:
- regex: "__(address)__"
action: labelmap
target_label: $1
rule_files
rule_files:
# - "first.rules"
# - "second.rules"
groups:
- name: node_cpu
rules:
# record: level:metric:operation
- record: instance:node_cpu_seconds:avg_rate5m
expr: avg by (job,instance,mode) (rate(node_cpu_seconds_total[5m]))
允许修改评估周期 和 给新的指标添加标签
groups:
- name: node_cpu
interval: 10s
rules:
# record: level:metric:operation
- record: instance:node_cpu_seconds:avg_rate5m
expr: avg by (job,instance,mode) (rate(node_cpu_seconds_total[5m]))
labels:
metric_type: aggration
-
评估规则
groups: - name: example rules: - record: job:http_inprogress_requests:sum expr: sum by (job) (http_inprogress_requests) -
报警规则
groups: - name: example rules: - alert: <string> [ for: <duration> | default = 0s ] expr: <string> labels: [ <labelname>: <tmpl_string> ] annotations: [ <labelname>: <tmpl_string> ]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."
alterings
alerting:
altermanagers:
- static_configs:
- targets:
- 'localhost: 9093'
- 'localhost: 9092'
FQA
-
监控kubelet 时提示x509
Get "https://10.4.7.11:10250/metrics": x509: cannot validate certificate for 10.4.7.11 because it doesn't contain any IP SANs解决办法本次使用方法2解决 You have three options: 1. Connect by name (either implement DNS, or if your environment is very static, add the hostnames to /etc/hosts on the prometheus server) 2. Set insecure_skip_verify 3. Reissue the certs to include an IP SAN for the host's IP -
前两天遇到一个需求,给已经写好的exporter 指标存储前添加label。当时前想后思似曾相识,着急忙慌翻阅promethues.io ,后来发现这个文章中有写。把前面的内容粘贴过来给自己提个醒
- targets: - 172.29.1.11:9090 labels: app: prometheus job: primetheus -
新项目上线,需要单独部署一套监控系统。领导需要你评估下1T 的空间能不能存放下30天的监控数据
公司测试环境每秒收集率约:15万/s
rate(prometheus_tsdb_head_samples_appended_total[15m])按照单个metrics 大小2bytes计算,保留7天数据,预计需要110G磁盘空间。实测promethus 自带的tsdb 空间使用170G, victoraMetrics 空间占用62GB
>>> 150000*2*60*60*24/1024/1024/1024*7 168.97916793823242 -
promethus 自身暴露的常用指标
指标 释义 指标类型 prometheus_config_last_reload_successful最后重启是否成功 1 表示成功 0表示失败 prometheus_config_last_reload_success_timestamp_seconds最后成功重启的时间戳 prometheus_notifications_alertmanagers_discovered发现alertmanager并处于活跃状态 prometheus_notifications_dropped_total由于发生错误而导致发送到alert 失败的告警数量 prometheus_notifications_sent_total发送了多少条告警通知 prometheus_notifications_queue_capacityprometheus 处理告警队列的配额 prometheus_notifications_queue_length有多少条告警位于当前队列中 irate(process_cpu_seconds_total[15m])cpu 使用时长 process_open_fds已打开文件描述符数量 prometheus_engine_query_duration_secondsprometheus 引擎查询响应时长 summary -
待看operator
Robust Perception | Prometheus Monitoring Experts – Prometheus Monitoring Experts
prometheus-adapter
浙公网安备 33010602011771号