本文发布于Cylon的收藏册,转载请著名原文链接~

全局配置选项

1
2
3
4
5
6
7
scrape_interval: 采集生命周期
scrape_timeout: 采集超时时间
evaluation_interval: 告警评估周期
rule_files 监控告警规则
scrape_config: 被监控端

altering 

检查配置文件语法

1
2
3
$ promtool check config \etc\prometheus.yml 
Checking \etc\prometheus.yml
  SUCCESS: 0 rule files found

100 - (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes) \ node_memory_MemTotal_bytes * 100

计算剩余空间

node_filesystem_free_bytes{mountpoint="",fstype=~“ext4|xfs”} \ node_filesystem_size_bytes{mountpoint="",fstype=~“ext4|xfs”} * 100

查看使用的百分比

100-node_filesystem_free_bytes{mountpoint="",fstype=~“ext4|xfs”} \ node_filesystem_size_bytes{mountpoint="",fstype=~“ext4|xfs”} * 100

prometheus使用influxdb [Prometheus endpoints support in InfluxDB | InfluxData Documentation](https:\docs.influxdata.com\influxdb\v1.7\supported_protocols\prometheus)

[Configuration | Prometheus](https:\prometheus.io\docs\prometheus\latest\configuration\configuration)

配置文件参考

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
global:
alerting:
  alertmanagers:
  - static_configs:
    - targets:
rule_files:
scrape_configs:
  - job_name: 'prometheus1'
    file_sd_configs:
    - files: ['\data\sd_config\test.yml']
      refresh_interval: 5s
    relabel_configs:
    - action: replace
      source_labels: ['prometheous1']
      regex: (.*)
      replacement: $1
      target_label: ids
    - action: keep
      source_labels: ["job"]
  - job_name: 'k8s_master'
    file_sd_configs:
    - files: ['\data\sd_config\master.yml']
      refresh_interval: 5s
remote_write:
- url: "http:\\localhost:8086\api\v1\prom\write?db=prometheus"
remote_read:
- url: "http:\\localhost:8086\api\v1\prom\read?db=prometheus"

influxdb使用

InfluxDB学习之InfluxDB的基本操作 | Linux大学

查看所有表

1
SHOW MEASUREMENTS
1
select * from up

https:\github.com\kubernetes\kubernetes\tree\master\cluster\addons\prometheus

文件主要包括一下几个部分

  • Prometheus的安装 包括 rbac service configmap
  • Prometheus-metrics 获取资源对象
  • node-exporter 获取工作节点资源信息
  • alertmanager 告警

安装顺序

prometheus-rbac.yaml Prometheus访问apiserver的授权 prometheus-configmap.yaml 管理Prometheus的配置文件 prometheus-service.yaml 将Prometheus端口暴漏 prometheus-statefulset.yaml

原因为 prometheus-statefulset.yaml中的accessModes不能为ReadWriteOnce prometheus"is invalid: spec: Forbidden: updates to statefulset spec for fields other than ‘replicas’, ’template’, and ‘updateStrategy’ are forbidden

日志中报错pod has unbound immediate persistentvolumeclaims back-off restarting failed container

错误原因:动态绑定至其他sc上,查看kubectl describe pvc prometheus-data-prometheus-0 -n kube-systempvc中报错storageclass.storage.k8s.io "nfs" not found

prometheus时间不一致问题

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
spec:
  containers:
  - name: myweb
    image: harbor/tomcat:8.5-jre8
    volumeMounts:
    - name: host-time
      mountPath: /etc/localtime
    ports:
    - containerPort: 80
  volumes:
  - name: host-time
    hostPath:
      path: /etc/localtime

部署应用时,单独读取主机的“/etc/localtime”文件,即创建pod时同步时区,无需修改镜像,但是每个应用都要单独设置。

prometheus server down

编辑prometheus-statusfullset.yaml 修改其配置localhost 改为 127.0.0.1

1
time="2020-11-20T18:44:48+08:00" level=error msg="subset not found for kube-system/prometheus-server" providerName=kubernetescrd ingress=promserver namespace=kube-system

查找原因kubernetes svc 匹配错误 service endpoint没有匹配到内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ kubectl describe svc  prometheus-server  -n kube-system 
Name:              prometheus-server
Namespace:         kube-system
Labels:            <none>
Annotations:       Selector:  monitor=prometheus
Type:              ClusterIP
IP:                10.110.116.203
Port:              <unset>  9090/TCP
TargetPort:        9090/TCP
Endpoints:         <none>
Session Affinity:  None
Events:            <none>

修改后正常

数学理论基础实现的

配置文件

1
- job_name: 'prometheus' 首先定义任务名称

prometheus的客户端主要有两种方式采集

  • pull 主动输影的形式
  • push 被动推送的形式

put

put指的是客户端(被监控机器)先安装各类已有exporters(由社区组积或企业开发的监控客户端插件)在系统上之后,exporter以守护进程的模式运行并开始采集数据

exporter 本身也是一个htp_server 可以对http请求作出响应返回数据(KV metrics)

prometheua用pull 这种主动拉的方式(HTTP get)去访问每个节点上exporter并采样回需要的数据

push:

push指的是在客户端(或者服务端)安装这个官方提供的pushgateway插件然后,使用我们自行开发的各种脚本把监控数据组织成K/V的形式,metrics形式发送给pushgateway之后 puahgataway会再推送给prometheus

这种是一种被动的数据采集模式

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2019/04/prometheus-install/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。