Prometheus 是否公开任何指标?即它使用了多少磁盘空间等。
我想开始微调我们的普罗米修斯服务器,因此需要监控当前存在的内容。我希望能够看到它使用了多少磁盘空间。
Prometheus v2.31 通过 apt 安装在 Ubuntu Linux 22.04 LTS 上。
Prometheus 是否公开任何指标?即它使用了多少磁盘空间等。
我想开始微调我们的普罗米修斯服务器,因此需要监控当前存在的内容。我希望能够看到它使用了多少磁盘空间。
Prometheus v2.31 通过 apt 安装在 Ubuntu Linux 22.04 LTS 上。
我正在尝试使用基本身份验证关闭端口(对于普罗米修斯的推送网关),所以不是 nginx 的大专家,所以有人可以给我和建议我哪里错了吗?
我有 9091 端口,应该在 auth 前面从外部关闭。此端口正在被 pushgateway 使用
我当前的 nginx 配置:
events { }
http {
upstream prometheus {
server 127.0.0.1:9090;
keepalive 64;
}
upstream pushgateway {
server 127.0.0.1:9091;
keepalive 64;
}
server {
root /var/www/example;
listen 0.0.0.0:80;
server_name __;
location / {
auth_basic "Prometheus server authentication2";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://prometheus;
}
}
server {
root /var/www/example;
listen 0.0.0.0:3001;
server_name __;
location / {
auth_basic "Pushgateway server authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://pushgateway;
}
}
}
所以基本身份验证适用于:3001,但 9091 仍然打开。我试图改变它的下一个方式:
server {
root /var/www/example;
listen 0.0.0.0:3001;
listen 0.0.0.0:9091;
server_name __;
location / {
auth_basic "Pushgateway server authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://pushgateway;
}
}
并且工作正常,但是...... pushgateway 无法开始尝试监听:9091 并抛出“bind:address is already in use”。我怎样才能避免它并将pushgateway隐藏在nginx前面?
Pushgatewa 的配置:
ExecStart=/usr/local/bin/pushgateway --web.listen-address=":9091" --web.telemetry-path="/metrics" --persistence.file="/tmp/metric.store" --persistence.interval=5m --log.level="info" --log.format="logger:stdout?json=true"
我们正在使用 Prometheus Blackbox Exporter(blackbox_exporter,版本 0.19.0)来检查 HTTP 端点。
现在我们需要使用fail_if_body_matches_regexp
.
当 html 正文中存在某个单词时,检查应该失败。
为此,我们创建了以下 http prob 配置:
Module configuration:
prober: http
timeout: 5s
http:
valid_http_versions:
- HTTP/1.1
- HTTP/2
- HTTP/2.0
preferred_ip_protocol: ip4
ip_protocol_fallback: true
fail_if_body_matches_regexp:
- The page is temporarily unavailable
follow_redirects: true
tcp:
ip_protocol_fallback: true
icmp:
ip_protocol_fallback: true
dns:
ip_protocol_fallback: true
不幸的是,检查没有按预期工作。即使网站包含The page is temporarily unavailable
在 html 正文中,检查仍然成功。
Logs for the probe:
ts=2022-02-17T09:46:31.403831228Z caller=main.go:320 module=http_2xx target=https://site.local level=info msg="Beginning probe" probe=http timeout_seconds=5
ts=2022-02-17T09:46:31.403959629Z caller=http.go:335 module=http_2xx target=https://site.local level=info msg="Resolving target address" ip_protocol=ip4
ts=2022-02-17T09:46:31.500911613Z caller=http.go:335 module=http_2xx target=https://site.local level=info msg="Resolved target address" ip=XXX.XXX.XXX.XXX
ts=2022-02-17T09:46:31.501017313Z caller=client.go:251 module=http_2xx target=https://site.local level=info msg="Making HTTP request" url=https://XXX.XXX.XXX.XXX host=site.local
ts=2022-02-17T09:46:31.614236162Z caller=main.go:130 module=http_2xx target=https://site.local level=info msg="Received HTTP response" status_code=200
Metrics that would have been returned:
# HELP probe_failed_due_to_regex Indicates if probe failed due to regex
# TYPE probe_failed_due_to_regex gauge
probe_failed_due_to_regex 0
要检查网站是否在 Prometheus Blackbox Exporter 中正确加载,我想检查测试期间收到的 html 正文。有谁知道这是否可能并且可能有一些进一步的调试提示?
我试图找到有关 Kubernetes 中 NGINX 入口控制器公开的指标的文档,但到目前为止,我还没有找到任何关于指标及其含义的可靠来源。
例如,有三个不同的request_size
指标(sum
、bucket
、count
)。
从我的猜测sum
和count
相互关联。为了获得平均请求大小,我可能会做类似sum by (method) (request_size_sum{...}) / sum by (method) (request_size_count{...})
.
但是bucket
,尤其是什么是什么le
?
我仍在努力理解为什么我的 ipmi_exporter 容器不会与我的 Prometheus、Grafana、snmp_exporter 和 alertmanager 在同一个“pod”中运行。当我打开“pod”时, docker -compose 说ipmi_exporter 已启动,但 docker -compose ps找不到容器。如果我的帖子标题中没有明确说明,我希望能够看到包含 ipmi_exporter 启动的日志。
另外,什么是 docker-compose 容器组?Pod 是 K8s 的东西。
我使用 nfs-subdir-external-provisioner 作为我的 promethues 的自动 pv 供应器(通过 promethues-operator )我已经成功创建了我们的 sts、pod、pvc、pv,一切看起来都很好。但是如果我使用 kubectl get sts -o yaml ,状态仍然是“阶段:待定”....有人知道吗?
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
name: prometheus-k8s-db
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: managed-nfs-storage
volumeMode: Filesystem
status:
phase: Pending
NAME READY AGE
prometheus-k8s 2/2 26m
NAME READY STATUS RESTARTS AGE
prometheus-k8s-0 2/2 Running 0 28m
prometheus-k8s-1 2/2 Running 0 28m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
prometheus-k8s-db-prometheus-k8s-0 Bound pvc-77c8035e-fe32-4c0d-8302-930b39979fc1 5Gi RWO managed-nfs-storage 3h57m
prometheus-k8s-db-prometheus-k8s-1 Bound pvc-21989d64-cc89-4aed-bed5-30bd22c0ae35 5Gi RWO managed-nfs-storage 3h57m
我使用 helm(在“monitoring”命名空间中)将 kube-prometheus-stack 15.3.1 安装到 GKE 集群中。我使用values.yaml
来打开某些组件的入口,并将 SMTP 信息和接收者详细信息添加到警报管理器中。在大多数情况下,一切似乎都很好,除了 Prometheus 发出了许多警报,而且我没有收到任何警报电子邮件。
一个触发警报是:
PrometheusNotConnectedToAlertmanagers
Prometheus 监控/prometheus-kube-prometheus-stak-prometheus-0 没有连接到任何Alertmanagers
另一个是:
PrometheusOperatorSyncFailed
监控命名空间中的控制器警报管理器无法协调 1 个对象。
我还尝试打开警报管理器的入口并指向alerts.mydomiain.com
它,但是当我尝试任何 GET 请求(例如alerts.mydomain.com/v2/status
)时,我总是会收到 502 服务器错误。
我需要做什么才能让我的 alertmanager 正常工作?
这是输出kubectl get pods,svc,daemonset,deployment,statefulset -n monitoring
:
NAME READY STATUS RESTARTS AGE
pod/kube-prometheus-stack-grafana-58f7fcb497-hm72h 2/2 Running 0 30h
pod/kube-prometheus-stack-kube-state-metrics-6d588499f5-d957b 1/1 Running 0 2d3h
pod/kube-prometheus-stack-operator-54f89674c9-k8ml7 1/1 Running 0 2d3h
pod/kube-prometheus-stack-prometheus-node-exporter-22vpd 1/1 Running 0 3h57m
pod/kube-prometheus-stack-prometheus-node-exporter-2qsl9 1/1 Running 0 3h57m
pod/kube-prometheus-stack-prometheus-node-exporter-4d27n 1/1 Running 0 7h36m
pod/kube-prometheus-stack-prometheus-node-exporter-7rlnk 1/1 Running 0 4h47m
pod/kube-prometheus-stack-prometheus-node-exporter-7xlf4 1/1 Running 0 4h51m
pod/kube-prometheus-stack-prometheus-node-exporter-9mfnt 1/1 Running 0 3h57m
pod/kube-prometheus-stack-prometheus-node-exporter-9zblf 1/1 Running 0 2d3h
pod/kube-prometheus-stack-prometheus-node-exporter-bdcjj 1/1 Running 0 2d3h
pod/kube-prometheus-stack-prometheus-node-exporter-bs54w 1/1 Running 0 4h47m
pod/kube-prometheus-stack-prometheus-node-exporter-fp95h 1/1 Running 0 2d3h
pod/kube-prometheus-stack-prometheus-node-exporter-h4zhw 1/1 Running 0 2d3h
pod/kube-prometheus-stack-prometheus-node-exporter-pz8js 1/1 Running 0 3h58m
pod/kube-prometheus-stack-prometheus-node-exporter-rrrhk 1/1 Running 0 27h
pod/kube-prometheus-stack-prometheus-node-exporter-rszlt 1/1 Running 0 2d3h
pod/kube-prometheus-stack-prometheus-node-exporter-s62wq 1/1 Running 0 4h47m
pod/kube-prometheus-stack-prometheus-node-exporter-w9dmb 1/1 Running 0 5h32m
pod/kube-prometheus-stack-prometheus-node-exporter-xqmxk 1/1 Running 0 4h51m
pod/prometheus-kube-prometheus-stack-prometheus-0 2/2 Running 1 30h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-prometheus-stack-alertmanager NodePort 10.125.4.161 <none> 9093:30903/TCP 2d3h
service/kube-prometheus-stack-grafana NodePort 10.125.7.177 <none> 80:32444/TCP 2d3h
service/kube-prometheus-stack-kube-state-metrics ClusterIP 10.125.2.56 <none> 8080/TCP 2d3h
service/kube-prometheus-stack-operator ClusterIP 10.125.4.171 <none> 443/TCP 2d3h
service/kube-prometheus-stack-prometheus NodePort 10.125.13.11 <none> 9090:30090/TCP 2d3h
service/kube-prometheus-stack-prometheus-node-exporter ClusterIP 10.125.10.231 <none> 9100/TCP 2d3h
service/prometheus-operated ClusterIP None <none> 9090/TCP 2d3h
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/kube-prometheus-stack-prometheus-node-exporter 17 17 17 17 17 <none> 2d3h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/kube-prometheus-stack-grafana 1/1 1 1 2d3h
deployment.apps/kube-prometheus-stack-kube-state-metrics 1/1 1 1 2d3h
deployment.apps/kube-prometheus-stack-operator 1/1 1 1 2d3h
NAME READY AGE
statefulset.apps/prometheus-kube-prometheus-stack-prometheus 1/1 42h
我有一个用于 HPA 的指标,问题是该指标有尖峰,为了避免这种情况,我在 prometheus 的记录规则中使用了一段时间内的平均值,但将其导出到 stackdriver(在 gke ) 我正在使用 stackdriver-prometheus-sidecar 并且它不会将记录的指标发送到stackdriver。
关于如何导出此指标的任何想法?我发现的其他解决方案是使用 v2beta2 hpa 并更改行为以更改按比例放大的稳定窗口,但这仅在 kubernetes 上的 v1.18 上可用,而 GCP 在稳定通道上只有 1.17 版,知道吗?
我已经设置了 Prometheus 的 Alertmanager 来管理来自 Prometheus 的警报。我收到了从 Prometheus 到 Alertmanager 的警报,但故事到此结束。Alertmanager 永远不会将警报发送到我的电子邮件端点。
为了弄清楚警报在 Alertmanager 内部的确切位置结束了它们的旅程,我想将日志级别从 info 转换为 debug,但一直无法弄清楚如何。即使现在找到日志似乎也是一个艰难的问题,它不在/var/log
并且journalctl -u alertmanager
包含的内容太少,以至于可能在某个地方还有另一个日志。
配置 Alertmanager的手册页没有提到调试级别。我查看了提到 log 的源代码,发现该设置应该命名为log.level
. 将以下代码段添加到配置 YAML 也无济于事:
log:
level: debug
因为 Alertmanager 无法启动,无法解析其配置文件。
我正在尝试确定为什么此警报 ( NodeClockNotSynchronising
) 会针对我已配置的少数 VM 触发。(不是全部,只是几个,这很奇怪)
根据导出的指标,我看到:
# HELP node_timex_sync_status Is clock synchronized to a reliable server (1 = yes, 0 = no).
# TYPE node_timex_sync_status gauge
node_timex_sync_status 0
我可以 ssh 进入其中一个虚拟机并且ntpd
正在运行,并且date
命令返回正确的时间。
因此,深入研究timex
收集器文档和代码,这就是“失败”的原因:
var syncStatus float64
var divisor float64
var timex = new(unix.Timex)
status, err := unix.Adjtimex(timex)
if err != nil {
return fmt.Errorf("failed to retrieve adjtimex stats: %w", err)
}
if status == timeError {
syncStatus = 0
} else {
syncStatus = 1
}
由于 syncStatus 为 0,因此正在触发警报。深入研究adjtimex()系统调用的返回码:
#define TIME_ERROR 5 /* clock not synchronized */
为什么内核在运行并且时钟同步TIME_ERROR
时会返回?ntpd
任何帮助将不胜感激。